Tom: Fehlerquellen aufspüren in PHP-Scripten

Beitrag lesen

Hello,

[...]
$_data = "noch ein String";
$_data["wert"] = "neuer Wert";

echo "<pre>";
echo "$_data:\n";
var_dump($_data);
echo "</pre>";

<!-- Ausgabe
[...]
$_data:
string(15) "noch ein String"

-->

ich verstehe diesen Teil nicht so ganz. Hätte PHP hier nicht auch den String $_data durch das Array $_data ersetzen müssen? Schließlich definierst du es, nachdem du $_data einen String zuweist. Existiert zu diesem Zeitpunkt der Wert $_data["wert"] denn überhaupt? Wenn nicht, sehe ich eher hier die Merkwürdigkeit, nicht an dem Punkt, an dem du du den Boolean $_data durch ein Array $_data ersetzt (das hätte ich erwartet).

Das ist ja gerade die Krux. Einen Skalar in einem Array kann man definitionsgemäß nur mit einem Skalar überschreiben, nicht aber mit einem Array. Das zeigt auch der Versuch mit $_data["wert"] = ...

Da in diesem Fall bereits $_data ein String ist, kann man nicht implizit ein Array() auf $_data anlegen. Man muss erst den Knoten selbst in ein Array umwandeln durch $_data = array(); Dann wird er neu definiert.

Wenn nun $_data aber ein Bool ist, dann lässt PHP die implizite Deklaration zu.

Wenn man ein neues Array deklariert, dann kann der Pfad sogar sogar bis in tiefste Tiefen angelegt werden.

$_multidim["eins"]["zwei"]["drei"]["vier"] = "angekommen";

In jeden der Knoten können nun auch weitere Elemente eingehängt werden, Egal ob Skalare oder Arrays.

Da ganze hat Effekt beim Weiterreichen von Werten über Hidden-Fields. Dazu werden die Werte serialisiert und das Ergebnis dann umcodiert und im Value des Hidden-Fields weitergeben. Auf der nächsten Seite wieder decodiert, deserialisiert und verarbeitet.... wieder serialisiert, codiert und weitergegeben.

Die Werte gehen aber immer durch den Einflusßbereich des Users. Er kann da im Prinzip alles reinschreiben und auch selber codieren.

So muss man dann nach dem deserialisieren auf jeden fall danach fragen, ob dabei ein Array entstanden ist, denn unserialize() kann auch Integer, double, string, und object als Ergebnis haben.

Dass man die erhaltenen Werte dann selbstverständlich auch noch auf Plausibilität prüfen muss, ist sowieso klar.

Liebe Grüße aus http://www.braunschweig.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen