Ausgewählte Nachrichten löschen?

jackie05

Erfahrenes Mitglied
Hallo,
ich habe auf meiner Seite einen Nachrichtensystem und möchte die ausgewählten Nachrichten löschen.

Ich habe dazu CheckBoxen genommen und weiss leider nicht wie ich alle CheckBoxen abfragen kann, die aktiviert wurden.

Hier ist mal die while schleife indem die Nachrichten alle abgefragt werden:
PHP:
<?php
  while($row = mysql_fetch_object($result))
  {
    if ($row->gelesen == 0)
    {
      $bb = "<b>";
      $bb2 = "</b>";
    } else {
      $bb = "";
      $bb2 = "";
    }
    $datum = date("d.m.y", $row->datum);
    $uhrzeit = date("H:i", $row->datum);
?>
  <tr bgcolor="'.$linecolor.'">
   <td align="center"><input type="checkbox" name="auswahl" value="<?php echo $row->id; ?>"></td>
   <td align="center">
   <p align="left"><a href="index.php?content=site/show_nachricht&msg=<?php echo $row->id; ?>"><?php echo $bb.$row->betreff.$bb2; ?></a></td>
   <td align="center"><a href="#"><?php echo $bb.$row->von_user.$bb2; ?></a></td>
   <td align="center"><?php echo $datum." - ".$uhrzeit; ?></td>
  </tr>
<?php
  }
?>

Und hier möchte ich die CheckBoxen alle abfragen und dann löschen:
PHP:
<?php
  if ($_GET['delete'] == "true")
  {
    //mysql_query("DELETE FROM nachrichten WHERE id='".$id."'");
  }
}
?>

in der while schleife habe ich jede CheckBox eine id gegeben also value="$row->id" und jetzt möchte ich alle abfragen, die aktiviert sind und die aktivierten dann löschen.

Ich bedanke mich schonmal im Voraus.

MfG
 
Google hätte geholfen: "checkboxen php" liefert http://aktuell.de.selfhtml.org/artikel/php/checkboxen/index.htm

Gib den Checkboxen einen Namen wie "NewsToDelete[]" und als Value die entsprechende NewsID in der Datenbank. Nach dem Absenden des Formulars befinden sich alle (Value-)Werte der ausgewählten Checkboxen im Array $_GET['NewsToDelete'] bzw $_POST['NewsToDelete'].

Diesen Array kannst du dann einfach verwenden um den SQL Query zu erzeugen:
PHP:
$NewsToDelete = $_POST['NewsToDelete'];
// SQL Injection Schutz (Werte in Integer Umwandeln)
for($i = 0; $i < $NewsToDelete; $i++)
{
    setType('integer', $NewsToDelete[$i];
}

// Ohne Werte ergäbe dies einen Ungültigen Query
if(count($NewsToDelete) > 0)
{
    // DELETE FROM nachrichten WHERE id IN (1,2,3,4,5)
    $Query = 'DELETE FROM nachrichten WHERE id IN ( '. implode(', ', $NewsToDelete) .')';
}

Ich hoffe ich konnte dir noch helfen.
 
Danke dir.

Ich weiss, ich hab ja jede CheckBox die ID von den Nachrichten zugewiesen in der Schleife.

Ich hab das mal probiert, aber wenn ich dann auf nachrichten gehe, wird die hälfte dann nicht mehr angezeigt, wenn dieser Code bei mir drin ist.

Obwohl es noch nicht ausgeführt wird, fehlt die hälfte seite, so als wenn es abgebrochen wurde.

Woran kann es liegen?
 
Das könnte an vielen Dingen liegen. Überprüfe über diverse Ausgaben im Code welche Teile alle ausgeführt werden. ("Vor Löschen", "Anzahl Elemente", "Nach Löschen", "Laden der Einträge" etc.) Offenbar ist die Bedingung WANN die Einträge wirklich gelöscht werden falsch gesetzt. Du hast zwar in deinem Post diesen Teil drinnen >$_GET['delete'] == "true"< jedoch würde ich mir mal die URL ansehen ob du evtl diese Variable in der URL gesetzt hast. Derartige Datenmengen würde ich sowieso per POST an den Server senden und nicht über GET.
Ebenfalls würde ich das wirkliche ausführen des Löschen-Queries eine Ausgabe des SQL-Codes einfügen sodass du nur die Ausgabe hast, und nicht die Einträge wirklich gelöscht werden.

Debugging ist ein Fall für sich und je nach Aufbau des Codes müssen diverse Dinge beachtet werden.
 
Zurück