• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Mehrere Datensätze per Checkbox löschen

Konda

Neues Mitglied
Hallo Community,

ich habe ein kleines Anliegen und zwar...
ich gebe mehrere Datensätze aus, welche alle mit einem...
PHP:
<input type="checkbox" name="delete[]" value="$row_u['id']">
...versehen sind.
Natürlich gebe ich das ganze in einer Schleife aus und $row_u['id'] ist dann die ID des jeweiligen Datensatzes...

Nun habe ich noch einen Button...
PHP:
<input type="submit" name="Loschen" value="L&ouml;schen"/>

Und wenn ich den drücke soll folgendes passieren...
PHP:
if(isset ($_POST['Loschen'])){

$delete = $_POST['delete'];


for($i=0;$i<sizeof($delete);$i++)
{
          $id = $delete[$i];
          mysql_query("DELETE FROM xy WHERE id=".$id);
}

}
Leider passiert aber nicht alt so viel...^^

Weiß wer wieso und kann mir sagen was ich da falsch mache?
Ich bedanke mich...

Grüße
Konda
 
Zuletzt bearbeitet:
Ähmm... so habe ich das aber schon öfters bei Formularen gemacht und bisher hat es immer geklappt o0
Oder übersehe ich da gerade einen ganz dämlichen Fehler?
 
Also ich denke es sollte auch klappen, falls du es trotzdem testen willst mach einfach in der if Bedingung eine Ausgabe und dann siehst du ja ob das Script in die Bedingung reingeht.
Meine Frage wär noch ob du das Formular auch in php zusammen baust, sprich

PHP:
echo "<input type="checkbox" name="delete[]" value="$row_u['id']">";
weil sonst enthalten die checkboxes keine ID's sondern nur den Wert "$row_u['id']" als String
 
Ich habe es gerade mal probiert und in die Schleife geht er rein...

Ja, mache ich...
das 'Original' schaut so aus:
PHP:
echo "<input type='checkbox' name='delete[]' value='".$row_u['id']."'>";


Aus dem print_r($_POST); entstand das:
Array ( [delete] => Array ( [0] => 15 [1] => 15 ) [Loschen] => Löschen )
Was bedeutet das genau?^^ Wie interpretiert man das?
 
Ich habe es gerade mal probiert und in die Schleife geht er rein...
Echt? Seit wann ist für PHP

value="L&ouml;schen"
if(isset ($_POST['Loschen']))

identisch? Oder hast du noch ein Feld, das Loschen heißt und wir hier nicht sehen?

Und nochwas, die Schleife brauchst du nicht:
PHP:
$query = "DELETE FROM xy WHERE id in (" .  implode(", ", $_POST['delete']) . ")";

mysql_query($query)
   or die ("MySQL-Error:" . mysql_error());
 
value zeigt doch nur den Inhalt des Buttons an.
Erkannt wird er durch name="Loschen"
oder etwa nicht?
 
Er prüft ja nicht den Wert ab sondern isset prüft nur ob ein Wert enthalten ist. Loschen ist sozusagen der Name des Buttons stell dir das als Array so vor
"Array ( [Loschen] => Löschen )"
Also es ist alles gut so.

die Ausgabe von $_POST ist sozusagen was du vom Formular an dein PHP Script sendest.

Konda, könntest du vielleicht noch mehr originalen Code posten, das wäre super.
 
AHHHHHHHHHHHHHHHHH, manchmal ist man sowas von blind!!!!!!!!!! :D Sorry!!!!

Habe gerade noch ein Quellcode in dem vorherigen Beitrag geschrieben, hier noch einmal:

Die Schleife brauchst du nicht:
PHP:
$query = "DELETE FROM xy WHERE id in (" .  implode(", ", $_POST['delete']) . ")";

mysql_query($query)
   or die ("MySQL-Error:" . mysql_error());
 
Funktioniert noch immer nicht :/ Ich hau mal eben alles rein und markiere die wichtigen Stellen...
Das ganze könnte etwas kryptisch sein... ich programmiere nicht immer ganz 'sauber'


<form action='Shoutbox.php' method='post' charset='UTF-8'>
<table width="580px" border="0">


<?php


if (isset($_SESSION['username'])){
$usergruppe="SELECT gruppe FROM user WHERE benutzername='".$_SESSION['username']."'";
$result_usergruppe = mysql_query($usergruppe);
$rowusergruppe= mysql_fetch_assoc($result_usergruppe);
}

for($i=0;$i<=$anzahl;$i++)
{
$row = mysql_fetch_assoc($ergebnis);

$abfrage_u = "SELECT id,benutzername FROM user WHERE id='".$row['autor']."'";
$ergebnis_u = mysql_query($abfrage_u);
$row_u = mysql_fetch_assoc($ergebnis_u);

if($row_u != ""){

?>

<tr>
<td class="row_<?PHP echo $i % 2; ?>"><?php echo "<b>".$row_u['benutzername'].":</b>"; if (isset($_SESSION['username'])){ if($rowusergruppe['gruppe'] == 3){ echo "<input type='checkbox' style='margin-left: 500px;' name='delete[]' value='".$row_u['id']."'>"; }} echo "<br /><i style='font-size: 10px;'>".$row['datum']." - ".$row['uhrzeit']."</i><br />".$row['beitrag']; ?></td>

</tr>

<?php

}
}

?>


</table>


<?php


if (isset($_SESSION['username'])){ if($rowusergruppe['gruppe'] == 3){ ?>
<input type="submit" name="Loschen" value="L&ouml;schen"/>
<?php
}}


if(isset ($_POST['Loschen'])){


$query = "DELETE FROM xy WHERE id in (" . implode(", ", $_POST['delete']) . ")";

mysql_query($query)
or die (
"MySQL-Error:" . mysql_error());


}


?>


</form>
 
Wenn das Script in diesen Block
PHP:
if(isset ($_POST['Loschen']))
{
   $query = "DELETE FROM xy WHERE id in (" . implode(", ", $_POST['delete']) . ")";

   mysql_query($query)
    or die ("MySQL-Error:" . mysql_error());
}
hineinkommt, kann es nur zwei Gründe geben, warum nichts gelöscht wird:
1. Du löscht in einer falschen Tabelle
2. Die ID's existieren nicht

Wenn es einen Fehler beim Löschen gibt, sollte das Script mit einer Fehlermeldung abbrechen.
 
Ein Fehler kam nicht heraus...

Zu dem Ersten:
Die Tabelle heißt Shoutbox und ich habe sie definitiv beim testen korrekt eingegeben an der Stelle xy

Zu dem Zweiten:
echo "<input type='checkbox' style='margin-left: 500px;' name='delete[]' value='".$row_u['id']."'>";
Beim drücken des Buttons werden doch die Daten welche unter value stehen übergeben, oder?
Diese Daten sind durch $row_u['id'] doch erst gerade eingegeben worden... von daher müssten auch diese richtig sein, oder? Und somit müssten die ID's auch existieren...
 
Ja, die Werte werden richtig übergeben wenn du diese Angehakt hast, das sieht man mit
print_r($_POST);

Die Werte die in delete drin stehen sind die ID's, wie in deiner Ausgabe vom anderen Post
PHP:
Aus dem print_r($_POST); entstand das:
 Array ( [delete] => Array ( [0] => 15 [1] => 15 ) [Loschen] => Löschen )

Die 15 ist sozusagen die ID, was ich gerade nur komisch finde warum die 15 doppelt enthalten ist denn eine ID sollte eigentlich einmalig sein.

Edit:
Mach mal nach
$query = "DELETE FROM xy WHERE id in (" . implode(", ", $_POST['delete']) . ")"; eine Ausgabe, sprich "echo $query;"

Denn wenn die ID nun doppelt drin ist dürfte es meines erachtens nicht funktionieren und dann müsste es doch eigentlich ein Fehler geben.
Weißt du das vielleicht genauer, bdt600
 
Also, wenn bei print_r($_POST); sowas rauskommt:
Array ( [delete] => Array ( [0] => 15 [1] => 15 ) [Loschen] => Löschen )
dann stimmt was nicht, denn 2x die 15 kann ja eigentlich nicht sein.

Es wäre schön, wenn du deinen kompletten Quellcode vernünftig formatieren würdest und dass die PHP-Tags bei posten benutzen würdest
 
Okay... Es funktioniert jetzt... ein sehr peinlicher Fehler und ich entschuldige mich das ich euch so viel Zeit gekostet habe^^
PHP:
echo "<input type='checkbox' name='delete[]' value='".$row_u['id']."'>";
ist falsch, richtig wäre:
PHP:
echo "<input type='checkbox' name='delete[]' value='".$row['id']."'>";

Ich habe da etwas vertauscht... :oops:
Danke trotzdem für die Hilfe!
 
Zurück
Oben