Ankündigung

Einklappen
Keine Ankündigung bisher.

checkboxen checked

Einklappen

Neue Werbung 2019

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

  • checkboxen checked

    Ich habe ein Formular mir checkboxen versehen und die Werte in eine Datenbank gespeichert:
    Code:
    <input type="checkbox" name="brennstoffe[]" value="Erdgas"> Erdgas
    <input type="checkbox" name="brennstoffe[]" value="Heizöl"> Heizöl
    <input type="checkbox" name="brennstoffe[]" value="Fernwärme"> Fernwärme
    Code:
    if (isset($_POST['brennstoffe'])) {
      reset($_POST['brennstoffe']);
      foreach ($_POST['brennstoffe'] as $k => $v){
      $brennstoffe = serialize($_POST['brennstoffe']);}}
    Das hat soweit funktioniert.
    Jetzt will ich im selben Formular mir die Optionen vorselektiert haben, die ich soeben angewählt hatte. Bisher bin ich so vorgegangen
    Code:
    $brennstoffe = unserialize($dsatz['brennstoffe']);
    <input type="checkbox" name="brennstoffe[]" value="Erdgas" <?php if($dsatz["brennstoffe"]== 'Erdgas'){echo "checked";}?>> Erdgas
    <input type="checkbox" name="brennstoffe[]" value="Heizöl" <?php if($dsatz["brennstoffe"]== 'Heizöl'){echo "checked";}?>> Heizöl
    <input type="checkbox" name="brennstoffe[]" value="Fernwärme" <?php if($dsatz["brennstoffe"]== 'Fernwärme'){echo "checked";}?>> Fernwärme
    Dabei geschieht folgendes. Ich hatte nur zwei Felder angekreuzt, aber beim nochmaligen besuchen waren alle drei Felder vorselektiert.
    Wo ist der Fehler?


  • #2
    Dein 2. Code-Abschnitt ist schlechter Stil finde ich. Was soll dieses serialize-Gefrickel. Im Übrigen: Wenn if-Abfragen nicht das ergeben, was man erwartet, dann läßt man sich diese ausgeben.

    Um darzustellen, ob überhaupt die Speicherung in der DB geklappt hat, würde ich die Post-Variablen in die DB speichern und diese dann wieder aus der DB holen und dann erst checken. Dadurch sicherst du ab, dass das angekreuzte auch tatsächlich in der DB steht.
    In Code-Abschnitt 3 könntest du, wenn dir mein Vorschlag nicht liegt, doch einfach

    PHP-Code:
    <?php print $_POST['brennstoffe'][0] == 'Erdgas' ' checked' '' ?>
    ..

    testen.

    PS: Deine 2. Code-Abschnitt macht für mich garkeinen Sinn. Dein $_POST-Array sieht so aus:
    PHP-Code:
    <?php
    $_POST 
    = array('brennstoffe' => array(=> 'Erdgas'=> 'Heizöl')); // wenn 1+2 angeklickt sind
    ?>
    Was soll das $brennstoffe = serialize($_POST['brennstoffe']) ??? Wozu die foreach-Schleife wenn du $k und $v nicht verwendest und die Variable $brennstoffe eh immer überschreibst. Meiner Meinung nach dürfte garnichts ge-checked worden sein, es sei denn du unterschlägst wichtigen Code. Woher kommt $dsatz?

    Kommentar


    • #3
      nun vielleicht solltest du den verschiedenen checkboxen auch unterschiedliche namen geben??
      ist am einfachsten...und du brauchst kein serialize&co....

      Kommentar


      • #4
        Ah die 1. Zeile im 3. Code-Abschnitt habe ich übersehen.

        Edit: Also manchmal Frage ich mich, muss man die einfachsten Dinge immer dermassen kompliziert programmieren?!

        Kommentar


        • #5
          Den 2. Code habe ich as einem Script übernommen und mit serialize ergänzt. Ob das funktioniert hat, habe ich gemerkt, dass ich mir den Inhalt der Tabelle angeschaut habe.
          $dsatz kommt aus
          $res = mysql_query("select * from tabelle where haus='$haus'");
          $num = mysql_num_rows($res);
          if ($num == 1){
          $dsatz = mysql_fetch_assoc($res);

          Kommentar


          • #6
            $dsatz['brennstoffe'] kann nur einen Wert haben, nicht wie von dir gewünscht 0-3. Verwechselst du das ganze mit Radio-Buttons?

            Kommentar


            • #7
              PHP-Code:
              <input type="checkbox" name="brennstoffe[]" value="Erdgas" <?php if (isset($_POST["brennstoffe"]) && in_array('Erdgas'$_POST["brennstoffe"])){echo "checked";}?>> Erdgas

              Kommentar

              Lädt...
              X