Formular und Schleifen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Bananenweizen
Mitglied
Beiträge: 9
Registriert: 15.07.2006 10:58

Formular und Schleifen

Beitrag 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>";

} ?>
Benutzeravatar
witzigerkiller
Gesperrt
Beiträge: 878
Registriert: 05.02.2005 13:27
Wohnort: Sonthofen

Beitrag 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
Bitte keine Anfragen mehr per PN
When you get me on my nerven I put you in the Gully and do the Deckel drüf and you never will come back to the Tageslicht.
Bananenweizen
Mitglied
Beiträge: 9
Registriert: 15.07.2006 10:58

Beitrag von Bananenweizen »

Danke, werds auf jeden Fall mal gleich probieren. ;)
Bananenweizen
Mitglied
Beiträge: 9
Registriert: 15.07.2006 10:58

Beitrag von Bananenweizen »

Der übernimmt aus der POST immer nur die letzte ID die angegklickt wurde. Aber nicht alle. Wie mach ich das ?
BB-BF-BM
Mitglied
Beiträge: 2179
Registriert: 28.10.2005 16:38
Wohnort: Essen

Beitrag 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].'">';
Bananenweizen
Mitglied
Beiträge: 9
Registriert: 15.07.2006 10:58

Beitrag von Bananenweizen »

okay, aber wie lese ich jetzt die Daten aus ?
Bisher wars so:

Code: Alles auswählen

$loeschen = $_POST["loeschen"]; 
BB-BF-BM
Mitglied
Beiträge: 2179
Registriert: 28.10.2005 16:38
Wohnort: Essen

Beitrag 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...
Bananenweizen
Mitglied
Beiträge: 9
Registriert: 15.07.2006 10:58

Beitrag 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 ?
Bananenweizen
Mitglied
Beiträge: 9
Registriert: 15.07.2006 10:58

Beitrag von Bananenweizen »

...die Fehlermeldung kommt übrigens auch schon beim Laden ohne dass ich etwas "lösche"...
BB-BF-BM
Mitglied
Beiträge: 2179
Registriert: 28.10.2005 16:38
Wohnort: Essen

Beitrag 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:
Antworten

Zurück zu „Coding & Technik“