martin: Dynamische Namen für Checkbox

Hallo,

auf der Seite X wird eine Dynamische Liste mit autos ausgegeben. Der User sollte nun sich die Autos via Checkbox markieren können, um sie sich z.B. in den Warenkorb zu speichern.

mein problem ist nun, dass ich den Checkboxen keinen eindeutigen Namen geben kann, da die Anzahl autos (und dementsprechende zu jedem auto ein checkbox) und die checkbox ja dynamisch sind. wie kann ich dennoch gewährleisten, dass der User mehrere Autos aussuchen kann, und wenn er auf den Button speichern drückt, dass dieses dann korrekt identifiziert sind?

gruss martin

  1. hi,

    mein problem ist nun, dass ich den Checkboxen keinen eindeutigen Namen geben kann, da die Anzahl autos (und dementsprechende zu jedem auto ein checkbox) und die checkbox ja dynamisch sind.

    und in wie fern hindert dich dies daran, ihnen einen eindeutigen namen zu geben?
    zum beispiel ein von dir gewählter/s name/prefix plus eine laufende nummer wäre doch ohne weiteres denkbar.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Danke, dies ist korrekt, den namen kann ich ja dynamisch generieren. mein problem ist aber das mitnehmen auf das script, in welchem es anschliessend in die MySQL-DB speichern sollte. das problem ist ja, dass die namen dynamisch sind, sprich ich muss anschliessend zum speichern wieder dynamische variablen erstellen...dort komme ich nicht mehr weiter.
      ich habe gedacht, die checkbox benenne ich so:

      checkbox_$k (wobei $k raufgezählt wird)

      Anschliessend ist in den variablen
      checkbox_1
      checkbox_2
      checkbox_3
      ...
      die werte gespeichert. wie komme ich nun an diese wieder ran in dem "speicher-file"? ich kann ja nicht sagen $checkbox_$k....

      wie kann ich also die variable dynamisch erzeugen?

      vielen dank für die antworten...ein anfänger wird euch danken :-)

      martin

      1. hi,

        das problem ist ja, dass die namen dynamisch sind, sprich ich muss anschliessend zum speichern wieder dynamische variablen erstellen...dort komme ich nicht mehr weiter.

        ich habe gedacht, die checkbox benenne ich so:
        checkbox_$k (wobei $k raufgezählt wird)

        kann man machen ...

        wie komme ich nun an diese wieder ran in dem "speicher-file"? ich kann ja nicht sagen $checkbox_$k....

        doch, könnte man machen, stichwort variable variablen.

        willst du aber gar nicht, weil du formularwerte ja sicherlich nicht einfach so (unter verlass auf register_globals=on) abholst, sondern $_GET/$_POST benutzt, wie es sich gehört.
        und da wäre es ja ein leichtest, sich den benötigten index-namen dynamisch zusammenzustellen, $_POST['checkbox_'.$k]
        allerdings musst du hierbei auch noch prüfen, ob ein wert mit diesem index vorhanden ist - nicht angekreuzte checkboxen werden schließlich nicht mit übertragen.

        eine leicht andere möglichkeit wäre die benennung als "array":
        name="checkbox[0]", name="checkbox[1]", etc.

        damit bekämst du die werte auch in PHP in einem array angeliefert, $_POST['checkbox'] - $_POST['checkbox'][0], $_POST['checkbox'][1], etc.
        auch hier ist natürlich auf "fehlende" nummern in den indices zu prüfen.
        aber so ein array durchläuft sich bspw. auch sehr leicht in einer foreach-schleife ...

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Servus,
          um das zu verdeutlichen mal ein Beispiel(weil ich das grad offen hatte):

          Die Checkboxen werden so erzeugt:

          while ($row = mysql_fetch_array ($result)) {
            echo "         <tr>\n\n";
            echo "             <td>". $row["id"] ."</td>\n";
            echo "             <td>". $row["name"] ."</td>\n";
            echo "             <td><a href="javascript:alert('". $row["nachricht"] ."')">Text!</a></td>\n";
            echo "             <td>". $row["mail"] ."</td>\n";
            echo "             <td>". $row["url"] ."</td>\n";
            echo "             <td><input type="checkbox" name="loeschen[]" value="". $row["id"] .""></td>\n\n";
            echo "         </tr>\n\n";
          }

          Die Checkboxen werden, wenn sie getagt sind, als Array verschickt. Die Werte des Arrays kann man dann mit z.Bsp. loeschen[$nummer].

          Hier ein Beispiel, dass die ausgewählten Items löscht:

          if (isset($loeschen[0])) {
            foreach ($loeschen as $l) {
              $result1 = mysql_db_query ($dbname, "DELETE FROM gästebuch WHERE id='$l'");
              if ($result1 == 1) {
                echo "- ID# gelöscht!<br>\n";
              } else {
                echo "- <font>ID#$id konnte nicht gelöscht werden<br>!</font>\n";
              }
            }
          }

          Hoffe das war praxisnah und hat dir geholfen

          MfG
          Thorsten

  2. Hallo Namensvetter!

    mein problem ist nun, dass ich den Checkboxen keinen eindeutigen Namen geben kann, da die Anzahl autos (und dementsprechende zu jedem auto ein checkbox) und die checkbox ja dynamisch sind.

    Wieso kannst du den Checkboxen keinen eindeutigen Namen geben? Auch ein "opel_astra_coupe_18" kann eindeutig sein.

    Gruß aus Iserlohn

    Martin

  3. Hallo,

    auf der Seite X wird eine Dynamische Liste mit autos ausgegeben. Der User sollte nun sich die Autos via Checkbox markieren können, um sie sich z.B. in den Warenkorb zu speichern.

    mein problem ist nun, dass ich den Checkboxen keinen eindeutigen Namen geben kann, da die Anzahl autos (und dementsprechende zu jedem auto ein checkbox) und die checkbox ja dynamisch sind. wie kann ich dennoch gewährleisten, dass der User mehrere Autos aussuchen kann, und wenn er auf den Button speichern drückt, dass dieses dann korrekt identifiziert sind?

    wie wäre es mit
    <input name="ID[DATENSATZID]" type="checkbox" value="1" />
    DATENSATZID ist die ID vom jeweiligen Datensatz

    das Array ID kannst du dann ja per foreach durchrennen, nicht ausgewählte Checkboxen tauchen unter ID nicht auf

    mfg
    Twilo