PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   String zu Array Versand Problem (http://www.selfphp.de/forum/showthread.php?t=25321)

doschni 06.07.2014 15:27:39

String zu Array Versand Problem
 
Hallo allerseits

Ich möchte eine SMS Versandmöglichkeit so erweitern, dass bis zu 5 Mitarbeiter mit verschiedenen Mobilnummern die gleiche Nachricht erhalten. Für den SMS-Versand stellt websms.ch ein (leider) vorgegebenes Skript zur Verfügung. Die Nachricht an einzelne Empfänger kann ich problemlos verschicken.

In ein Formularfeld fülle ich einen ganz normalen String mittels jQuery UI Autocomplete.

Nun bereitet mir aber das vorgegebene Array für die Empfänger $recipientAddressList = array(); Sorgen. Ich weiss nicht wie füllen, ohne dass eine Fehlermeldung des vorgegebenen Skripts "must Numeric" erscheint. Mittels print_r($explode); erscheinen zwei saubere Arrayeinträge (String mit delimiter gesäubert).

PHP-Code:


//String $_POST['phone'] z.B. = 41745554433<Mitarbeiter1>, 41746667788<Mitarbeiter2>,
$reveiver $_POST['phone'];

$delimiter = array(" ","",'"','",',",",".","'","\"","|","\\","/",";",":",'"<".*.">"');
$replace str_replace($delimiter$delimiter[0], $receiver);
$explode explode($delimiter[0],$replace);


echo 
'<pre>';
print_r($explode);
echo 
'</pre>';
 
//Vorgabe damits funktioniert wäre: $recipientAddressList = array("41745554433","41746667788");
$recipientAddressList = array();
 
$utf8_message_text    "test"

Wie bringe ich die Nummern mit den Anführungszeichen in das array()? Wo liegen der oder die Fehler? Oder gibt es eine einfachere Lösung?

Hoffe, Ihr versteht was ich meine. Um Antworten wäre ich sehr dankbar.

Gruss doschni

meikel (†) 06.07.2014 20:17:13

AW: String zu Array Versand Problem
 
Zitat:

//Vorgabe damits funktioniert wäre: $recipientAddressList = array("41745554433","41746667788");
Das ist falsch.
"41745554433" ist ein String.
41745554433 ist bei 64bit PHP eine Integerzahl, bei 32bit PHP eine Falltür.

btw: das ist die Kurzform. Die Langform hat ein dämliches Javascript gefressen, mit denen dieses Forum betrieben wird. Allerdings bin ich zu faul, alles noch mal zu tippern.

@admin
habe ich nen Trojaner, baut Firefox + noScript Mist oder dreht da das Javascriptgerätze von vBulletin v3.8.3 durch? Diesen Text durfte ich nur deshalb schreiben, weil ich für *.selfphp.* und *.google*.* Javascript ausgeschaltet habe.

doschni 07.07.2014 17:52:33

AW: String zu Array Versand Problem
 
Das ist es wo ich hängen bleibe. Das vorgegebene Versand-Skript verlangt also einen String in einem Array. Den hätte ich:
PHP-Code:

$comma_separated '"' implode('","'$explode) . '"';

echo 
$comma_separated;
//Ausgabe = "41745554433","41746667788" 

Folgendes funktioniert jedoch nicht:
PHP-Code:

$recipientAddressList = array($comma_separated); //oder
$recipientAddressList = array('$comma_separated'); //oder
$recipientAddressList = array("$comma_separated"); 

Aber wie bekomme ich den String ins Array, damit er als String erkannt wird?

vt1816 07.07.2014 18:34:27

AW: String zu Array Versand Problem
 
PHP-Code:

$recipientAddressList = array();
$recipientAddressList[] = $comma_separated


doschni 07.07.2014 19:05:57

AW: String zu Array Versand Problem
 
Danke für Eure bisherigen Antworten. Aber
Zitat:

Zitat von vt1816
PHP-Code:

$recipientAddressList = array(); 
$recipientAddressList[] = $comma_separated


funktioniert leider auch nicht.

Es erscheint folgende Fehlermeldung:

ParameterValidationException caught: Empfänger '"41745554433","41746667788"' wurde nicht ausgewählt! (must be numeric).

Habt Ihr noch weitere Tipps?

PS. Die zusätzlichen Apostrophe am Anfang und Ende werden ausgegeben, weil die Fehlermeldung innerhalb dieser ausgegeben wird.

vt1816 07.07.2014 20:03:43

AW: String zu Array Versand Problem
 
Zitat:

Zitat von doschni (Beitrag 146668)
[..]
ParameterValidationException caught: Empfänger '"41745554433","41746667788"' wurde nicht ausgewählt! (must be numeric).

Habt Ihr noch weitere Tipps?

Wieso übergibst Du einen String wenn ein Numeric erwartet wird?

doschni 07.07.2014 21:00:46

AW: String zu Array Versand Problem
 
Weil websms.ch das Skript so vorgibt, siehe Link.

Und wenn ich es wie folgt abschicke, funktioniert es ja auch:

PHP-Code:

$recipientAddressList = array("41745554433","41746667788"); 

Wie genau sollte ich/man es denn sonst machen? Dynamisch krieg ich's bisher einfach nicht hin.

meikel (†) 07.07.2014 22:43:26

AW: String zu Array Versand Problem
 
Zitat:

Zitat von doschni (Beitrag 146666)
Das ist es wo ich hängen bleibe. Das vorgegebene Versand-Skript verlangt also einen String in einem Array.

Frag doch mal den Anbieter, ob er noch alle Tassen im Schrank hat, numeric zu fordern und im Beispiel ein Array mit Strings anzugeben.
Das
PHP-Code:

$string "41745554433"

ist ein Stringliteral. Zwischen die beiden Gänsefüße kannste alles reintippern, was Du willst. Du kannst selbst weitere Gänsefüße einfügen, wenn Du das escape Zeichen \ davorsetzt:
PHP-Code:

$auch_ein_string "4174\"5554433"

Beachte den wichtigen Unterschied zwischen single quoted und double quoted.
http://de3.php.net/manual/en/languag....syntax.single
http://de3.php.net/manual/en/languag....syntax.double

Allerdings hast Du ein anderes Problem:
http://de3.php.net/integer
Zitat:

The size of an integer is platform-dependent, although a maximum value of about two billion is the usual value (that's 32 bits signed). 64-bit platforms usually have a maximum value of about 9E18, except for Windows, which is always 32 bit. PHP does not support unsigned integers. Integer size can be determined using the constant PHP_INT_SIZE, and maximum value using the constant PHP_INT_MAX since PHP 4.4.0 and PHP 5.0.5.
Mit 32bit PHP dürfen die Ziffern nur 9 Stellen haben, die Telefonnummern in Deinem Beispiel haben aber 11 Stellen. Da brauchste 64bit PHP unter Linux.

Ein weiteres Problem wäre eine Vornull, die bei Integer nicht gestattet ist. Zahlen, die mit einer 0 beginnen, interpretiert PHP als Oktalzahl.
Zitat:

Aber wie bekomme ich den String ins Array, damit er als String erkannt wird?
s.o.
Kläre mit den Idioten, wieso die
a. numeric fordern und
b. nen String als Beispiel angeben.

Und noch mal zum Thema:
Zitat:

Ich weiss nicht wie füllen, ohne dass eine Fehlermeldung des vorgegebenen Skripts "must Numeric" erscheint.
Poste doch bitte erst mal das Script (OHNE ZUGANGSDATEN) und
die komplette Fehlermeldung.

Ebenfalls von Interesse:
welche PHP Version und welche ServerAPI (apache2handler oder fastCGI) werden eingesetzt? Diese Angaben findest Du mit dem Miniscript:
PHP-Code:

<?php
phpinfo
();
?>


vt1816 07.07.2014 23:00:57

AW: String zu Array Versand Problem
 
Du hast eine Schreibfehler in Deinem Script
Zitat:

$reveiver = $_POST['phone'];
...
$replace = str_replace($delimiter, $delimiter[0], $receiver);
$reveiver <> $receiver

Mit eingeschalteter Fehleranzeige wäre dies schon eher aufgefallen!

Und schau Dir nochmal Dein str_replace an (insbesondere '"<".*.">"'), denn wie in Deinem Beispiel bleibt "<Mitarbeiter1>" erhalten - wird nur im Browser nicht angezeigt, da als vermeintlichen Tag erkannt, und daher kommt dann der NUMERIC-Fehler.

doschni 09.07.2014 21:56:33

AW: String zu Array Versand Problem
 
Zitat:

Zitat von meikel
Poste doch bitte erst mal das Script (OHNE ZUGANGSDATEN) und
die komplette Fehlermeldung.

Ebenfalls von Interesse:
welche PHP Version und welche ServerAPI (apache2handler oder fastCGI) werden eingesetzt? Diese Angaben findest Du mit dem Miniscript:

Oke, hier das Original-Script, an das ich über ein Formular mehrere Empfänger übergeben möchte:
PHP-Code:

<?php
  
include "WebSmsCom_Toolkit.inc";
 
  
# Modify these values to your needs
  
$username             'your_username';
  
$pass                 'your_password';
  
$gateway_url          'https://api.websms.com';
 
  
$recipientAddressList = array("4367612345678");
  
$utf8_message_text    "Testnachricht";
 
  
$maxSmsPerMessage     1
  
$test                 false// true: do not send sms for real, just test interface
 
  
try {
 
    
// 1.) -- create sms client (once) ------
    
$smsClient = new WebSmsCom_Client($username$pass$gateway_url);
    
$smsClient->setVerbose(true);
 
    
// 2.) -- create text message ----------------
    
$message  = new WebSmsCom_TextMessage($recipientAddressList$utf8_message_text);
 
    
// 3.) -- send message ------------------
    
$Response $smsClient->send($message$maxSmsPerMessage$test);
 
    
// show success
    
print_r(array(
           
"Status       : ".$Response->getStatusCode(),
           
"StatusMessage: ".$Response->getStatusMessage(),
           
"TransferId   : ".$Response->getTransferId(),
    ));
 
  
// catch everything that's not a successfully sent message
  
} catch (WebSmsCom_AuthorizationFailedException $e) {
    exit(
"AuthorizationFailedException caught: ".$e->getMessage()."\n");
 
  } catch (
WebSmsCom_ApiException $e) {
    echo 
$e// possibility to handle API status codes $e->getCode()
    
exit("ApiException Exception\n");
 
  } catch (
WebSmsCom_HttpConnectionException $e) {
    exit(
"HttpConnectionException caught: ".$e->getMessage()."HTTP Status: ".$e->getCode()."\n");
 
  } catch (
WebSmsCom_UnknownResponseException $e) {
    exit(
"UnknownResponseException caught: ".$e->getMessage()."\n");
 
  } catch (
Exception $e) {
    exit(
"Exception caught: ".$e->getMessage()."\n");
  }
?>

Und hier die vorher eingebettete Datei WebSmsCom_Toolkit.inc als Zip (da Meldung kam, es sei zu lang zum Posten).
In Zeile 615 geht's um die Fehlermeldung must be numeric.
Auch die komplette phpinfo hab ich gleich dortrein kopiert.

Kurz: PHP 5.2.17 ist auf Linux x86_64bit, mit der Server API: Apache 2.0 Handler


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:51:17 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.