Datensätze mit Checkbox löschen

goto;

Erfahrenes Mitglied
Hallo,
hab ein Problem beim Löschen von Datensätzen. Wie folgt bin ich vorgegangen.

Das ist mein Formular:
PS: Es steckt eigentlich eine PHP Code dahinter. Ich verkürz das mal und mach es einfacher.
HTML:
<!--
Hier verwende ich die Übergabe via POST und übergebe das Formular an die gleiche  Seite zurück -->
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" methode="post">
<input type="checkbox" name="del[]" value="<?=$row['ID'];?>"> <!--Datensatz 1 -->
<input type="checkbox" name="del[]" value="<?=$row['ID'];?>"> <!--Datensatz 2 -->
.....  <!-- Das geht noch um einiges weiter.. -->
 <input type="submit" name="submit" value="Löschen">
</form>

Nachdem das Formular abgesendet wurde wir er überprüft.
PHP:
.....
if($submit) {    // Hier wird die Bedingung gestellt das ein Submit Button gedrückt sein muss.
$y=count($del); // Jetzt Zähle ich erstmal die markierten Einträge
    for($x=0;$x<$y;$x++) { // Hier beginnt die for-Schleife
    mysql_query("DELETE FROM probid_adminnachricht WHERE ID='$del[$x]'"); // Und hier wird der Löschvorgang der markierten Datensätze durchgeführt.
    echo "Gelöscht: $del[$x]<br>"; // Noch ein Hinweis
    }
}
so, meines erachtens sollte es doch Funktionieren, oder? Sobald ich den Submit absende. Komme ich auf mein Formular zurück. Liegt es an der ersten Bedinung mit submit? Wenn ja, was kann ich alternativ nutzen? Danke im vorraus.
 
Mir sind ein paar Sachen aufgefallen.

1.) Im Form-Tag heißt dein Parameter "methode" anstatt "method".
2.) Mach ein Hidden-Field mit name "submit". Dem gibts Du dann den Value "1". Dann sollte das mit deinem if ($submit) funktionieren.
3.) Warum machst Du den Umweg über die for-Schleife? Für so etwas gibt es die foreach.

Bsp:

PHP:
foreach ($del as $row_id) {
mysql_query("DELETE FROM probid_adminnachricht WHERE ID='".$row_id."'");
}

Grüße,

maeg
 
Hallo,
@wod2008: ja hab ich.
@maeg : Danke dir, ich werde dies mal umsetzen. Ich hab es über die for-Schleife gemacht weil ich mich vorher noch nicht mit foreach beschäftigt habe, obwohl es ja doch einiges einfacher ist. Werd ich mir für die Zukunft merken ;) Danke euch beiden.
 
Sorry wenn ich das nochmal hier auf mache...

Du nutzt eine Schleife um dann verschiedene Datensätze zu löschen und dafür jeweils 1 neuen Mysql Query?

Wie sieht das denn aus wenn du quasi 100 Datensätze gleichzeitig löschen willst?

Würde mir eher 1 SQL Query zusammen bauen mit ner Schleife und dann 1 Query aufrufen. Sollte Datenbank Server freundlicher sein...


Wenn ich das hier falsch überflogen habe... bitte post ignorieren.
 
Klar, so kann man es auch machen..

Das wäre dann:

PHP:
$del_ids = implode(",", $del);
mysql_query("DELETE FROM probid_adminnachricht WHERE ID in (".$del_ids.")");
 
hi hi,
Danke euch für die weiteren Tipps, hab es jetzt noch etwas verfeinert. Unzwar habe ich das einfache if($submit) ausgetauscht und das sieht jetzt alles wie folgt aus.
PHP:
if( isset( $_POST["sub"] ) && $_POST["sub"] == "Löschen" )
{
$del = $_POST["del"];
$del_ids = implode(",", $del);
mysql_query("DELETE FROM probid_adminnachricht WHERE ID in (".$del_ids.")"); ;
}
Wünsch euch noch einen schönen Abend
 
Zurück