Checkboxen mit php und sql

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

  • Checkboxen mit php und sql

    Hallo,
    ich bin noch recht neu im Bereich php & sql
    Und jetzt komme ich nicht wirklich weiter um mein Problem zu lösen und bräuchte eure Hilfe.

    Ich habe ein Formular, um ein neues Monster anzulegen, mit vielen Checkboxen die verschiedenen Bereichen zugeordnet sind. Und nun möchte ich beim NEU anlegen die angeklickten Checkboxen speichern. Und wenn ich das Monster ändern will, dann sollen die gewählten Checkboxen ausgewählt sein.
    Ich würde das gerne in einem String speichern, da ich in der DB jeweils nur ein Feld habe zum ablegen.

    Ich zeige euch einen Teilbereich des Formulars und die php Stellen zum Speichern, dann seht Ihr wie und was ich gemacht habe und könnte so evtl besser helfen.

    Über hilfreiche Beiträge würde ich mich echt freuen.

    Vielen dank schon einmal.

    PHP-Code:
    // Speichern & Edit
        
    ...
        } else if (isset(
    $_GET['action']) && $_GET['action'] == "speichern") {

        if (isset(
    $_GET['id']) && $_GET['id'] != "") {
            
    $_POST['monsternr'] = trim($_POST['monsternr']);
            
    $_POST['monstername'] = trim($_POST['monstername']);
            
    $_POST['monsterbild'] = trim($_POST['monsterbild']);
            
    $_POST['rarity'] = trim($_POST['rarity']);
            
    // ...
            
    mysqli_query($cmDB"UPDATE modul_monsters SET monsternr = '".mysqli_real_escape_string($cmDB$_POST['monsternr'])."', monstername = '".mysqli_real_escape_string($cmDB$_POST['monstername'])."', monsterbild = '".mysqli_real_escape_string($cmDB$_POST['monsterbild'])."', rarity = '".mysqli_real_escape_string($cmDB$_POST['rarity'])."' WHERE id = '".mysqli_real_escape_string($cmDB$_GET['id'])."' LIMIT 1");
            
    header ("Location: index.php?seite=modul&modul=".$_GET['modul']."&datei=admin&speichern=okay&status=update");
            exit;
            
        } else {
        
            
    $_POST['monsternr'] = trim($_POST['monsternr']);
            
    $_POST['monstername'] = trim($_POST['monstername']);
            
    $_POST['monsterbild'] = trim($_POST['monsterbild']);
            
    $_POST['rarity'] = trim($_POST['rarity']);
            
    // ...
            
    mysqli_query($cmDB"INSERT INTO modul_monsters (monsternr,monstername,monsterbild,rarity) VALUES ('".mysqli_real_escape_string($cmDB$_POST['monsternr'])."','".mysqli_real_escape_string($cmDB$_POST['monstername'])."','".mysqli_real_escape_string($cmDB$_POST['monsterbild'])."','".mysqli_real_escape_string($cmDB$_POST['rarity'])."')");
            
    header ("Location: index.php?seite=modul&modul=".$_GET['modul']."&datei=admin&speichern=okay&status=insert");
            exit;
        }
        ...





    // NEU & Edit Formular

            
    ...
            
    /* Monster Relics */
            
    print '<tr>';
            print 
    '<td colspan=2>';
            print 
    '<hr style="margin-bottom: 1px;" />';
            print 
    '<br><h2>Monster Relics</h2>';
            print 
    '<h3>Welches Relic hat das Monster ?</h3>';
            print 
    '</td></tr>';
            print 
    '<table border=0 width=440><tr>';
            print 
    '<td colspan=1 width=50%>';
            print 
    '<table>';

            print 
    '<tr>';
            print 
    '<td align="left"><input type="checkbox" name="relic" value="Amulet"/></td>';
            print 
    '<td><label for="relic" class="selectLabel">Amulet</label></td>';
            print 
    '</tr>';
            print 
    '<tr>';
            print 
    '<td align="left"><input type="checkbox" name="relic" value="Armor"/></td>';
            print 
    '<td><label for="relic" class="selectLabel">Armor</label></td>';
            print 
    '</tr>';
            print 
    '<tr>';
            print 
    '<td align="left"><input type="checkbox" name="relic" value="Banner"/></td>';
            print 
    '<td><label for="relic" class="selectLabel">Banner</label></td>';
            print 
    '</tr>';
            print 
    '<tr>';
            print 
    '<td align="left"><input type="checkbox" name="relic" value="Essence"/></td>';
            print 
    '<td><label for="relic" class="selectLabel">Essence</label></td>';
            print 
    '</tr>';
            print 
    '<tr>';
            print 
    '<td align="left"><input type="checkbox" name="relic" value="Mask"/></td>';
            print 
    '<td><label for="relic" class="selectLabel">Mask</label></td>';
            print 
    '</tr>';
            print 
    '</table></td><td colspan=1 width=50%>';
            print 
    '<table>';
            print 
    '<tr>';
            print 
    '<td align="left"><input type="checkbox" name="relic" value="Shield"/></td>';
            print 
    '<td><label for="relic" class="selectLabel">Shield</label></td>';
            print 
    '</tr>';
            print 
    '<tr>';
            print 
    '<td align="left"><input type="checkbox" name="relic" value="Staff"/></td>';
            print 
    '<td><label for="relic" class="selectLabel">Staff</label></td>';
            print 
    '</tr>';
            print 
    '<tr>';
            print 
    '<td align="left"><input type="checkbox" name="relic" value="Sword"/></td>';
            print 
    '<td><label for="relic" class="selectLabel">Sword</label></td>';
            print 
    '</tr>';
            print 
    '<tr>';
            print 
    '<td align="left"><input type="checkbox" name="relic" value="Trap"/></td>';
            print 
    '<td><label for="relic" class="selectLabel">Trap</label></td>';
            print 
    '</tr>';

            print 
    '</table></td></tr></table>';    
            print 
    '<br><br>';
            
    /*  End of Relics */
            
    ... 

  • #2
    Ich würde das gerne in einem String speichern, da ich in der DB jeweils nur ein Feld habe zum ablegen.
    Klingt nach Müll. Ändere die Datenbank.

    Kommentar


    • #3
      Ganz tolle Antwort !

      Kommentar


      • #4
        Zitat von Tholkin Beitrag anzeigen
        Ganz tolle Antwort !
        Die Antwort mag dir ja nicht gefallen, aber sie ist die einzig richtige.

        Kommentar


        • #5
          Was heist den du hast nur ein Feld frei? Meinst du eine Spalte in der DB oder was menst du damit ? Wenn ja erstell doch weitere Spalten,wie man in dein sql sehen kann hast du da doch schon mehrere Spalten. Selbst wenn nicht dann speicher doch alles in einer Spalte. Mach es doch wie bei einer url

          angabe1=bla?angabe2=bla?angabe3=bla? und so weiter . Wenn du die Daten wieder holst nimms du die mit split( Bei JAVASCRIT ,mir fält der amein PHP gerade nicht ein ) wieder auseinander. Oder verstehe ich dich falsch ?

          Kommentar


          • #6
            @basti1012
            Das ist Bullshit und widerspricht jeder Normalsierung

            Kommentar


            • #7
              Naja, bei einer Umfrage mit 300 Ja/Nein Antworten speichert man das Ergebnis auch nicht zwingend in 300 Spalten.
              Je nachdem, was man mit den Daten machen möchte... Nicht umsonst kann SQL mit Delimitern in Strings umgehen und kennt dafür eigene Funktionen


              Deine Checkboxen heissen alle gleich, musst du ändern...

              implode() um aus einem array einen String zu machen bzw explode() um aus einem String wieder ein array zu generieren.

              PHP-Code:
              $check[0] = 1;
              $check[1] = 0;
              $check[2] = 0;

              $string implode("^",$check);
              echo 
              $string."<br>";

              $bla explode("^",$string);
              print_r($bla); 

              Im Formular testest du dann, ob die Variable für deine Checkbox gesetzt ist und setzt entsprechen ein checked. Ca so:

              PHP-Code:
              echo '<table>'."\n";
              echo 
              '<tr>
                      <td align="left"><input type="checkbox" name="check[0]"'
              ;
                      if(
              $bla[0] == 1) echo ' checked';
                      echo 
              '/></td>
                      <td><label for="relic" class="selectLabel">Amulet</label></td>
                    </tr>'
              ."\n";

              echo 
              '<tr>
                      <td align="left"><input type="checkbox" name="check[1]"'
              ;
                      if(
              $bla[1] == 1) echo ' checked';
                      echo 
              '/></td>
                      <td><label for="relic" class="selectLabel">Banner</label></td>
                    </tr>'
              ."\n";

              echo 
              '<tr>
                      <td align="left"><input type="checkbox" name="check[2]"'
              ;
                      if(
              $bla[2] == 1) echo ' checked';
                      echo 
              '/></td>
                      <td><label for="relic" class="selectLabel">Mask</label></td>
                    </tr>'
              ."\n";
              echo 
              "\n".'</table>'
              Den Rest findest du alleine raus.

              Kommentar

              Lädt...
              X