dedlfix: Problem mit auslesen von übergebenen Variablen

Beitrag lesen

Hi!

echo "<td><input type='checkbox' value='dell' name='box_".$row['0']."'></td>";

Es ist in den meisten Fällen ungünstig, variable Variablen zu verwenden, wenn man eine Auflistung von Werten haben möchte. "box_0", "box_1", ... "box_n" wären solche variablen Variablen. Gib dem name-Attribut den Wert "box[]" und leg in value dein Selektionskriterium ab (vermutlich ist das bei dir auch der Wert aus der ID-Spalte). Die leeren Klammern bei box[] sorgen unter PHP dafür, dass bei mehrfachen Auftreten eines solchen Namens, PHP ein Array anlegt. Das kannst du zum Beispiel mit

foreach ($_POST['box'] as $value)

durchlaufen. Oder du kannst es gleich implodieren lassen

$sql = sprintf('DELETE ... WHERE ID IN (%s)', implode(',', $_POST['box']));

Bedenke aber, dass das ungefilterte Einfügen in ein SQL-Statement eine SQL-Injection-Lücke darstellt. Die Werte im Array sollte vorher geprüft oder "zwangsentschärft" werden.

$_POST['box'] = array_map('intval', $_POST['box']);

Diese Zeile durchläuft $_POST['box'] und wendet auf alle Elemente die Funktion intval() an. intval() wandelt den übergebenen Wert in einen Integerwert um. "Nicht-Zahlen" wie einzuschmuggeln versuchte SQL-Code-Fragmente werden dabei zu 0. Eine ID 0 gibt es üblicherweise nicht, also wird für dieses Eintrag auch nichts gelöscht. Das Ergebnis von array_map() kannst du wie gezeigt wieder in $_POST['box'] ablegen, wenn du die Originaleingaben nicht benötigst, ansonsten kannst du eine eigene Variable nehmen oder den array_map()-Aufruf direkt im implode() notieren (möglichst nur, wenn dadurch nicht die Übersichtlichkeit leidet).

Du könntest aber auch mit anderen Testmöglichkeiten (wie is_numeric()) alle übergebenen Werte prüfen und bei Nichtgefallen den ganzen Vorgang abbrechen. Wer teilweise ungültige Werte sendet, der meint auch die gültigen Werte garantiert nicht ernst.

Lo!