Checkbox Deletes

Subwoover

Erfahrenes Mitglied
Tja schon überall sieht man die Möglichkeit seien PMs oder threads (in nem admin bereich) oder andere aufgelistete dinge mittels checkbox anzuhacken und dann mit einem submit button zu löschen...

nur wie sieht das ganze hinter den kulissen aus? Ich kann mir php-technisch grad nix ausmalen wie das funktionieren könnte...
mit einer schleife auf jeden fall, aber wenn ich eintrag 31,756 und 48923 lösche hats wenig sinn die schleife von 0 auf 48932 laufen zu lassen...

hmpf :(

pls tipps :p
 
Hallo,
hinter jeder Checkbox steht im value-Parameter die ID des zu löschenden Datensatzes. Der Name der Checkbox ist so gewählt, dass bei der Übergabe an ein PHP-Script ein Array erzeugt wird (Bsp.: name="del[]" wird zum Array $del[]). Der vorteil bei Checkboxes ist, dass nur die IDs in das Array geschrieben werden, die auch angehackt sind. Somit muss man nur das Array durchlaufen und hat sogleich nur die IDs darin stehen, die auch tatsächlich gelöscht werden sollen.

Zu Deinem Bespiel:
hats wenig sinn die schleife von 0 auf 48932 laufen zu lassen...
--> Wer sieht denn schon 48932 Datensätze durch, die zudem noch auf einer Seite sind???


snuu
 
Was verstehst du unter "Schleifen"?

Also solche Dinge mit einer checkbox zu löschen, wenn in Verbindung mit einem DBMS wie MySQL, ist gar kein großer Aufwand.

Wenn du z.B. eine Nachricht per checkbox löschen willst, wird ein Wert mitgegeben, meist die datenbankinterne Nachrichten-Identifikation. Und bei aktivierter checkbox wird der Wert zusammen mit einer speziellen Abfrage, im Beispiel MySQL, abgeschickt:
[color="2c2c8c"]
  DELETE FROM Nachrichten WHERE NachrichtenID='xxx'
[/color]
 
@Gumbo : thx die syntax eines löschvorgangs mittels einer checkbox ist mir auch klar, die frage war nur wenn du von sagen wir mal 12 checkboxes 3 anhackelst wie ich dann genau die 3 lösche...

danke dir snuu... nur ich bin in dingen arrays nicht so gern und könnend unterwegs...
könntest du mir da mal ein simples beispiel anführen wie ich das array "durchlaufe" und wie ich aus name="arr['3']" (3 ist die id des eintrags nehm ich mal an?) dann ein array generiere?

grüsse
 
Code:
<form action="verarbeite.php" method="post">
<input type="checkbox" name="del[]" value="0001"> Salami<br>
<input type="checkbox" name="del[]" value="0002"> Pilze<br>
<input type="checkbox" name="del[]" value="0003"> Sardellen
</form>

Wenn Du das obere Formular absendest, dann wird beim interpretieren des Scripts "verarbeite.php" das Array $del verfügbar gemacht.
Das kannst Du mittels $_POST['del'] oder $HTTP_POST_VARS['del'] (bei älteren PHP-Versionen) abrufen. In dem Array sind nur die IDs enthalten, die auch wirklich angekreuzt sind.

Hier das Durchlaufen des Arrays:

PHP:
for ($i = 0; $i < count($del); $i++) {
  echo $del[$i];
}

Wurde die erste und die letzte Checkbox angekreuzt, dann würde 0001 und 0003 ausgegeben werden.

Zum Löschen von Datensätzen aus einer Datenbank würdest Du anhand der übergebenen IDs die SQL-Anweisung zusammenbauen (delete from tabelle where id in() ...)

-------------------

@gumbo: Wer programmiert, sollte schon wissen, was Schleifen sind!


snuu
 
Zuletzt bearbeitet:
yeah megathx :p

jaja in sql hab ich 0 problems, aber mit den arrays gehts bei mir nie gut :)
Danke dir jedenfalls...
ich habe register_globals on dh: ich rufe das array direkt mit $del auf oder?
 
Das funktioniert. Doch ich rate immer dazu davon auszugehen, dass register_globals auf off steht. Zum einen, weil das die Sicherheit etwas erhöht und anderereits werden neuere PHP-Versionen standardmäßig mit register_globals = off veröffentlicht.

P.S.: Mit array solltest Du Dich jedoch intensiv beschäftigen. Über kurz oder lang wirst Du nicht drum herum kommen.

mfg, snuu
 
hmmm

der einzige unterschied der für mich beim programmieren wichtig wird ist dass ich die variablen eines forms über $_POST['del'] anspreche?
oder wie wo was?*g*
ich hab bei register_globals = off noch nichts entwickelt :)

@ arrays hmmm... ja hab vor 2 jahren als ich mit php anfing mal was mit arrays gemacht, seitdem nicht mehr gebraucht/verwendet
 
Vielleicht hilft dir auch das weiter:
PHP:
# seite.php:

<?php
if (isset($_POST["step"])) {
unset ($_POST["step"]);

foreach ($_POST as $par => $tmp) {
    echo $par."<br>";

    $$par = "checked";
}

}

?>

<form action="seite.php" method="post">
<input type="hidden" name="step" value="2">
<input type="checkbox" name="entry1" <?php echo @$entry1 ?>> Entry 1 <br>
<input type="checkbox" name="entry2" <?php echo @$entry2 ?>> Entry 2 <br>
<input type="checkbox" name="entry3" <?php echo @$entry3 ?>> Entry 3 <br>
<input type="checkbox" name="entry4" <?php echo @$entry4 ?>> Entty 4 <br>

<br><br>

<input type="submit" value=" Weiter ">
</form>


//Edit:

Oder das hier:
PHP:
<?php
$runit = 0;

$anz = 10;
if (isset($_POST["step"])) {
  $runit = 1;

  $anz = $_POST["anz"];
  unset ($_POST["step"], $_POST["anz"]);

  foreach ($_POST as $par => $tmp) {
      echo $par."<br>";

      $$par = "checked";
  }


}

?>

<form action="seite.php" method="post">
<input type="hidden" name="step" value="2">

<script type="text/javascript">

var checkb = new Array();

<?php
if ($runit == 1) {
  ?>
  var post = 1;

  <?php
  foreach ($_POST as $tmp => $par) {
    echo "checkb[".substr($tmp, 5)."] = \"checked\";\n";
  }
}
?>

for (i=1; i<=<?php echo $anz ?>; i++) {
  window.document.write("<input type=\"checkbox\" name=\"entry"+i+"\"");
    if (checkb[i] == "checked") window.document.write(" checked");
  window.document.write("> Entry "+i+"<br>");
}

</script>

<br><br>
Anzahl der Checkboxen:
 <input type="input" name="anz" size="15" value="<?php echo $anz ?>">
<br><br>

<input type="submit" value=" Weiter ">
</form>
 
Zuletzt bearbeitet von einem Moderator:
Zurück