Datenbank löschen

Steusi

Nasenbär
Hallo, ich sehe meinen Fehler gerade nicht, vielleicht sieht ja einer von euch den "dummen" Fehler. Wäre sehr dankbar.


PHP:
error_reporting(E_ALL | E_STRICT);

// Array speichern
$kill = array();
$kill = $_POST['kill'];

// Anzahl der Arrayelemente ermitteln
$anz = count($kill);

// Alle selectieren Elemente löschen
for($i=0;$i++;$i<$anz) {
$delUser = "DELETE FROM benutzerdaten WHERE ID = ".$kill[$i]."";
$dodel = mysql_query($delUser) or die("Objekte konnten nicht gelöscht werden: ".mysql_error());
}

Ich bekomme keine Fehlermeldungen und die Daten werden nicht gelöscht...
Wenn ich am Ende etwas in die Schleife schreibe wird es ignoriert
 
Hast du geprüft, ob überhaupt Daten übergeben werden? Weitergehend solltest du die Werte unbedingt für die Datenbankabfrage auf Gültigkeit prüfen. Sonst können ja völlig beliebige Werte übergeben werden.
 
PHP:
$kill = array();
Die Zeile ist unnoetig, da $kill in der naechsten Zeile von $_POST['kill'] ueberschrieben wird.
Zudem solltest Du auch pruefen ob $_POST['kill'] uebergeben wurde, und auch eine Pruefung auf ein erwartetes Format waere gut.

PHP:
// Alle selectieren Elemente löschen
for($i=0;$i++;$i<$anz) {
$delUser = "DELETE FROM benutzerdaten WHERE ID = ".$kill[$i]."";
$dodel = mysql_query($delUser) or die("Objekte konnten nicht gelöscht werden: ".mysql_error());
}
Ich gehe jetzt einfach mal davon aus irgendwo eine Verbindung zur Datenbank aufgebaut wurde, denn zu sehen ist davon ja nichts.
Wo nun das Problem ist ist schwer zu sagen. Die Query sieht soweit okay aus, persoenlich finde ich es nur immer wieder verwunderlich warum Leute meinen ein ."" oder .'' anhaengen zu muessen wenn ein String mit einer Variable endet...

Gib auch mal $delUser, also Deine Query, aus. Und probier sie mal ausserhalb von PHP aus, z.B. ueber das MySQL-CommandLine-Tool oder z.B. den MySQL Query-Browser.
 
Gültig meinst etwa so?
PHP:
if ($_POST['kill']) {
	for($i=0;$i++;$i<$anz) {
	$delUser = "DELETE FROM benutzerdaten WHERE ID = $kill[$i]";
	$dodel = mysql_query($delUser) or die("Objekte konnten nicht gelöscht werden: ".mysql_error());
	if ($dodel) {$j++;}
	echo ($j);
	}
}

Werte werden übergeben, sprich ich erhalte die richtigen Angaben wenn ich folgendes ausgebe:
PHP:
echo($kill[0]);
echo($kill[1]);
echo($kill[2]);


Folgende Ausgaben:
PHP:
printf($_POST['kill']);
ergibt:
Array
PHP:
var_dump($_POST['kill']);
ergibt:
PHP:
array(3) { [0]=> string(1) "5" [1]=> string(1) "6" [2]=> string(1) "7" }

Aber var_dump($delUser); und auch var_dump($dodel);
ergibt:
NULL


Sehr komisch, wenn ich die FOR-Schleife weg nehme klappt es? Aber ich will ja mehrere Objekte gleichzeitig löschen, wo ist der Fehler?
Mit einer while-Schleife klappte es
PHP:
	while($anz > 0) {
	$delUser = "DELETE FROM benutzerdaten WHERE ID = ".$kill[$i];
	$dodel = mysql_query($delUser) or die("Objekte konnten nicht gelöscht werden: ".mysql_error());
	$anz--;
             $i++;
	}
 
Zuletzt bearbeitet:
Mit gültig meine ich, ob die Werte die von dir erwarteten Eigenschaften haben. Wenn du beispielsweise numerische ID-Werte erwartest, solltest du prüfen, ob die übergebenen Werte auch tatsächlich numerisch sind. Anderenfalls wirst du Probleme mit Angriffen wie SQL-Injektionen bekommen können, die eine Menge Schaden anrichten können.
 
In etwa so?
PHP:
if (isset($_POST['kill'])) {
	$i = 0;
	while($anz > 0) {
		if (is_numeric($kill[$i])) {
			$delUser = "DELETE FROM benutzerdaten WHERE ID = ".$kill[$i];
			$dodel = mysql_query($delUser) or die("Objekte konnten nicht gelöscht werden: ".mysql_error());
			$anz--;
			$i++;
		}
	}
}
 
Zurück