Checkbox Values in Array + Schleife zum DB löschen

Cryog3n

Mitglied
Hallo Leute,

hoffe mir kann jemand helfen. Die Suchfunktion hab ich schon verwendet und auch ähnliche Beiträge gefunden, die mich aber letztendlich nicht zum richtigen Ergebnis gebracht haben... leider!

Folgendes Problem. In einer Schleife bekomm ich X Anzahl an Datensätzen. Jeder Datensatz soll nun eine Checkbox erhalten, damit der User später beliebig viele Datensätze auswählen kann, um sie zu löschen!

PHP:
while ($row=mysql_fetch_assoc($ergebnis))
	 {
 
echo "<tr>
			 <td bgcolor='#FFEBCC' width='21'>
			 <Input type='checkbox' name='delbox[]' value='{$row[ID]}' style='background:#FFEBCC;border:none;'>
			 </td>	 
			 <td bgcolor='#EFEFEF' width='202'>{$row[Kategorie]}</td>
		 </tr>"; 
	 }

Das ganze ist in einem Form Tag... mit $_POST['delbox'] [0] z.B. krieg ich immer die richtige ID der Checkbox, scheitert aber sobald ich 2 anklicke. Anstatt 0 z.B. $i krieg ich komplett was anderes und ich weiß auch nicht wie ich in meiner Schleife die Checkbox auf checked überprüfen soll... was eigentlich doch auch nicht sein muss, wenn ich ja schon NUR die Werte im Array hab die auch "checked" sind.

Da ich nicht weiß wie ich den Value oder das Array richtig durchsuchen soll kann mir auch kein funktionierendes SQL Statement zusammen bauen...

Kann mir bitte jemand helfen wie ich in einer Schleife das Array mit den ausgewählten Checkboxen durchgehen kann um den aktuellen Wert bzw. die aktuelle ID hernehmen zu können um meinen Delete auszuführen?

Wäre super! Vielen Dank!

Gruß, Cryog3n
 

Sven Mintel

Mitglied
Lasse einen Zähler mitlaufen, mit welchem du die Checkboxen indizierst.
Da nur gecheckte Boxen übermittelt werden, gehen bei deiner Methode die Arrayschlüssel verloren... dadurch ist delbox[0] immer die erste angeklickte Box und nicht die erste im Formular:
Code:
$i=0;
while ($row=mysql_fetch_assoc($ergebnis))
     {

echo "..............
          ................name='delbox[$i]' 
           ...............";
           $i++;
     }
 

Cryog3n

Mitglied
Super! Jetzt hab ichs hinbekommen. Dankeschön ;-)

...checkbox name="delbox[$zahler]" value....

Hier dann die Schleife und der Delete

PHP:
for ($i = 1; $i <= $zaehler; $i += 1)
{
 
	 //echo $_POST[delbox] [$i]; <- gibt den Value jeder Checkbox aus (ID)
	 $sql="DELETE FROM nav_kategorie WHERE ID = ".$_POST[delbox] [$i];
	 mysql_query($sql);
} // Ende for Schleife
 
redirect("$php_self?Sub=nav_sub&Action=kategorien&Inhalt=inhalt&Robot=loeschen");

Gruß, Cryog3n

P.S Ich hab danach ne Funktion mit Redirect

PHP:
function redirect($url)
{ 
$redirect_time = 2000;
	echo " <script language='JavaScript'>
	function timeline()
	{
		document.location.href='" . $url . "'
	}
	setTimeout('timeline()', $redirect_time);
	 </script>";	 
	echo "<br><br>Falls die Weiterleitung nicht funktioniert <a href=\"" . $url . "\"><font color='#FF9900'>hier</font></a> klicken."; 
}

Jetz wird mir die Seite zwar nach 2 Sekunden wieder angezeigt, leider aber noch mit den "alten" Daten. Wenn ich den Link zur Tabelle direkt klicke hab ich dann die aktuellen Daten. Kann man das irgendwie bewerkstelligen dass gleich die aktuellen Daten erscheinen? Sollte ja so sein eigentlich *g*

Wenn das ein Extra Thread werden soll dann lösch ich das hier raus und poste neu?!
 

Sven Mintel

Mitglied
Hänge an die URL der aufzurufenden Seite einen Timestamp ran... so verhinderst du, dass sie aus dem Browsercache geladen wird:
Code:
function timeline()
    {
        window.location.href='". $url ."?". time()."';"
    }
Wenn du in der aktuellen Seite garnichts ausgeben willst, sondern sie nur für den Query brauchst, geht auch ein simples
PHP:
readfile('http://www.deinserver.de/'.$url);
(beachte, dass dieser Pfad mit http://.. beginnen muss, sonst wird die PHP-Source des Skriptes ausgegeben)
 

Cryog3n

Mitglied
Leider geht das erste Beispiel nicht. Scheint vielleicht was mit der Syntax zu sein? Bin schon am rumprobieren, klappt leider nicht. Das im ersten Beispiel muss aber nicht mit http:// anfangen oder? Hab sowas auch im Zusammenhang mit header gelesen. Das geht aber nur solang noch kein Zeichen, HTML etc. ausgegeben wurde.

Ich übergebe ja das $php_self?Sub=sub_nav....etc.

Hm, bin ratlos.

Gruß, Cryog3n

EDIT: Das Problem ist behoben, war mein Fehler Sorry. Der Redirect passt jetzt.

Vielen Dank nochmal!
 
Zuletzt bearbeitet:

Sven Mintel

Mitglied
Im ersten Beispiel war nen Fehler:-(...habs geändert.
Mit einem header() ginge es auch... wäre auf jeden fall der JS-Variante vorzuziehen.
Das mit dem Output sollte eigentlich kein Problem sein, wenn dieses Skript nichts ausgeben muss.

Beim ersten Beispiel muss die URL nicht mit http:// beginnen.
 

LN5

Mitglied
verstehe ich das richtig, dass du die $i's mit $zaehler ersetzt hast? Bei mir funktionierts nämlich nicht:

Die Checkbox
PHP:
<input type='checkbox' name='delbox[$zaehler]' value='$idempf'>

Der SQL-Query
PHP:
for ($i = 1; $i <= $zaehler; $i += 1)
{

		$delete= mysql_query("UPDATE messages SET anzeigenan = 'Nein' WHERE id = ".$_POST[delbox] [$i]."")or die(mysql_error().': '.$delete);
}