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!