checkboxen auf checked setzen (Edit-Formular)

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

  • checkboxen auf checked setzen (Edit-Formular)

    Hallo,

    eine Anfängerfrage. Es geht schon damit los, das ich gar nicht genau weiß, in welchem Themenbereich ich schreiben soll.

    Ich habe mit Hilfe von mehreren Checkboxen in einem Formular Werte in einen DB geschrieben. Die Checkboxen haben alle den gleichen Namen - z. B. tiere[]. Das gebildete Array habe ich mit implode zerlegt und jeweils mit <br /> versehen, damit ich die Werte anschließend an anderer Stelle untereinander darstellen kann.

    Jetzt möchte ich ein Formular haben, in dem die bereits schon mal ausgewählten Checkboxen beim Aufrufen auf checked stehen. Vielleicht sollte ich noch dazusagen, dass es sich um recht viele Werte handelt.

    Ich habe keinen blassen Schimmer ob das überhaupt geht und auch keinen Ansatz. Hat jemand eine Idee und kann mir evtl. helfen?

    Vielen Dank
    Heisti
    Zuletzt geändert von heisti; 12.02.2009, 00:28.

  • #2
    checked="checked"

    Guckst Du hier!

    ... ein bischen Arbeit sollte man sich schon machen!

    edit: Jetzt versteh ich erst mal was Du meinst. In dem Fall müßten die ausgewählten und in der DB gespeicherten Werte wieder ausgelesen werden und die betreffenden checkboxen dann wie oben erläutert auf checked gesetzt werden! Aber ich bin jetzt müde und muss ins Bett ...

    edit: Da ist doch noch einer wach ...
    Zuletzt geändert von php_fussel; 12.02.2009, 00:27.

    Kommentar


    • #3
      Die Werte aus der DB auslesen und wenn der da als markiert drin steht, halt
      <input type="checkbox" checked="checked" />
      ausgeben - also das checked-Attribut hinzufügen.

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Kommentar


      • #4
        @php_fussel

        genau das ist mein Problem. In der DB steht jetzt z. B. Hund<br />Katze<br /> (in einer Zelle).

        In meinem Formular habe ich dann z. B. die Checkboxen mit Hund, Katze, Maus, Regenwurm

        Kann man jetzt mit irgendeiner Funktion aus dem DB-Eintrag wieder ein Array machen (explode??) und irgendwas in die Checkbox-Zeile schreiben, damit automatisch Hund und Katze als checked markiert werden?

        Der Anwender soll ja in dem Edit-Formular die Möglichkeit haben sein bisherigen Eingaben zu ergänzen bzw. schon ausgewählte Sachen auch wieder abwählen zu können.

        Ich weiß nicht, wie ich es anders erklären soll.

        Danke für Eure Überlegungen
        Heisti

        Kommentar


        • #5
          Original geschrieben von heisti
          genau das ist mein Problem. In der DB steht jetzt z. B. Hund<br />Katze<br /> (in einer Zelle).
          Dieses Problem solltest du zuerst beheben - das ist naemlich eine ganz bescheidene Datenstruktur!

          Beschaeftige dich mit dem Stichwort Normalisierung;
          und schau dir ggf. auch die Spaltentypen ENUM und SET an, die MySQL anbietet.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Das gebildete Array habe ich mit implode zerlegt und jeweils mit <br /> versehen, damit ich die Werte anschließend an anderer Stelle untereinander darstellen kann.
            Guten Morgen, wie unser Herr wahsaga schon sagt, ist die Datenstruktur innerhalb Deiner Datenbank mehr als Bescheiden.

            Kann man jetzt mit irgendeiner Funktion aus dem DB-Eintrag wieder ein Array machen
            Wenn Du Daten aus eine Datenbank holst, dann liegen diese automatisch als array vor (1 Zeile mit mehreren Datensätzen). Das array ist dann wie Deine Datenbank aufgebaut (wenn Du alles holst --> select * from ...), d.h. erstes Feld in der Datenbank ist z.B. die ID, dann hat das Daten-array am index 0 (datenarray[0]) halt die ID usw., wodrauf man dann zugreifen kann (for-Schleife, foeach-Schleife, direkt per wert10=datenarray[9]!

            Versuch: Alle Werte der Checkboxen bekommen innerhalb der Datenbank schon mal eine eigene Spalte ... also eine für Hund, eine für Katze usw. ( ID etc. ... ich weiss nicht genau, was der Zweck ist) oder Tier1, Tier2, ...! Wenn nun Dein (teil-) ausgefülltes Formular abgeschickt wird, dann nimmst Du die einzelnen 'values' der checkboxen entgegen und schreibst diese in die Datenbank in das dafür vorgesehene Feld. Nun kannst Du das Feld einfach mit true füllen (boolean --> Hund, Katze, ...), wenn die betreffende Checkbox ausgefüllt wurde, ansonsten false oder Du schreibst den value in das jeweilige Feld (Tier1 bekommt Hund, Tier2 bekommt - , Tier 3 bekommt Maus, ...).
            Vielleicht kannst Du damit schon mal was anfangen ... ich muss jetzt erst mal frühstücken und noch Bewerbungen schreiben.

            Gruß php-fussel

            Kommentar


            • #7
              Guten Morgen, guten Appetit beim Frühstück und viel Erfolg bei der Bewerbung.

              Das Problem ist, dass ja breits alles so ist wie es ist. Ich müsste also erst mal grundsätzlich alles wieder umbauen und eine neue Tabelle mit mehr als 300 Spalten anlegen. Keine so prickelnde Vorstellung.

              Gibt es keine Möglichkeit den Inhalt eines Array auf einen bestimmten Wert zu überprüfen? Also so was wie if §tiere[] == "maus"

              Danke für Eure Bemühungen!

              Gruß
              Heisti

              Kommentar


              • #8
                in_array(), array_search(), selber mal ins Manual schauen

                Kommentar


                • #9
                  PHP-Code:
                  $such_array = array("Ente""Maus", ...);
                  $gefunden=0;

                  for(
                  $i =0$i count($daten_array_aus_DB;$i++){

                       for(
                  $a=0;$a count($such_array);$a++){

                             if(
                  $daten_array_aus_DB[$i] == $such_array[$a]{

                                   
                  $checked_array[$gefunden]=$daten_array_aus_DB[$i] ;
                                   
                  $gefunden++;
                             }
                           

                       }


                  ... nur eben schnell runtergetippt und NICHT getestet (bevor ich hier zerissen werde ). Es mit den php-Funktionen zu machen, um ein array auszulesen ist eleganter ... aber zum Üben solltest Du Dir diese Vorgehensweise (erst) mal ansehen.

                  Das $checked_array würde/müßte dann die ausgewählten Daten enthalten, die Du dann ausgeben kannst ...
                  PHP-Code:
                  for($x =0$x count($checked_array);$x++){

                        echo 
                  checked_array[$x]."<br>";


                  Gruß php_fussel
                  Zuletzt geändert von php_fussel; 12.02.2009, 10:30.

                  Kommentar


                  • #10
                    Original geschrieben von heisti
                    Das Problem ist, dass ja breits alles so ist wie es ist.
                    Dann ist jetzt der Zeitpunkt, es zu aendern.

                    Ein gutes Datenmodell ist die Basis jedes vernuenftigen Scripts oder Programms.

                    Ich müsste also erst mal grundsätzlich alles wieder umbauen und eine neue Tabelle mit mehr als 300 Spalten anlegen.
                    Das klingt auch wieder bloedsinnig - und ganz und gar nicht so, als ob du dich mit dem Stichwort Normalisierung auseinandergesetzt haettest.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      da muss ich wahsaga zustimmen - was spricht dagegen ein script zu progen was die derzeitige db ausliest und eine neue automatisch erstellt? anhand ner guten programmierung = ne arbeit von 10 min und du musst nich alle inhalte von hand eingeben - überleg dir nur vorher ne vernünftige struktur und überdenke, was du später noch brauchen könntest ...
                      Signatur-Text ...

                      Kommentar


                      • #12
                        Erst mal vielen Dank für Eure Bemühungen. Ich muss gestehen, dass Ihr mein Wissen bei weitem überschätzt. Wie ich oben schon schrieb, bin ich Anfänger und muss erst noch in die Strukturen reinwachsen. Wenn ich weiß was ich hier überhaupt mache und was man alles machen kann, dann werden auch die Abläufe und der Code geschmeidiger.

                        Mit einem Freund habe ich nun folgendes geschnitzt:

                        PHP-Code:
                        $tierarten=Array('hund''katze''maus''regenwurm''ratte'); 
                        $ergebnisliste_tierhalter $data["tiere"];
                        $ergebnis_array=explode("<br />",$ergebnisliste_tierhalter); 
                        Und für die Checkboxen:

                        PHP-Code:
                        <? foreach($tierarten as $tiere) 
                        {
                        ?>
                        <input type="checkbox" name="tiere[]" value="<?php echo $tiere;?>
                        <?php if (in_array($tiere$ergebnis_array)){ echo " checked"; } ?> /> 
                        <?php echo $tiere?> <br /> <?php ?>
                        Sieht bisher so aus, als wenn es funktioniert.

                        Viele Grüße
                        Heisti

                        Kommentar


                        • #13
                          Checkbox auf Checked setzen

                          machs einfach so z.b.:

                          $box = '"checked="';
                          $boxx = 'checked"';
                          if (isset($_POST['box'])) {$boxxx = $box.$boxx;}

                          <p><input name="box" id="in" type="checkbox" value="<?php echo $boxxx ;?>"></p>

                          somit hast du die Variable $boxxx auf "checked="checked" gesetzt und kannst es mit einem alleinigen echo $boxxx ausgeben.

                          und es funktioniert auch ;-) habe selbst lange gebraucht aber guter letzt die Lösung gefunden durch hin und her testen ;-)

                          Kommentar

                          Lädt...
                          X