explode möchte nicht Arbeiten
Sicherheitsabstand
- php
Hallo
ich habe folgenden String
$ortplz = Münster,48145
$ortplz= explode(",", $ortplz);
$ort= $ortplz[0];
$plz= $ortplz[1];
fügt man nun ein echo herein
kommt bei $ort:
Münster
und bei $plz:
Ã
heraus. Eigentlich sollte es die Postleitzahl sein! Liegt es an den Sonderzeichen?
[latex]Mae govannen![/latex]
ich habe folgenden String
Wo? Das ist jedenfalls keiner:
$ortplz = Münster,48145
...jedenfalls fehlt da etwas entscheidendes, das einen String ausmacht.
heraus. Eigentlich sollte es die Postleitzahl sein! Liegt es an den Sonderzeichen?
Wenn ich die offensichtlichen PHP-Fehler behebe, trennt explode den String genau wie gewünscht auf.
Cü,
Kai
Hallo Kai,
ja das ; habe ich nicht eingetragen. Aber trotzdem läuft es nicht probiere es ruhig einmal selbst
Moin!
ja das ; habe ich nicht eingetragen. Aber trotzdem läuft es nicht probiere es ruhig einmal selbst
Es ging eher um die Anführungszeichen um den String drumherum, die da fehlen.
- Sven Rautenberg
Moin Moin,
hm du meinst sicher um den ersten String in dem ich Münster... vorgebe. Da hast du natürlich recht.
Im Script war es auch vorhanden, ich habe es beim Abschreiben (copy & paste war leider nicht möglich, da ein anderer Rechner) übersehen.
Nichtsdestotrotz will es nicht
$ortplz = "Münster,48145";
$ortplz= explode(",", $ortplz);
$ort= $ortplz[0];
$plz= $ortplz[1];
echo $ort;
echo $plz;
probier es bitte bei deiner lokalen installation, es ist kurrios..
Danke
Sicherheitsabstand
Moin!
»» ja das ; habe ich nicht eingetragen. Aber trotzdem läuft es nicht probiere es ruhig einmal selbst
Es ging eher um die Anführungszeichen um den String drumherum, die da fehlen.
- Sven Rautenberg
Hi Sicherheitsabstand!
probier es bitte bei deiner lokalen installation, es ist kurrios..
Done!
Ausgabe: Münster48145
Der Fehler liegt woanders. In erster Linie liegt er bei dir, weil du keine exakte Problembeschreibung lieferst bzw. dein bisherigen Debug-Maßnahmen unternommen hast.
Dieses Urteil ist vollkommen wertfrei und kein Vorwurf. Jeder muss sowas lernen.
Wenn du mehr Informationen und vielleicht sogar ein Online-Beispiel liefern kannst, dann kann man dir wahrscheinlich helfen.
MfG H☼psel
Hello,
probier es bitte bei deiner lokalen installation, es ist kurrios..
Done!
Ausgabe: Münster48145
Das deutet doch einwandfrei auf den von mir vermuteten Fehler hin:
https://forum.selfhtml.org/?t=186188&m=1236439
Du solltest also nochmal genau die Variablennamen im Original-Code anschauen (lassen) und sehen, ob es da nicht doch einen Schreibfehler gibt.
Das ist ein Problem bei PHP, das durch die implizite Deklaration der Variablen entsteht.
Wenn man dann solche Selbstzuweisungen vornimmt, merkt man nicht, wenn auf der linken Seite eine nicht vorhandene (ähnlich lautende) Variable benutzt wird. Es ist ja im PHP-Sinne kein Fehler.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi,
$ortplz = Münster,48145
Der Variablen $ortplz wird die Konstante Münster 1) zugewiesen - da diese (vermutlich) nicht definiert ist, weist PHP den Namen der Konstanten als String zu.
Anschließend (Komma-Operator, der niedrigere Priorität als Zuweisungs-Operator hat) wird der Ausdruck 48145 berechnet (dabei kommt 48145 raus) und das Ergebnis verworfen.
$ortplz= explode(",", $ortplz);
"Münster" enthält kein Komma, es gibt also keine Trennstelle. Da kein negatives Limit gesetzt ist (kein dritter Parameter), wird ein array mit einem String (nämlich "Münster") zurückgegeben.
$ort= $ortplz[0];
$ort wird der erste String aus dem Array zugewiesen - das ist "Münster".
Bis hierhin ist mir das Verhalten noch verständlich. Ab hier wird's schwammig. Ich versuche mal, das PHP-Verhalten zu erraten.
$plz= $ortplz[1];
Das array $ortplz enthält nur einen String, $ortplz[1] existiert demnach nicht als Array-Inhalt.
Ich vermute, daß PHP hier $ortplz zu einem String castet (was auf "Münster" herausläuft).
Der String könnte dann wiederum als array von Zeichen interpretiert werden, mit [1] wird auf das zweite Zeichen zugegriffen.
kommt bei $ort:
Münster
Das ist logisch, Erklärung siehe oben.
und bei $plz:
Ã
Dass wäre nach meiner Vermutung auch irgendwie logisch.
heraus. Eigentlich sollte es die Postleitzahl sein!
Nein, die Postleitzahl kann es nicht sein, Erklärung siehe oben.
Ich hätte eher den Wert null erwartet (garniert mit einer Laufzeit-Warnung a la "Array Index out of bounds")
cu,
Andreas
Hello,
da wird dann wohl auf der linken Seite vom Gleichheitszeichen an anderes $Ortplz stehen als es das $ortplz auf der rechten Seite ist, oder so ähnlich.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
echo $begrüßung;
» $ortplz = Münster,48145
Der Variablen $ortplz wird die Konstante Münster 1) zugewiesen - da diese (vermutlich) nicht definiert ist, weist PHP den Namen der Konstanten als String zu.
Anschließend (Komma-Operator, der niedrigere Priorität als Zuweisungs-Operator hat) wird der Ausdruck 48145 berechnet (dabei kommt 48145 raus) und das Ergebnis verworfen.
Schon falsch. Wenn die Anführungszeichen wirklich fehlen, dann darf das Komma an der Stelle nicht stehen. Das ergibt einen Syntax-Fehler, noch bevor die Steuerung an das Script übergeben wird. Das fehlende Semikolon wäre der nächste Syntax-Fehler.
Bis hierhin ist mir das Verhalten noch verständlich. Ab hier wird's schwammig. Ich versuche mal, das PHP-Verhalten zu erraten.
» $plz= $ortplz[1];
Das array $ortplz enthält nur einen String, $ortplz[1] existiert demnach nicht als Array-Inhalt.
Ich vermute, daß PHP hier $ortplz zu einem String castet (was auf "Münster" herausläuft).
PHP castet nicht einfach ohne Grund. Wenn $ortplz ein Array ist, und das Element 1 nicht vorhanden ist, ergibt das wie bei jedem Zugriff auf nicht vorhandene Variablen als Ergebnis NULL begleitet von einer Notice (in dem Fall: Undefined offset: 1).
Der String könnte dann wiederum als array von Zeichen interpretiert werden, mit [1] wird auf das zweite Zeichen zugegriffen.
Das ist eher eine Erklärung, aber nicht für den vom OP gezeigten Code. Das explode() müsste in dem Fall gar nicht ausgeführt worden sein und $ortplz ein String bleiben.
echo "$verabschiedung $name";
Guten Tag,
PHP castet nicht einfach ohne Grund. Wenn $ortplz ein Array ist, und das Element 1 nicht vorhanden ist, ergibt das wie bei jedem Zugriff auf nicht vorhandene Variablen als Ergebnis NULL begleitet von einer Notice (in dem Fall: Undefined offset: 1).
Beim Zugriff auf einen String in Array-Notation wird der String wie ein Array aus Zeichen behandelt:
<?php
$s = "abc";
echo $s[0], PHP_EOL, $s[2], PHP_EOL;
?>
Ergibt:
a
c
Gruß
Christoph Jeschke
echo $begrüßung;
» PHP castet nicht einfach ohne Grund. Wenn $ortplz ein Array ist, und das Element 1 nicht vorhanden ist, ergibt das wie bei jedem Zugriff auf nicht vorhandene Variablen als Ergebnis NULL begleitet von einer Notice (in dem Fall: Undefined offset: 1).
Beim Zugriff auf einen String in Array-Notation wird der String wie ein Array aus Zeichen behandelt:
Ja, dazu muss aber auch ein String vorliegen. Das tat es beim OP mit hoher Wahrscheinlichkeit auch, obwohl er und sein geposteter Code von einem Array ausging. Die von Mudgard vermutete Verhaltensweise PHPs war jedenfalls, so wie er sie formuliert hat, nicht richtig.
echo "$verabschiedung $name";
Guten Tag,
Ja, dazu muss aber auch ein String vorliegen. Das tat es beim OP mit hoher
Wahrscheinlichkeit auch, obwohl er und sein geposteter Code von einem Array
ausging.
Ich vermute eh, dass der OP nicht alle Angaben korrekt übernommen hat.
Die von Mudgard vermutete Verhaltensweise PHPs war jedenfalls, so wie
er sie formuliert hat, nicht richtig.
Zumindest was den ,-Operator angeht, hatte er unrecht. Ansonsten sind sie aber durchaus richtig.
Gruß
Christoph Jeschke
echo $begrüßung;
Eigentlich sollte es die Postleitzahl sein! Liegt es an den Sonderzeichen?
Wann immer Wunsch und Wirklichkeit nicht übereinstimmen, überprüfe das mit Kontrollausgaben. Auch das Spekulieren bringt einen nicht weiter, wenn man diese nicht - beispielsweise mit Kontrollausgaben - verifiziert.
Einfache Kontrollausgaben können mit echo oder print gemacht werden, allerdings wandelt PHP dabei manchmal Werte in ihre Stringdarstellung und man sieht nicht, was wirklich in der Variable steht oder als Ergebnis eines Ausdrucks entsteht. var_dump() erzeugt eine deutlich genauere Ausgabe.
Ebenfalls wichtig ist, beim Entwickeln das error_reporting auf E_ALL zu stellen. Damit bekommt man Fehlermeldungen für "weniger wichtige Fehler" (Notices) angezeigt. Das betrifft beispielsweise Zugriffe auf nicht vorhandene Variablen oder Strings, die als Konstante notiert sind.
echo "$verabschiedung $name";