Ankündigung

Einklappen
Keine Ankündigung bisher.

Checkbox-Values mit dazugehörigen Text-Inhalten in Datenbanktabelle eintragen

Einklappen

Neue Werbung 2019

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

  • Checkbox-Values mit dazugehörigen Text-Inhalten in Datenbanktabelle eintragen

    Hallo zusammen,

    ich habe ein HTML-Formular, mit dem ich Daten in eine SQL-Datenbank eintragen kann.
    In diesem Formular habe ich auch Checkboxen. Wenn eine Checkbox angeklickt wird, sollen der Value der Checkbox sowie 3 dazugehörige Inhalte aus Text-input-Feldern in die Datenbank eingetragen werden. Hier ist mein Code:

    HTML-Code:
        <input type="checkbox" name="chk[1]" value="Holz"> Holz
        <input type="text" name="Groesse[1]" size="20">
        <input type="text" name="Gewicht[1]" size="20">
        <input type="text" name="Kommentar[1]" size="80">
    
        <input type="checkbox" name=" chk [2]" value="Metall"> Metall
        <input type="text" name="Groesse[2]" size="20">
        <input type="text" name="Gewicht[2]" size="20">
        <input type="text" name="Kommentar[2]" size="80">
    
        <input type="checkbox" name="chk[3]" value="Plastik"> Plastik
        <input type="text" name="Groesse[3]" size="20">
        <input type="text" name="Gewicht[3]" size="20">
        <input type="text" name="Kommentar[3]" size="80">
    
        <input type="checkbox" name="chk[4]" value="Kunststoff"> Kunststoff
        <input type="text" name="Groesse[4]" size="20">
        <input type="text" name="Gewicht[4]" size="20">
        <input type="text" name="Kommentar[4]" size="80">
    
        <input type="checkbox" name="chk[5]" value="Glas"> Glas
        <input type="text" name="Groesse[5]" size="20">
        <input type="text" name="Gewicht[5]" size="20">
        <input type="text" name="Kommentar[5]" size="80">
    
        <input type="checkbox" name="chk[6]" value="Gummi"> Gummi
        <input type="text" name="Groesse[6]" size="20">
        <input type="text" name="Gewicht[6]" size="20">
        <input type="text" name="Kommentar[6]" size="80">
    PHP-Code:

                             
    for ($i 0$i count($_POST['chk']); $i++) {
                                   if (!empty(
    $_POST['chk'][$i])) {
                                     
    $sql="INSERT INTO product (chk_id, product_id, Name, Material, Groesse, Gewicht, Kommentar) VALUES ('', (SELECT id from product_main WHERE Name='$Name'), '$Name', '"$_POST['chk'][$i]."','"$_POST['Groesse'][$i]."','"$_POST['Gewicht'][$i]."', '"$_POST['Kommentar'][$i]."')";
                                     
    mysqli_query($db$sql);
                                             }
                                    }
                                    if (
    mysqli_affected_rows($db) > 0) {
                                     echo 
    "<h3> Eintrag erfolgreich</h3>";
                                     } else {
                                     echo 
    "<h3 style='color:red'>Eintrag nicht erfolgreich</h3>";
                                     } 
    Das funktioniert auch, solange beim Anklicken mehrerer Checkboxen keine in der Reihenfolge ausgelassen wird. Werden jedoch z.B. nur die Checkboxen 1, 3 und 5 angeklickt, fehlen Werte in der Datenbanktabelle, da count($_POST['chk']) 3 ergibt und daher die Werte der 5. Checkbox nicht mehr eingetragen werden. Wenn ich den Array-Key nicht vorgebe, also z.B.:


    HTML-Code:
        <input type="checkbox" name=" chk []" value="Metall"> Metall
        <input type="text" name="Groesse[]" size="20">
        <input type="text" name="Gewicht[]" size="20">
        <input type="text" name="Kommentar[]" size="80">
    werden zwar alle Checkbox-Values richtig eingetragen, aber die dazugehörigen Text-Inhalte stehen in falschen Zeilen, da sie ihren Checkbox-Values ja nicht eindeutig zugeordnet sind.

    Wie kann ich hier nun alle Werte richtig in die Datenbank eintragen, auch wenn einige Checkboxen in der Reihenfolge nicht angeklickt werden?

    Vielen Dank!

  • #2
    Gib den Checkboxen den Arraywert bereits mit.
    Das Thema hatten wir mit dir doch erst kürzlich ziemlich ausführlich besprochen, wenn ich mich nicht irre.
    Lies doch da noch mal nach.

    Kommentar


    • #3
      Danke für Deine Rückmeldung protestix! Damals ging es um starre Werte und ich habe ich das Problem gelöst, indem ich mit if (isset()) die starren Werte den einzelnen Checkboxen zugeordnet habe, was auch geklappt hat! Dieses mal sind es jedoch variable Werte, die neu eingegeben werden und ich muss sicherstellen, dass die Text-Inhalte auch beim jeweiligen Checkbox-Value eingetragen werden. Ich habe ja versucht, das zu lösen, indem ich allen Werten den Array-Key mitgegeben habe, nur dann klappt das mit dem count($_POST['chk']) in der for-Schleife nicht mehr ...

      Kommentar


      • #4
        Hi,

        der erste Weg ist der Richtige: Jedem Array-Element einen Index geben.

        Mit count(array) (Ergebnis = 3) wirst du natürlich nie in einer for-Schleife einen Array-Index > 3 ansprechen können.

        Nimm statt dessen foreach für jedes Element.

        PHP-Code:
        <!DOCTYPE HTML>
        <html>
        <head>
        <title>Untitled</title>
        </head>
        <body>
        <form action="" method="post">
        <input type="checkbox" name="chk[1]" value="Holz"> Holz
            <p><input type="text" name="Groesse[1]" size="20">
            <input type="text" name="Gewicht[1]" size="20">
            <input type="text" name="Kommentar[1]" size="80"></p>

            <p><input type="checkbox" name=" chk [2]" value="Metall"> Metall
            <input type="text" name="Groesse[2]" size="20">
            <input type="text" name="Gewicht[2]" size="20">
            <input type="text" name="Kommentar[2]" size="80"></p>

            <p><input type="checkbox" name="chk[3]" value="Plastik"> Plastik
            <input type="text" name="Groesse[3]" size="20">
            <input type="text" name="Gewicht[3]" size="20">
            <input type="text" name="Kommentar[3]" size="80"></p>

            <p><input type="checkbox" name="chk[4]" value="Kunststoff"> Kunststoff
            <input type="text" name="Groesse[4]" size="20">
            <input type="text" name="Gewicht[4]" size="20">
            <input type="text" name="Kommentar[4]" size="80"></p>

            <p><input type="checkbox" name="chk[5]" value="Glas"> Glas
            <input type="text" name="Groesse[5]" size="20">
            <input type="text" name="Gewicht[5]" size="20">
            <input type="text" name="Kommentar[5]" size="80"></p>

            <p><input type="checkbox" name="chk[6]" value="Gummi"> Gummi
            <input type="text" name="Groesse[6]" size="20">
            <input type="text" name="Gewicht[6]" size="20">
            <input type="text" name="Kommentar[6]" size="80"></p>
          <input type="submit" name="senden" value="Senden" />
        </form>
        <?php
        if(isset($_POST['senden'])){
         if(isset(
        $_POST['chk'])){
          foreach(
        $_POST['chk'] as $key => $value){
          echo 
        "Material: ".$_POST['chk'][$key]."<br>";
          echo 
        "Groesse: ".$_POST['Groesse'][$key]."<br>";
          echo 
        "Gewicht: ".$_POST['Gewicht'][$key]."<br>";
          echo 
        "Kommentar: ".$_POST['Kommentar'][$key]."<br><br>";
         }
         }
        }
        ?>
        </body>
        </html>
        Gruß
        Günni

        Kommentar


        • #5
          HTML-Code:
          <input type="checkbox" name="materialien[0][auswahl]" value="Metall"> Metall
          <input type="text" name="materialien[0][groesse]" size="20">
          <input type="text" name="materialien[0][gewicht]" size="20">
          <input type="text" name="materialien[0][kommentar]" size="80">
          
          <input type="checkbox" name="materialien[1][auswahl]" value="Plastik"> Plastik
          <input type="text" name="materialien[1][groesse]" size="20">
          <input type="text" name="materialien[1][gewicht]" size="20">
          <input type="text" name="materialien[1][kommentar]" size="80">
          
          <input type="checkbox" name="materialien[2][auswahl]" value="Kunststoff"> Kunststoff
          <input type="text" name="materialien[2][groesse]" size="20">
          <input type="text" name="materialien[2][gewicht]" size="20">
          <input type="text" name="materialien[2][kommentar]" size="80">
          PHP-Code:
          foreach ($_POST['materialien'] as $material) {
              if (
          array_key_exists('auswahl'$material)) {
                  
          printf(
                      
          '%s - %s - %s - %s<br>',
                      
          htmlspecialchars($material['auswahl'ENT_COMPAT'UTF-8'),
                      
          htmlspecialchars($material['groesse'ENT_COMPAT'UTF-8'),
                      
          htmlspecialchars($material['gewicht'ENT_COMPAT'UTF-8'),
                      
          htmlspecialchars($material['kommentar'ENT_COMPAT'UTF-8')
                  );
              }

          Kommentar


          • #6
            Vielen Dank Günni, Deine Lösung klappt perfekt!

            Kommentar


            • #7
              Danke auch Dir hellbringer! Dachte immer, mit der foreach-Schleife bringe ich nur einen Wert in die Datenbank, aber hab wieder was dazu gelernt!

              Kommentar

              Lädt...
              X