im pm system mehrere nachrichten gleichzeitig löschen

largo666

Mitglied
Hallo,

ich bin gerade dabei mir ein pm system zu basteln und bin auf ein problem gestoßen.

Ich frage alle nachrichten in einer schleife ab und habe dann auch die möglichkeit einzelne nachrichten per auswahlbutton zu löschen.

Was aber nicht funktioniert ist wenn ich mehr als nur eine nachricht gleichzeitig löschen will.

Liegt das an der übergabe der id

PHP:
 <input type="checkbox" name="select" id="select" value=" <?php echo $pm->id; ?> ">
                      <label for="select">

oder an der aktion in der DB?

PHP:
$pmid = $_POST['select'];

if(isset($_POST['select'])) {
	
	 $sql = "UPDATE messages 
	 		 SET `to_deleted` = '1' 
			 WHERE `id` = '".$pmid."'";
	 $sqlquery = mysql_query($sql);

Hab keine ahnung wie ich das umsetzen soll.
 
PHP:
$ids = array(); # Enthält die IDs der zu löschenden Nachrichten
$sql = 'UPDATE messages SET to_deleted = 1 WHERE id IN(' . implode(', ', $ids). ')';
 
PHP:
 <input type="checkbox" name="select" id="select" value=" <?php echo $pm->id; ?> ">

Das Problem ist, dass so beim Formular nur die zuletzt angekreuzte Checkbox übergeben wird. Willst du ein Array als POST senden mach das einfach so:

PHP:
 <input type="checkbox" name="select[]" id="select" value="<?php echo $pm->id; ?>">

Geändert habe ich die [] bei dem Namen, und die Leerzeichen im "value" entfernt.

Löschen kannst du die Einträge dann wie "einfach nur crack" schon schreib mit:

PHP:
$ids = $_POST['select']; # Enthält die IDs der zu löschenden Nachrichten
$sql = 'UPDATE messages SET to_deleted = 1 WHERE id IN(' . implode(', ', $ids). ')';

Gruß
paD
 
Hallo,

würde bei der Lösung vorsichtig sein. Es handelt sich um Userdaten und könnte für SQL-Injection missbraucht werden. Ausserdem überprüfst du auch nicht, ob die PM auch wirklich dem Benutzer gehört, der sie löschen will.

Das mit der SQL-Injection könntest zum Beispiel so lösen:
PHP:
foreach($id as $_POST['select']) {
  $ids[] = intval($id);
}
// $ids Enthält die IDs der zu löschenden Nachrichten

$sql = "UPDATE messages SET to_deleted = 1 WHERE 
id IN(" . implode(', ', $ids) .  ") AND
empfaenger = '" . $user . "'";

Gruß
BK
 
Das stimmt, um die Sicherheit habe ich mich nicht gekümmert. Aber wenn jemand ein Nachrichtensystem programmiert, sollte er sich schonmal mit dieser Problematik befasst haben. ;)
 
Ne funktioniert leider nicht.
Jetzt hab ich folgende Fehlermeldung:

Warning: Invalid argument supplied for foreach() in /*************.php on line 19

Warning: implode() [function.implode]: Invalid arguments passed in /*************.php on line 26
 
Bratkartoffel ist da ein kleiner Fehler unterlaufen.
PHP:
foreach($_POST['select'] as $id) {
  $ids[] = intval($id);
}

So rum gehörts :)
 
oja das passiert mir auch ständig....

danke euch allen jetzt fluppts einwandfrei...

wenn mir jetzt noch jemand sagen könnte wie ich einen button mache der alle nachrichten auswählt
bin ich glücklich.
 
Zurück