Checkboxen mit php und sql

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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.

    Comment


    • #3
      Ganz tolle Antwort !

      Comment


      • #4
        Originally posted by Tholkin View Post
        Ganz tolle Antwort !
        Die Antwort mag dir ja nicht gefallen, aber sie ist die einzig richtige.

        Comment


        • #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 ?

          Comment


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

            Comment


            • #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.

              Comment

              Working...
              X