Ankündigung

Einklappen
Keine Ankündigung bisher.

Zustand von vielen Checkboxen in Datenbank speichern

Einklappen

Neue Werbung 2019

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

  • Zustand von vielen Checkboxen in Datenbank speichern

    Hallo @ all

    Ich habe ein Formular, indem der Anwender sehr viele Checkboxen anklicken kann. (ca. 40 Stück) Den Zustand der Checkboxen möchte ich in der Datenbank speihern, jedoch möchte ich nicht für jede Checkbox eine Spalte anlegen. Gibt es eine Möglichkeit das ganze zusammenzufassen?

    Grüsse

    Pimbolie1979
    www.Gastgeber-Deutschland.de


  • #2
    z.b. implode();
    sind die checkboxen alle im array $checkboxen enthalten, sieht das z.b. so aus...
    PHP-Code:
    $check implode(",",$checkboxen); 
    nachteil, due musst IMMER ein explode machen, um den wert von checkbox 7 auszulesen...
    gruss sys

    Kommentar


    • #3
      oder zahlen(zuordnung zum inhalt) verwenden und bitkodieren
      PHP-Code:
      <?php
       
      foreach($checkboxen as $checkbox)
        
      $check |= pow(2,$checkbox);
      ?>
      auslesen lässt sich dass dann mit
      PHP-Code:
      <?php
       
      if($check&pow(2,$gesuchter_wert))//angekreuztz ansonsten nicht angekreuzt
      ?>
      feld in der datenbank muss dann entsprechend [int(mögliche_checkboxen) unsigned] mögliche checkboxen lang sein
      nachteile: du wirst ein wertearray benötigen.
      Karteikasten
      "Es gibt auch Linux-Aussteiger. Aber die Rückfallquote steigt mit jeder Win-Version." - Walter Saner in de.newusers.questions

      Kommentar


      • #4
        Beide Lösungen sehen etwas schwer zu verstehen aus, jedoch habe ich schon mal einen Ansatz zum googeln. Mal sehen für welche Lösung ich mich entscheide.

        Es wäre nett wenn Ihr vielleicht auch noch einige Worte zu Euren Lösungen schreibt, damit ich es einfacher verstehen kann.

        Grüsse
        www.Gastgeber-Deutschland.de

        Kommentar


        • #5
          Ich bevorzuge die Lösung von sysop

          Wie muss ich bei dieser Lösung die Checkboxen definieren?
          www.Gastgeber-Deutschland.de

          Kommentar


          • #6
            vielleicht:

            type="checkbox" name="was_weis_ich[]" value="1"

            und dann:

            $check = implode(",",$_POST['was_weis_ich']);

            Kommentar


            • #7
              Ich empfehle dir folgende Lösung:
              Code:
              checkbox_questions (PK = id)
              id | question
              
              checkbox_answers (PK = user_id, question_id)
              user_id | question_id
              Das heißt, fülle eine Tabelle in der Datenbank mit dem Fragen-Katalog oder um was auch immer es sich eben bei den Checkboxen handelt (Hobbies, Gewohnheiten, ..)

              Nun erstelle die Checkboxen, der Index für "question" entspricht dem Primärschlüssel der Tabelle "checkbox_questions".
              Code:
              <input type="hidden" name="question[0]" value="init" />
              <input type="checkbox" name="question[1]" value="1" />
              #question1#
              
              
              <input type="checkbox" name="question[2]" value="1" />
              #question2#
              
              
              <input type="checkbox" name="question[3]" value="1" />
              #question3#
              usw.
              Nun hast du nach dem Abschicken einen PHP-Array $_POST['question'], dessen Schlüssel die angeklickten Primärschlüssel der Fragen sind.
              Nun kannst du mit folgendem Konstrukt die Daten eintragen:
              PHP-Code:
              <?php
              $sql 
              "INSERT INTO checkbox_answers (user_id, question_id) VALUES (%s)";
              $values = array();
              foreach (
              $_POST['question'] as $question_id => $one) {
                
              $question_id intval($question_id);
                if (
              $question_id 0) { /* hier Bedingung einfügen, damit nur gültige question_id's eingetragen werden können */
                  
              $values[] = "$user_id$question_id"// $user_id könnte aus deiner Session stammen
              }
              $sql sprintf($sqlimplode('), ('$values);
              // echo $sql
              ?>
              In SQL steht jetzt dein Query zum Eintragen in die Datenbank-Tabelle checkbox_answers.

              Kommentar


              • #8
                PHP-Code:
                <?                
                   $checkboxenzustand = array();
                   $check = implode(",",$_POST['checkboxenzustand']);  /* Hier soll Fehler sein */
                ?>
                ]

                ab hier HTML-Code

                Code:
                <input name=" <? $checkboxenzustand[0] ?> " type="checkbox" class="checkbox" id="morgens" value="1" />
                                    morgens
                Jedoch kommt folgende Fehlermeldung:

                Warning: implode(): Bad arguments --> Demnach muss der Fehler bei der Implode-Funktion liegen, jedoch finde ich diesen nicht

                Kann mir vielleicht einer sagen woran es liegt

                Grüsse

                Pimbolie1979
                www.Gastgeber-Deutschland.de

                Kommentar


                • #9
                  Das ist NICHT der HTML-Code, das ist der PHP-Code zum Erzeugen des HTML-Codes und damit uninteressant.

                  Würdest du dir den HTML-Code (Browser, Rechtsklick, Quelltext anzeigen) anschauen (und kann man davon nicht ausgehen als Entwickler???), würdest du sofort sehen, dass dort
                  Code:
                  <input name="  " type="checkbox" class="checkbox" id="morgens" value="1" />
                                      morgens
                  steht, was in dreifacher Hinsicht Bullshit ist.
                  1. Was sollen die Leerzeichen?
                  2. Hat <? $variable ?> garkeinen Effekt, du musst schon echo, print oder Konsorten verwenden
                  3. Hatte ich doch ein Beispiel geschrieben, das name-Attribut muss so aufgebaut sein: name[id] (und hier darf wieder nicht verwechselt werden, dass $php[$id] zwar ähnlich aussieht, aber doch auf HTML keinen Einfluß hat).

                  Und zu guter letzt, warum schneidest du die Fehlermeldung, wenn du sie hier postest?

                  Kommentar


                  • #10
                    1. Das Leerzeichen hatte ich nicht gesehen, da ich nicht den Code des Browser angeschaut hatte (war ich nicht drauf gekommen aber danke für diesen hinweis)

                    2. mir war so als ob ich es auch ohne echo machen konnte

                    3. der Rest der Pfhelermeldung war nur der Pfad der Datei, der hatte nicht damit zu tun


                    ich werde es mal mit Echo ausprobieren
                    www.Gastgeber-Deutschland.de

                    Kommentar


                    • #11
                      Was ich einfach nicht vestehe ist folgendes:

                      Ich erzeuge einfach ein leeres array mit

                      $checkboxenzustand = array();

                      Der Inhalt des Array ist jetzt undefiniert.

                      Im HTML-Code wird dann eine Checkbox erzeugt. Jeder Chebox besitzt eine Variable die den Zustand speichert. Wenn ich dann auf dem Submit Knopf drücke wird das Formular abgeschickt und ich kann mit $_REQUEST['CHECKBOXVARIABLENNAME'] den Zustand der Checkbox auslesen. Jedoch hat die Checkbox jetzt keinen Variablennamen, sondern der Zustand soll in einem Array abgespeichert werden. Demnach muss ich auf ein Array verweisen. Dies mache ich folgendermaßen:

                      <input name=" <? echo($checkboxenzustand[0]); ?> " type="checkbox" class="checkbox" id="morgens" value="1" />

                      Dies funktioniert so aber nicht, da ich den Inhalt des 0. Arrayelementes dem Namen zuweise, da noch nichts im Array steht, bleibt der Name leer. Wie muss die Zuweiseung aussehen, damit ich in das 0.Arrayelement schreibe?
                      www.Gastgeber-Deutschland.de

                      Kommentar


                      • #12
                        Zitat von Pimbolie1979
                        2. mir war so als ob ich es auch ohne echo machen konnte
                        Die Kurzschreibweise lautet <?=$variable?>. Das bei dir fehlende = entscheidet dann aber eben, ob der Wert von $variable angezeigt wird, oder im Nirvana verschwindet.

                        Zitat von Pimbolie1979
                        3. der Rest der Pfhelermeldung war nur der Pfad der Datei, der hatte nicht damit zu tun
                        Wenn ich mich richtig erinnere, müsste dort "Argument #2 must be an array" folgen.

                        Im HTML-Code wird dann eine Checkbox erzeugt. Jeder Chebox besitzt eine Variable die den Zustand speichert. Wenn ich dann auf dem Submit Knopf drücke wird das Formular abgeschickt und ich kann mit $_REQUEST['CHECKBOXVARIABLENNAME'] den Zustand der Checkbox auslesen. Jedoch hat die Checkbox jetzt keinen Variablennamen, sondern der Zustand soll in einem Array abgespeichert werden. Demnach muss ich auf ein Array verweisen. Dies mache ich folgendermaßen:

                        <input name=" <? echo($checkboxenzustand[0]); ?> " type="checkbox" class="checkbox" id="morgens" value="1" />

                        Dies funktioniert so aber nicht, da ich den Inhalt des 0. Arrayelementes dem Namen zuweise, da noch nichts im Array steht, bleibt der Name leer. Wie muss die Zuweiseung aussehen, damit ich in das 0.Arrayelement schreibe?
                        Verstehe ich nicht.

                        Kommentar


                        • #13
                          Zitat von Pimbolie1979
                          Was ich einfach nicht vestehe ist folgendes:

                          Im HTML-Code wird dann eine Checkbox erzeugt. Jeder Chebox besitzt eine Variable die den Zustand speichert.
                          soweit so gut. versuch mal php und html zu trennen. html wird vom browser interpretiert. php wird ausgeführt, bevor das ganze an den browser geht.
                          von da her ist diese aussage schonmal nicht ganz zutreffend, da du hier(nachdem wie ich es verstanden habe) php und html vermischst die checkbox braucht einen NAMEN. dieser kann als array definiert sein, hat aber NICHTS mit den VARIABLEN AUS PHP zu tun.
                          will heißen, du brauchst kein array anzulegen, um den checkboxen leere variablen als name zuzuweisen.
                          Zitat von Pimbolie1979
                          Wenn ich dann auf dem Submit Knopf drücke wird das Formular abgeschickt und ich kann mit $_REQUEST['CHECKBOXVARIABLENNAME'] den Zustand der Checkbox auslesen.
                          soweit richtig, wenn die checkbox einen namen hat.
                          Zitat von Pimbolie1979
                          Jedoch hat die Checkbox jetzt keinen Variablennamen,
                          was nicht weiter verwunderlich ist, da du der checkbox keinen namen zuweist, sondern den inhalt eines nicht existenten array-feldes
                          Zitat von Pimbolie1979
                          sondern der Zustand soll in einem Array abgespeichert werden.
                          das wird erreicht, indem du dem HTML-namen der checkbox die eckigen klammern anhängst (name[]).
                          Zitat von Pimbolie1979
                          Demnach muss ich auf ein Array verweisen.Dies mache ich folgendermaßen:

                          <input name=" <? echo($checkboxenzustand[0]); ?> " type="checkbox" class="checkbox" id="morgens" value="1" />
                          schau dir die ausgabe(html-code, nicht die standartdarstellung) deines browsers an. diese hilft schonmal sehr viel weiter.
                          Zitat von Pimbolie1979
                          Dies funktioniert so aber nicht, da ich den Inhalt des 0. Arrayelementes dem Namen zuweise, da noch nichts im Array steht, bleibt der Name leer. Wie muss die Zuweiseung aussehen, damit ich in das 0.Arrayelement schreibe?
                          wenn du es mit arrays aus php umsetzen willst, musst du dort die namen hineinschreiben
                          PHP-Code:
                          <?php
                          $checkboxenname 
                          = array("checkboxenzustand[0]""checkboxenzustand[1]""checkboxenzustand[2]",...);
                          ?>
                          <input name="<? echo($checkboxenzustand[0]); ?>" type="checkbox" class="checkbox" id="morgens" value="1" />
                          und ansonsten die einfachere version: (vgl. zergling's vorschlag)
                          Code:
                          <input name="checkboxenzustand[1]" type="checkbox" class="checkbox" id="morgens" value="1" />
                          wer bitteschön hat dir den floh ins ohr gesetzt, dass php-arrays nötig sind, dass checkboxen in html als array behandelt werden? (hier jedenfalls stand das nirgends)
                          Karteikasten
                          "Es gibt auch Linux-Aussteiger. Aber die Rückfallquote steigt mit jeder Win-Version." - Walter Saner in de.newusers.questions

                          Kommentar


                          • #14
                            Also bei mir wird der Zustand einer Checkbox immer noch über den Klick der gleichen bestimmt, da nicht angeklickte Checkboxen ja eh nicht übergeben werden. Das man Zustände im Namen der Checkbox speichert, hört sich für mich erst einmal sehr fragwürdig bis unnötig an. Da wäre man besser beraten sich eine kleine Funktion zu schreiben, oder wie auch immer, die Boxen zu generieren und mit einem checked="checked" als Atribut zu versehen, wenn die Boxen angeklickt vorbelegt werden sollten etc. Vor allen Dingen frage ich mich welcher Zustand mit dem Namen der Box belegt werden soll?

                            Auf der anderen Seite lässt man einfach einen Counter durchlaufen und kann dann jederzeit die Checkboxen anhand ddes Counters oder einer id eindeutig identifizieren.

                            <input name="box[<?php echo $i; ?>]" .../>

                            Kommentar


                            • #15
                              PHP-Code:
                              <?PHP

                              /**
                                  vorbelegen der checkboxen oder code zum auslesen bestehender auswahlen

                                  der code dazu nach diesem rem z.b.
                              **/

                              $u_toedit[0] = 1;
                              $u_toedit[1] = 0;
                              $u_toedit[2] = 1;
                              $u_toedit[3] = 0;
                              $u_toedit[4] = 1;

                              if(!isset(
                              $_POST['admode'])) $admode "";
                              else 
                              $admode $_POST['admode'];

                              switch(
                              $admode)
                              {

                                  default:

                                  
                              ?>
                                  <form method="post" action="<?=$PHP_SELF?>">
                                  <input type="hidden" name="admode" value="save">
                                  <?PHP
                                  
                              for($lo 0$lo <= 4$lo++)
                                  {

                                      echo 
                              $lo;
                                      
                              ?>
                                          <input value="1" type="checkbox" name="adrright[<?=$lo?>]" onfocus="this.blur()"<? if($u_toedit[$lo] == 1) echo " checked"; ?>>
                                      <?
                                  }
                                  ?>
                                  <input type="submit" value="Abschicken" class="abutton1">
                                  </form>

                                  <?PHP
                                  
                              break;

                                  case 
                              'save':

                                  
                              $werte $_POST['adrright'];

                                  
                              // alle variablen belegen, ob geklickt oder nicht
                                  
                              for($xy 0$xy <= 4$xy++)
                                  {
                                      if(
                              $werte[$xy] == "")
                                      {
                                          
                              $wert[$xy] = 0;
                                      }
                                      else
                                      {
                                          
                              $wert[$xy] = 1;
                                      }
                                  }

                                  
                              $ausgabe implode(",",$wert);

                                  echo 
                              $ausgabe;

                              // ende switch
                              dirty, aber sollte funktionieren. etwas soll dir aber auch noch bleiben, den rest musst du dir selber coden.

                              zur fragwürdigkeit der speicherung der zustände..
                              ich nutze sowas auch, um z.b. in der administration zu setzen, was von einer vorgegebenen auswahl alles geloggt werden soll und was nicht.
                              gruss sys

                              Kommentar

                              Lädt...
                              X