Form-checkbox auf checked setzen

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

  • Form-checkbox auf checked setzen

    Hallo Leute

    Ich bin gerade dabei ein kleines CMS zu erstellen.
    Dabei ist ein Problem aufgetaucht, was ich hier im Forum noch nicht gefunden habe.

    Ich habe ein Formular mit Checkboxen. Die werden als String ( mit implode) in einer Datenbank gespeichert. Soweit sogut. Jetzt möchte ich aber, dass, wenn man den datensatz "updaten" will, die Checkboxen dessen werte gesetzt waren, wieder als "checked" gekennzeichnet werden, damit mann nicht alle Checkboxen neu auswählen muss.

    Dazu muss aber noch erwähnt werden, dass die Checkboxen auch aus einer dB dyn. erstellt werden.

    Hier ein Auszug aus dem Quelltext
    PHP-Code:
    <?php
    // der Datensatz $zweck wird in ein Array gwandelt
    $array1 explode (' ',$zweck);
    // Anzahl der Arryeinträge ermitteln
    $anzahl count($array1);

    // DB abfrage um alle Checkboxen aufzulisten
    $sql2="SELECT * FROM m_zweck WHERE uid='1' ";
    $result2=mysql_query($sql2);
    if (
    mysql_Num_Rows($result2) > ) {
      while (
    $row2 mysql_fetch_array ($result2)) { 
      
      
    // Hier nun der versuch den Checkboxen "checked" zuzuweisen deren ID im $array1 vorkommen
           
    for ($i 0$i $anzahl$i++) {
                if (
    $row[id] == $array1[$i]){
                     echo 
    "<tr><td width=\"15\"><input type=\"checkbox\" name=\"zweck[]\" value=\"$row2[id]\" checked>
            </td><td>
    $row2[zweck_de]</td></tr>";
                } else {
                     echo 
    "<tr><td width=\"15\"><input type=\"checkbox\" name=\"zweck[]\" value=\"$row2[id]\">
    </td><td>
    $row2[zweck_de]</td></tr>";
               }   
          }
      }  
    }
    else
    {
      echo 
    "<tr><td colspan=\"2\">Es sind keine Einträge in der DB vorhanden</td></tr>";
    }
    mysql_free_result ($result);
    ?>
    Leider funzt das gar nicht. Es werden nur alle Checkboxen so oft angezeigt wie Anzahl der Array-Werte vorliegen.

    Hat nicht jemand eine Idee wie man das umsetzen kann. Ich hab jetzt schon seit 2 tagen daran herumgedoktert, das ich jetzt garnichts mehr hinbekomme ( kennt bestimmt mancher von Euch)

    erst mal dank im vorraus

    lorenz

  • #2
    Klar, weil die Ausgabe auch innerhalb der for-Schleife stattgefunden hat. Mach die Schleife weg und tu was mit in_array.

    Außerdem hast du:
    - $row und $row2
    - $result und $result2
    bringst du da nicht was durcheinander?

    Kommentar


    • #3
      @asp2php

      Nein mit den $row und $row2 habe ich 2 verschiedene DB-Abfragen realiesiert. Es gibt sogar insgesamt 5 DB Abfragen die ich durchnummeriert habe, da mehrere Tabellen die gleichen Tabellenheader haben (id, serie, und rubrik) (man hätte diese natürlich eindeutige namen geben können, wie zb serie_id oder zweck_id etc...)

      Ich habe mir in_array mal durchgelesen kann aber leider nichts damit anfangen. Ich habe auch schon ein paar andere Array-Funktionen gelesen und noch nichts passendes gefunden.

      werde jetzt mal die forschleife entfernen. Das wird zwar nur alle Checkboxen anzeigen (mein ausgangspunkt) aber nicht die "checked" als diese ausgeben.

      Vieleicht weis sonst noch wer ein Tip.

      gruß Lorenz

      Kommentar


      • #4
        mit in_array prüfst du, ob der Wert in dem Array vorkommt, wenn ja, checked zusätzlich ausgeben.

        Kommentar


        • #5
          ja dass könnte klappen wenn man das inetwa so macht

          if (in_array ("$row[id]",$array1)) {
          echo "checkbox checked";
          } else {
          echo "checkbox";
          }

          das werde ich jetzt mal ausprobieren ....

          melde mich dann nochmal

          lorenz

          Kommentar


          • #6
            suuupiii
            das hat funktioniert!

            also so sieht jetzt mein script aus!
            PHP-Code:
            <?php
            // der Datensatz $zweck wird in ein Array gwandelt
            $array1 explode (' ',$zweck);

            // DB abfrage um alle Checkboxen aufzulisten
            $sql2="SELECT * FROM m_zweck WHERE uid='1' ";
            $result2=mysql_query($sql2);
            if (
            mysql_Num_Rows($result2) > ) {
              while (
            $row2 mysql_fetch_array ($result2)) { 
              
              
            // Hier nun der versuch den Checkboxen "checked" zuzuweisen 
            // deren ID im $array1 vorkommen
                  
                        
            if (in_array("$row2[id]",$array1)) {
                             echo 
            "<tr><td width=\"15\"><input type=\"checkbox\" name=\"zweck[]\" ";
                             echo
            " value=\"$row2[id]\" checked></td><td>$row2[zweck_de]</td></tr>";
                        } else {
                             echo 
            "<tr><td width=\"15\"><input type=\"checkbox\" name=\"zweck[]\" ";
                             echo
            " value=\"$row2[id]\"></td><td>$row2[zweck_de]</td></tr>";
                       }   
              } 
            }
            else
            {
              echo 
            "<tr><td colspan=\"2\">Es sind keine Einträge in der DB vorhanden</td></tr>";
            }
            mysql_free_result ($result);
            ?>
            Danke für den Tip mit "in_array" hab mich leider mit den meisten Fuktionen scheinbar zuwenig beschäftigt.
            (werde ich nachholen, versprochen

            Lorenz

            Kommentar


            • #7
              - das else-Teil kannst du dir sparen
              - Array nicht in String einbetten
              - Array-Key immer als String angeben
              - sichtbare Textausgabe immer mit htmlentities ausgeben
              - Variable nicht in "" eingeschlossen als Argument übergeben, was soll der Sch**ß?
              =>
              PHP-Code:
              ...
              echo 
              "<tr><td width=\"15\"><input type=\"checkbox\" 
                  name=\"zweck[]\" value=\""
              .$row2['id']."\"";
              if (
              in_array($row2['id'],$array1))
                  echo 
              " checked";
              echo 
              "></td><td>".htmlentities($row2['zweck_de'])."</td></tr>\n";
              ... 

              Kommentar

              Lädt...
              X