Andreas: /MySQL - Datensatz aktualisieren wo Checkbox gesetzt

Hallo!

Hab mal eine Frage. Und zwar schreibe ich per PHP die Datensätze aus einer MySQL Tabelle in eine html-Tabelle. In jeder Zeile steht eine Checkbox, mit der MySQL ID als Wert. Jetzt überlege ich, wie ich es anstellen kann, dass wenn ich das Formular(Tabelle steht in einem Formular) abschicke, überall wo die Checkbox angeklickt ist, diejenigen Datensätze aktualisiert werden,und zwar soll hier überall das aktuelle Datum in ein Feld geschrieben werden.

Also per Update ist das ja kein Problem, auch  mit dem Datum nicht.
Probleme bereitet mir nur wie ich eine Schleife gestalte,  oder wie ich die Datensätze filtere, wo die Checkbox gesetzt ist.

Sagen wir mal ich habe fogende Tabelle

ID|Vorname|Nachname|checkbox
--+-------+--------+--------
1 |Heinz  |Müller  |TRUE
2 |Peter  |Schmidt |FALSE
3 |Inge   |Schröder|TRUE

Das alles wird in einem Formular an ein php-Script geschickt. Dann habe ich da ja Variable1 mit dem Wert der 1. ID als "1", und Variable3 mit dem Wert der 3. ID also "3".

Wie bekomme ich das jetzt in eine Schleife, so dass ich jedesmal folgenden SQL-Befehl ausführen kann

$update = "UPDATE Kunden SET Datum = '$datum' WHERE ID = '???'";
....

???

Leider habe ich sowas noch nie gemacht und bin mit meinem Latein am Ende!
Ich hoffe Ihr habt eine Idee, wie sowas geht!

Grüsse

Andreas

  1. Wie bekomme ich das jetzt in eine Schleife, so dass ich jedesmal folgenden SQL-Befehl ausführen kann

    Hi,

    geht eigentlich recht einfach. Du übergibst die Checkbox-Id-Daten per Array an die folgende Datei:

    <input type="Checkbox" name="eintrags_id[]" value="23">
    <input type="Checkbox" name="eintrags_id[]" value="24">
    <input type="Checkbox" name="eintrags_id[]" value="27">
    usw.

    Alle Werte der angeklickten Checkboxes sind dann in dem Array $eintrags_id enthelten.

    Und in dem Script, dass die DB aktualisieren soll, kannst du dieses Array mit einer Schleife durchlaufen:

    reset ($eintrags_id); // Pointer auf Anfang

    while (list ($key, $val) = each ($eintrags_id))
    {
        $update = "UPDATE Kunden SET Datum = '$datum' WHERE ID = '".$val."'";
    }

    So müsste es funktionieren - rein konzeptionell zumindest.

    Gruß NN

  2. Die Frage verwirrt mich!

    Folgende Zeile in dem HTML-Formular wurde irgendwann von einem PHPSkript geschrieben:

    <input type="checkbox" name="cb1" value="bla"> ... mehr Inhalt ....
    <input type="checkbox" name="cb2" value="blu"> ... mehr Inhalt ....
    <input type="checkbox" name="cb3" value="blo" checked> ....

    Das Formular Tag sagt: <form action="myPHP.php" method="post"> ...

    Nun bearbeitet ein User dieses Formular. Danach klickt er auf Submit (oder wie immer Du den Button nennst). Der PHP Interpreter sieht sich nun das Formular an (*bissi platt formuliert*). Wenn die Checkbox cb2 bspw. einen Haken hat, dann legt erzeugt er eine Variable names cb2 mit dem Wert "blu". Wenn die Checkbox nicht geklickt war, dann gibt es auch keine Variable.

    Wenn Du also mit einer Schleife nun die namen von cb1 bis cbX absuchts, dann bekommt Du alle geklickten!

    BSP:

    for ($i = 1; $i < anzahl; $i++) // anzahl muß halt ermittelt werden
    {
      $temp = "$cb$i";
      if ($$temp)
      {
        // Box wurde geklickt & $$temp ist Value; für cb1 = "bla"
      }
    }

    Bei mir klappt es so, aber ich gebe natürlich keine Garantie: ist auch nur ein Codeausschnitt.

    GVT

  3. Hallo Andreas,

    Wie bekomme ich das jetzt in eine Schleife, so dass ich jedesmal folgenden SQL-Befehl ausführen kann

    $update = "UPDATE Kunden SET Datum = '$datum' WHERE ID = '???'";

    Nehmen wir an, das HTML-Formular stammt aus dieser Abfrage, wobei dort speziell das Feld ID interessiert:

    $abfrage="SELECT * FROM xyz";
    $ergebnis=mysql_query($abfrage,$dbref);

    <form action="abc.php" method="post">
    ...
    while($zeile=mysql_fetch_array($ergebnis))
    {
     print "<input type="checkbox" name="$zeile[ID]">\n";
    }
    ...
    </form>

    Im Script abc.php wird nun darauf reagiert, indem nachgesehen wird, ob Paare von IDs und aktivierten Checkboxen existieren:

    <?php
    //...
    while(list($ID,$CHECK)=each($HTTP_POST_VARS))
    {
      if($CHECK)
      {
        $abfrage="UPDATE Kunden SET Datum=now() WHERE ID='$ID'";
        print "$abfrage<br>\n";
        // weiter mit mysql_query($abfrage,$dbref);
      }
    }
    //...
    ?>

    MfG, Thomas

    1. Hi Thomas!

      while($zeile=mysql_fetch_array($ergebnis))
      {
      print "<input type="checkbox" name="$zeile[ID]">\n";
      }

      Also hat die Variable der Checkbox dann die ID als Namen.

      while(list($ID,$CHECK)=each($HTTP_POST_VARS))
      {
        if($CHECK)
        {
          $abfrage="UPDATE Kunden SET Datum=now() WHERE ID='$ID'";
          print "$abfrage<br>\n";
          // weiter mit mysql_query($abfrage,$dbref);
        }
      }

      Woher hast Du dann die Variable $CHECK? Die Variable z.B. von ID 3 müßte dann doch den Namen $3 haben, oder? Wie ich (der irgendwie immer Probleme mit Arrays hat) das verstehe, schlüsselst Du ja den übertragenen Array auf in $ID für den Namen und $CHECK für den Wert. Wenn die Checkbox angeklickt ist müßte dann in $CHECK ja was stehen(was? TRUE/checked...?) und Du filterst ja danach, wo irgendwas in $CHECK steht. Ist das soweit richtig verstanden (ich glaub beim schreiben hab ichs einigermaßen kapiert:-)?

      Wenn ich jetzt mehrere Checkboxen pro Datensatz einfüge, frage ich dann vorher noch

      if ($ID == "Checkbox1")....

      O´der wie machen ich das dann am besten?

      Jedenfalls schonmal vielen Dank!

      Grüsse

      Andreas