Seite 1 von 2

Formular und Schleifen

Verfasst: 17.07.2006 14:28
von Bananenweizen
Hi,

kurz zu dem was ich eigentlich machen will.
Das script ist ein Briefkasten. Sprich man sieht alle Nachrichten
die für einen bestimmt sind. Die Daten kommen aus einer DB und werden
durch eine while Schleife angezeigt. Das funktioniert auch ganz gut.
Nun will ich durch eine Checkbox ausgewählte Mails löschen lassen.
Und hier kommt mein Problem. Wie mache ich das ? Die Checkboxen
heißen ja vom Namen alle gleich, weil ich sie durch die while Schleife erzeuge. Die Werte sind jeweils die ID in der DB.
Und bei Formularübergabe übernimmt er dann ja nur den Wert der letzten Checkbox. Aber wenn man mehrere anklickt funzt das so nicht. Ok... -> Anfänger ;)
Hoffe ihr könnt mir helfen.

Script

Code: Alles auswählen

 while($daten=mysql_fetch_array($mail))
{
         echo "<form action=\"nachrichten.php\" method=\"post\" enctype=\"multipart/form-data\">";
	
echo "<tr><td>";
echo $daten[2];
echo "</td><td>";
echo $daten[3];
echo "</td><td>";
echo $daten[6]." ".$daten[7];
echo "</td><td>";
echo "<input type=\"Checkbox\" name=\"loeschen\" value=\"$daten[0]\">";
echo "</td></tr>";

}

echo "</table><br><br>";
echo "<input type=\"Submit\" value=\"Löschen\"> </form>";

} ?>

Verfasst: 17.07.2006 14:34
von witzigerkiller
also beim absenden des lösch buttons übrprüfst du das...

Also du holst dir die Id aus den checkboxen via post...

Code: Alles auswählen

$_POST['loeschen']
so hast du jetzt schonmal die id´s.. das ganze lässt du jetzt in einer schleife durchlaufen, die das dann löscht...

Code: Alles auswählen

delete ..... Where id = $_POST['loeschen'] 
hoffe du hast es verstanden... weiß nicht genau wie man das besser erklären könnte... hab mich ewig net mit datenbanken und mysql auseinandergesetzt, somit kann ich dir jetzt leider keinen genauen code schicken, aber ich glaube du bekommst das schon hin

Verfasst: 17.07.2006 15:10
von Bananenweizen
Danke, werds auf jeden Fall mal gleich probieren. ;)

Verfasst: 17.07.2006 15:17
von Bananenweizen
Der übernimmt aus der POST immer nur die letzte ID die angegklickt wurde. Aber nicht alle. Wie mach ich das ?

Verfasst: 17.07.2006 15:34
von BB-BF-BM
setz vor die while-Schleife ein

Code: Alles auswählen

$i = 0;
, ans Ende der while-Schleife ein

Code: Alles auswählen

$i++;
und für die Checkboxen

Code: Alles auswählen

echo '<input type="Checkbox" name="loeschen_'.$i.'" value="'.$daten[0].'">';

Verfasst: 17.07.2006 15:44
von Bananenweizen
okay, aber wie lese ich jetzt die Daten aus ?
Bisher wars so:

Code: Alles auswählen

$loeschen = $_POST["loeschen"]; 

Verfasst: 17.07.2006 16:22
von BB-BF-BM

Code: Alles auswählen

for( $i=0 ; isset($_POST['loeschen_'.$i]) ; $i++ )
{
    $loeschen[$i] = $_POST['loeschen_'.$i];
}
Nun hast du ein Array $loeschen, das die Nummer der Checkbox als Schlüssel hat...

Verfasst: 17.07.2006 18:41
von Bananenweizen
Als Info was in dem Array drin ist, hab ich folgendes als Ausgabe:

Code: Alles auswählen

foreach($loeschen as $anzeige)
echo $anzeige,"<br>";
Nun passiert was komisches. Insgesamt habe ich drei Einträge in der DB
die als Nachricht angezeigt werden. Wenn ich nun die erste Nachricht anklicke dann zeigt mir die Ausgabe 1 an. Das war soweit logisch ;) Bei Nachricht ein - drei kommt als Ausgabe 1 2 3. Soweit auch logisch und gewollt. Aber nun kommts. Wenn ich 1 nicht anwähle und dafür beliebige andere Kombinationen dann kommt

Code: Alles auswählen

Warning: Invalid argument supplied for foreach()
Woran liegt das ?

Verfasst: 17.07.2006 18:45
von Bananenweizen
...die Fehlermeldung kommt übrigens auch schon beim Laden ohne dass ich etwas "lösche"...

Verfasst: 17.07.2006 19:15
von BB-BF-BM
Probier mal:

Code: Alles auswählen

$loeschen = array();

foreach( $_POST as $key => $value )
{
    if( strpos('loeschen_', $key) === 0 )
    {
        $nr = substr($key, 9);

        $loeschen[$nr] = $value;
    }
}
Übrigens gibt es zum Darstellen eines Arrays die komfortablere Lösung print_r() oder sogar var_dump()

Der Fehler leigt darin, dass die Schleife den ersten Wert bekommen muss ($_POST['loeschen_0'] ), da sonst die for-Schleife direkt unterbrochen wird, da isset($_POST['loeschen_0']) FALSE ergibt, also die Schleife schon beendet wird, ohne dass sie überhaupt richtig angefangen hat.
Da wir $loeschen vorher noch nicht als Array definiert hatten, sondern erst beim ersten Schleifendurchlauf, der ja nicht stattgefunden hat, meckert foreach, dass die Variable nicht existiert, bzw kein Array ist...


Hoffe, das war verständlich genug und der neue Cde funktioniert :oops: