Markierte Nachrichten löschen

thehasso

Erfahrenes Mitglied
hallo,

ich versuche gerade im Nachrichteneingang bei mir bei Auswahl einer checkbox mehrere beliebige Nachrichten zu löschen. Jedoch weiß ich nicht so recht wie... hab das so gemacht, dass ich jeder checkbox einen value mit der entsprechenden nachrichten id gegeben habe.

Sprich wie kann man das machen, dass dann die gewählte nachrichten dann durch den klick makierte Nachrichten löschen, auch gelöscht werden.

Mir fällt leider die Lösung nicht ein.


Danke und lg thehasso
 
Du sammelst alle IDs, packst sie in einen String, von Kommas getrennt und lässt SQL den Rest machen.

SQL:
DELETE 
    FROM `table` 
    WHERE `id` IN ('1', '2', '4')
 
Dein Formular kommt in $_POST oder $_GET bei einem "Löschskript" an.
Dieses sollte das ganze Verarbeiten, entsprechendes Zusammenstellen (z.B. wenn die Nachrichten in SQL sind eine passende SQL-Anweisung erstellen) und diese einfach ausführen / die Nachrichten löschen.
Nach dem Löschen leitest du wieder zurück zur Auswahlseite.
 
Auswahl:
Code:
<input type="checkbox" name="msg_del[]" value="id"> Nachricht 1
<input type="checkbox" name="msg_del[]" value="id"> Nachricht 2
<input type="checkbox" name="msg_del[]" value="id"> Nachricht 3


Löschen:
PHP:
<?php 

foreach ($_POST["mgs_del"] as $todel){
  $this->del($todel); // L&ouml;schen, musst du noch ausformulieren
}

?>

// Edit: Und wieder zu lahm
 
Auswahl:
Code:
<input type="checkbox" name="msg_del[]" value="id"> Nachricht 1
<input type="checkbox" name="msg_del[]" value="id"> Nachricht 2
<input type="checkbox" name="msg_del[]" value="id"> Nachricht 3


Löschen:
PHP:
<?php 

foreach ($_POST["mgs_del"] as $todel){
  $this->del($todel); // L&ouml;schen, musst du noch ausformulieren
}

?>

// Edit: Und wieder zu lahm

Damit hättest du aber bei n Nachrichten auch n Queries, was performancetechnisch nicht gerade empfehlenswert wäre.
 
Das löschen könnte man ja auch nach deinem Vorschlag gestalten. Ich dachte nur, dass das Problem von thehasso darin liegt die markierten Nachrichten zu bekommen.
 
hallo leute,

danke für die kompetenten antworten, ich hab das nun so das jede checkbox eine nachrichten id hat.

PHP:
<form action="loesch_box.php" method="post" name="loeschen">

<input type="checkbox" name="msg_del[]" value="<? echo $nachricht_id ?>" />

</form>



Lösch Skript wird bei mir in der Website jedoch mit ein updateSkript ausgeführt, weil wenn User A die nachricht löscht, dann nicht bei User B auch gelöscht wird. Deswegen wollt ich das nun Updaten:

Leider fehlt mir einige kenntisse wie die übergebenen mehreren Nachrichten id's gelöscht werden können. Sicherlich mit dem Array.

Zurzeit mach ich das so...

PHP:
    <? // DIESER VORGANG, WIRD ALS ERSTES AUSGEFÜHRT
	
	require_once('dataBaseConnection.php');
	$diese_nachricht_update = $_GET["nachricht_id"]; // nachricht der ID die gelöscht wurde
	
	// beim ersten durchgang, wird nur ein der empfaenger auf NULL gesetzt beim zweiten löschen, wird überprüft ob
	// empfaengergeloescht den wert 0 hat, ist das der FALL, dann wird der sendergeloescht ebenfalls auf 0 gesetzt.
	$empfaenger_remove = 0;


//**********************************************
// Tabelle aktualisieren
//**********************************************

	$SQL = "UPDATE nachrichten SET " ;
	$SQL = $SQL . " empfaengergeloescht = '" . $empfaenger_remove . "'";
	$SQL = $SQL . " WHERE nachricht_id = " . $diese_nachricht_update;
	
	
	mysql_query($SQL);
echo mysql_error();  
	
	?>

Frage: Wie kann man nun die mit POST übergebenen (mehreren) id's direkt updaten.



lg thehasso
 
PHP:
" ... WHERE `id` IN (" . implode(",", $_POST["feld"]) . ")";

Vorausgesetzt es werden numerische Werte übergeben. Ansonsten müssen einfache Anführungszeichen nach Klammer-auf, -zu, und um das Komma.
 
hallo,

Fehlermeldung:
UPDATE nachrichten SET empfaengergeloescht = '0' WHERE `nachricht_id` IN ()
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

Ich hab schon ne menge versucht die Fehlermeldung weg zu bekommen aber bis jetzt null chance...

soo hab ich das nun übernomen:

PHP:
	$SQL = "UPDATE nachrichten SET " ;
	$SQL = $SQL . " empfaengergeloescht = '" . $empfaenger_remove . "'";
	$SQL = $SQL . " WHERE `nachricht_id` IN (" . implode(",", $_POST["msg_del"]) . ")"; 
	
	
	mysql_query($SQL) or die('<pre>'.htmlspecialchars($SQL."\n".mysql_error()).'</pre>');


danke für die hilfe, gruß
 
UPDATE nachrichten SET empfaengergeloescht = '0' WHERE `nachricht_id` IN ()
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

PHP:
	$SQL = "UPDATE nachrichten SET " ;
	$SQL = $SQL . " empfaengergeloescht = '" . $empfaenger_remove . "'";
	$SQL = $SQL . " WHERE `nachricht_id` IN (" . implode(",", $_POST["msg_del"]) . ")";

Wende hier das Zodsche Stare-and-Compare-Verfahren an.

Dann siehst du, dass $_POST["msg_del"] offensichtlich garkeinen Wert enthält.
Da liegt der Fehler. var_dump($_POST) hilft.
 
Zurück