Checkboxen im Formular verwalten und Werte beibehalten.

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Checkboxen im Formular verwalten und Werte beibehalten.

    Hallo alle miteinander.

    Ich habe ein Problem mit der Verwaltung von Checkboxen. Eigendlich treffen zwei Anforderungen aufeinander. Fuer jede einzelen finde ich ueberall Loesungen, fuer beide gemeinsam habe ich da weniger Glueck ;-).

    Problemstellung:
    Ich habe ein mehrseitiges Formular mit jeweils n Checkboxen. Alle Formularseiten sind auf einer HTML-Seite. Jedes Formular ist in ein Fieldset eingebunden und das jeweils aktive fieldset zeige ich mit Hilfe von Style Sheets an.
    Im ersten Versuch habe ich die Input-Felder wie folgt angelegt:

    <input type="checkbox" id="01" name="cbx01" value="1" <?php if (!empty($_POST['cbx01'])) echo 'checked="checked"';?>/>
    <input type="checkbox" id="02" name="cbx02" value="1" <?php if (!empty($_POST['cbx02'])) echo 'checked="checked"';?>/>
    <input type="checkbox" id="03" name="cbx03" value="1" <?php if (!empty($_POST['cbx03'])) echo 'checked="checked"';?>/>
    .
    .
    .
    <input type="checkbox" id="n" name="cbxn" value="1" <?php if (!empty($_POST['cbxn'])) echo 'checked="checked"';?>/>

    Dies hat wunderpaar geklappt, fuer das Beibehalten der Werte beim wechseln der Formularseiten.

    Allerdings wurde die Weiterverarbeitung durch die unterschiedliche Namensgebung unkonfotabel.

    Der zweite Versuch sah daher wie folgt aus:
    <input type="checkbox" id="01" name="cbx[]" value="1" />
    <input type="checkbox" id="02" name="cbx[]" value="2" />
    <input type="checkbox" id="03" name="cbx[]" value="3" />
    .
    .
    .
    <input type="checkbox" id="n" name="cbx[]" value="n" />

    Bei diesem Konstrukt ist die Weiterverarbeitung unproblematisch.
    Hier kann aufgrund des Feldes eine foreach-Schleife verwendet werden.

    Allerdings habe ich jetzt das Problem, dass ich kein elegante Loesung sehe, bereits eingegeben Daten in den Formularfeldern nicht zu verlieren.

    Kann mir vielleicht jemand mit einem Schubs in die richtige Richtung oder einem Vorschlag weiterhelfen?

    Danke im voraus.

  • #2
    Weiß nun nicht ob ich das richtig verstanden habe aber:

    PHP-Code:
    <?
    for($i=1;$i<=$anzahl_der_checkboxen;$i++)
    {
        if($cbx[$i]==1)
        {
            $checked="checked";
        }
        else 
        {
            $checked="";    
        }
        printf("<input type=\"checkbox\" name=\"cbx[%s]\" value=\"1\" %s>",$i,$checked);

    }

    ?>

    Kommentar


    • #3
      Hi Jonas,

      vielen Dank fuer den Versuch der Hilfe.

      Ich glaube, dass dein Vorschlag meinem ersten Versuch sehr aehnlich ist. Das Problem, welches fuer mich dabei vorliegt ergibt sich bei der Weiterverarbeitung des Formulares.

      Angenommen, es existieren auf einer Seite 32 Checkboxen einer Gruppe. Davon waehlt der Anwender die 5te, 17te, 21te und 30te.

      Dann gibt es nach dem Absenden des Formulares in der $_POST-Variable folgendes Bild:
      $_POST['cbx[5]']=1
      $_POST['cbx[17]']=1
      $_POST['cbx[21]']=1
      $_POST['cbx[30]']=1
      Alle andere Felder waeren nicht gesetzt.

      Ich muesste also alle Felder einzeln ueberpruefen.....

      Oha....

      Jetzt wo ich das so niederschreibe ;-)

      Dann kann ich das Feld halt nicht dynamisch anlegen. Muss ich halt spaeter nur darauf achten, dass die $_POST-Variable gesetzt ist.


      <?
      //Weiterverarbeitung
      $counter=0;

      //Der folgende Block wiederholt sich fuer jede Gruppe von Checkboxen
      for($i=1;$i<=$anzahl_der_checkboxen;$i++)
      {
      if(isset($_POST['cbx[$i]']))
      {
      $form_id[]=eindeutige_id_des_checkboxblocks;
      $form_value[]=$_POST['cbx[$i]']; //Wert des Feldes (kann nun nicht mehr immer 1 sein. Dafuer muss die value-Eigenschaft im Input-Feld mit $i belegt werden
      $counter++;
      }
      }

      //Nachdem alle aktivierten Checkboxen aus allen Formularseiten in den Feldern gespeichert sind, werden sie nun weggeschrieben.
      for($i=0;$i<$counter;$i++)
      {
      //Daten aus den Feldern $form_id und $form_value in MySQL-DB schreiben
      }

      ?>


      hhmmmmm.....
      Mal sehen. Der Praxistest steht noch aus. Koennte aber wohl klappen. Danke nochmal Jonas ;-)
      Zuletzt geändert von pottbod; 21.10.2005, 19:00.

      Kommentar


      • #4
        Original geschrieben von pottbod
        Dann kann ich das Feld halt nicht dynamisch anlegen. Muss ich halt spaeter nur darauf achten, dass die $_POST-Variable gesetzt ist.
        hmm... wie wärs ungefähr so:


        <input type="checkbox" id="x" name="cbx[x]" value="1" <?php if (!empty($_POST['cbx'][x])) echo 'checked="checked"';?>/>

        das ganze in ne Schleife mit ner Countervariable rein und die Stellen die ich jetzt einfach mit nem 'x' benannt hab mit der counter-Var oder ähnlichem ersetzen.
        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
        Schön - etwas Geschichte kann ja nicht schaden.
        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

        Kommentar


        • #5
          Hmm....
          Irgendwie sehe ich da nicht das Problem...

          Also....
          wir nehmen an, du hast 32 checkboxen...

          PHP-Code:
          <?
          for($i=1;$i<=32;$i++)
          {
              if($cbx[$i]==1)
              {
                  $checked="checked";
              }
              else 
              {
                  $checked="";    
              }
              printf("<input type=\"checkbox\" name=\"cbx[%s]\" value=\"1\" %s>",$i,$checked);

          }

          ?>
          Nun wird das Formular irgendwo abgeschickt.
          Es folgt die Auswertung:
          PHP-Code:
          for($i=1;$i<=32;$i++)
          {
               if(
          $cbx[$i]==1)
               {
                    
          // mach das was gemacht werden muss
               
          }

          Das Durchzählen aller Checkboxen wird ja nicht massenhaft Zeit kosten, auch wenn es 100 oder so sein sollten...

          Kommentar


          • #6
            Original geschrieben von jonas01
            Irgendwie sehe ich da nicht das Problem...
            Ja, das sieht man an deinem Codevorschlag.
            Nun wird das Formular irgendwo abgeschickt.
            Es folgt die Auswertung:
            PHP-Code:
            for($i=1;$i<=32;$i++)
            {
                 if(
            $cbx[$i]==1)
                 {
                      
            // mach das was gemacht werden muss 
            Für nicht angekreuzte Checkboxen wird gar kein Name/Value-Paar übergeben, also kannst du nicht einfach "alle 32 Stück" durchzählen - weil es vermutlich gar keine 32 Stück gibt.

            (Von register_globals und anderen Sachen, die du nicht berücksichtigst, mal abgesehen.)
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar

            Lädt...
            X