dedlfix: Array aus $_POST auslesen

Beitrag lesen

Tach!

$kg = $_POST['kilo'][$key];
Selbst das ist Quatsch, da das Umkopieren von Werten hier völlig überflüssig ist und nur Speicher verbraucht.

Stimmt, hier hab ich nicht richtig aufgepasst. Speicher jedoch verbraucht bei solch einem Umkopieren zunächst nur die Variablenverwaltungsstruktur. PHP ist so intelligent, dass es bei unverändertem Wert intern nur eine Referenz auf den alten Wert anlegt wird. Erst wenn beide durch eine Änderung auseinanderlaufen, wird neuer Speicherplatz verbraucht.

Das kann man so und so sehen. Ohne das "Umkopieren" müsste man weiter unten eine relativ komplexe Anweisung zusammensetzen, die dann wieder die Gefahr weiterer (Programmier-)Fehler birgt. Skriptsprachen sollen menschen- und maschinenlesbar sein. Wöllte man superoptimal "bauen" müsste man alle Anwendungen mit dem Assembler dem Prozessor auf den Laib schneidern.

Das Argument ist so nicht ganz zu Ende gedacht. Der Wert darf in das SQL-Statement erst nach dem Beachten des Kontextwechsels eingefügt werden. Die Kontextwechselbeachtung hat gegenüber der Lesbarkeit eine deutlich höhere Priorität, weil sie funktional und sicherheitstechnisch unverzichtbar ist. Dazu kann man die Variable nicht direkt in den String einbauen, man braucht auch noch einen Funktionsaufruf (mysql(i)_real_escape_string()). Der String muss also an der Stelle für den Funktionsaufruf unterbrochen werden. Das Funktionsargument kann nun aber gleich als $_POST['kilo'][$key] übergeben werden. (Eine Alternative zur Stringunterbrechung wäre sprintf().)

Im Falle von Zahlen kann man den Kontextwechsel auch mit intval()/floatval() absichern. Allerdings würde ich auch hierbei keine neuen Variablen irgendwo vor dem Statement-Zusammenbau anlegen, sondern ebenfalls gleich den originalen Wert zusammen mit int/floatval()-Funktionsaufruf in die Stringerzeugung integrieren (bevorzugt mit sprintf()). Da hat man alles schön beisammen.

dedlfix.