[PHP MySQL] Checkbox Wert in Array speichern und MySQL updaten

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

  • [PHP MySQL] Checkbox Wert in Array speichern und MySQL updaten

    Hallo Forum,

    Ich habe ein Formular erstellt, in welchem ich die Ergebnisse eines Spieltages eintrage und in MySQL speicher. Dieses funktioniert soweit auch ganz gut.

    Nun möchte ich noch einen Checkbox-Wert übergeben.
    Das Problem ist nun, dass nur der Wert 1 aber nicht der Wert 0 übergeben wird.
    Ich möchte den Wert 0 übergeben, wenn Checkbox nicht "checked" ist und den Wert 1, wenn Checkbox "checked" ist.

    In meinem Beispiel habe ich 8 Spiele pro Spieltag, welche eingegeben werden. Wenn ich nun Checkbox für Spiel 3 und 5 setze, dann wird das Array wie folgt gesetzt:

    [Played] => Array ( [0] => 1 [1] => 1 )

    Ich hätte aber gerne

    [Played] => Array ( [0] => 0 [1] => 0 [2] => 1 [3] => 0 [4] => 1 [5] => 0 [6] => 0 [7] => 0 )

    Mein Eingabeformular:
    HTML-Code:
    <form id="WMErgebnisse" name="WMErgebnisse" method="post" action="WMErgebnisse.php">
      <p>&nbsp;</p>
      <table border="1">
        <tr>
            <td>wmTeamA</td>
            <td>wmTeamB</td>
            <td>wmSpieltag</td>
            <td>Pl</td>
            <td>wtTippA</td>
            <td>wtTippB</td>
        </tr>
    <?php do { ?>
        <tr>
            <input type="hidden" name="wmErgebnis[SpielID][]" size="1" style="width:40" 
                maxlength="2" value="<?php echo $row_WMErgebnisse['wmSpielID']; ?>" />
              <td><?php echo $row_WMErgebnisse['wmTeamA']; ?></td>
              <td><?php echo $row_WMErgebnisse['wmTeamB']; ?></td>
              <td><?php echo $row_WMErgebnisse['wmSpieltag']; ?></td>
              <td><label>
                    <input <?php if (!(strcmp($row_WMErgebnisse['wmplayed'],"1"))) 
                                {echo "checked=\"checked\"";} ?> 
                    type="checkbox" name="wmErgebnis[Played][]" value="1" id="Played" />
                  </label></td>
              <td><input type="text" name="wmErgebnis[ErgA][]" size="1" style="width:40" 
                maxlength="2" value="<?php echo $row_WMErgebnisse['wmToreA']; ?>" /></td>
              <td><input type="text" name="wmErgebnis[ErgB][]" size="1" style="width:40" 
                maxlength="2" value="<?php echo $row_WMErgebnisse['wmToreB']; ?>" /></td>
          </tr>
    <?php /* $checkbox1[] = ((is_null($_POST['checkbox1'])) ? 0 : 1); */
        } 
         while ($row_WMErgebnisse = mysql_fetch_assoc($WMErgebnisse)); ?>
      </table>
      
      <input type="submit" name="speichern" id="speichern" value="speichern" />
      <p></p>
    </form>
    Mein Update-Code:
    PHP-Code:
     <?php }    

    /* Warteschleife, bis Tippformular abgesendet wurde */
    if (isset($_POST['wmErgebnis'])) 
    {    
    /* UPDATE CODE */    
            
    echo ("UPDATE");
            
    $WMErg=$_POST['wmErgebnis'];
            
    print_r($_POST['wmErgebnis']);
               foreach(
    $WMErg['SpielID'] as $key => $dummy)
            {
                
    mysql_select_db($database_wm2010$wm2010);
                
    $updateErg sprintf("
                                           UPDATE 
                                            wmspielplan SET wmToreA=%s, wmToreB=%s, wmplayed=%s
                                        WHERE 
                                            wmSpielID=%s"
    ,    
                                              
    GetSQLValueString($WMErg['ErgA'][$key], "int"),    
                                              
    GetSQLValueString($WMErg['ErgB'][$key], "int"),
                                              
    GetSQLValueString($WMErg['SpielID'][$key], "int"),
                                              
    GetSQLValueString($WMErg['Played'][$key], "int")
                                              );
                
    mysql_query($updateErg$wm2010);                                                
            }
            echo (
    "Ergebnis gespeichert!");
    }
    Die Ausgabe im Browser:
    UPDATE

    Array (
    [SpielID] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 )
    [Played] => Array ( [0] => 1 [1] => 1 )
    [ErgA] => Array ( [0] => 3 [1] => 3 [2] => 1 [3] => 4 [4] => 5 [5] => 4 [6] => 1 [7] => 1 )
    [ErgB] => Array ( [0] => 0 [1] => 0 [2] => 2 [3] => 1 [4] => 6 [5] => 5 [6] => 7 [7] => 1 ) )

    In meiner MySQL Datenbank wird im Feld "Played" allerdings nicht Spiel 1 und Spiel 2 mit dem Wert 1 gefüllt, sondern wird Spiel 1 mit dem Wert 2 gefüllt. D.h. das vermutlich die Werte im Array addiert werden. Das verstehe ich aber nicht. Die anderen Werte (SpielID, ErgA, ErgB) werden ja richtig übergeben.

    Gruss
    Markus

    Ergebnis gespeichert!
    Zuletzt geändert von mark2911; 12.05.2010, 23:19.

  • #2
    Hallo,

    ausgeschaltete Checkboxen werden nie übermittelt, aber was spricht dagegen, das mit PHP zu prüfen?:

    PHP-Code:
    $ergebnis = (int) isset($_POST["checkboxName"]); // $ergebnis ist dann 0 oder 1 
    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hi Amica,

      spricht eigentlich nichts dagegen DANKE.

      Ich habe das jetzt versucht einzubauen.


      Ich habe folgende PHP Zeile ergänzt,
      PHP-Code:
      <?php $ergebnis1 = (int) isset($_POST["checkbox1"]);?>
      und folgende Zeile in mein Formular eingebaut.
      HTML-Code:
      <input type="hidden" name="wmErgebnis[Played][]" size="1" style="width:40" 
                  maxlength="2" value="<?php echo $ergebnis1; ?>" />
      Gesamtes Formular:

      HTML-Code:
      <form id="WMErgebnisse" name="WMErgebnisse" method="post" action="WMErgebnisse.php">
        <p>&nbsp;</p>
        <table border="1">
          <tr>
              <td>wmTeamA</td>
              <td>wmTeamB</td>
              <td>wmSpieltag</td>
              <td>wtTippA</td>
              <td>wtTippB</td>
              <td>Pl</td>
          </tr>
      <?php do { ?>
          <tr>
              <input type="hidden" name="wmErgebnis[SpielID][]" size="1" style="width:40" 
                  maxlength="2" value="<?php echo $row_WMErgebnisse['wmSpielID']; ?>" />
                <td>
                  <?php echo $row_WMErgebnisse['wmTeamA']; ?>
              </td>
                <td>
                  <?php echo $row_WMErgebnisse['wmTeamB']; ?>
              </td>
                <td>
                  <?php echo $row_WMErgebnisse['wmSpieltag']; ?>
              </td>
                <td>
                  <input type="text" name="wmErgebnis[ErgA][]" size="1" style="width:40" 
                  maxlength="2" value="<?php echo $row_WMErgebnisse['wmToreA']; ?>" />
              </td>
                <td>
                  <input type="text" name="wmErgebnis[ErgB][]" size="1" style="width:40" 
                  maxlength="2" value="<?php echo $row_WMErgebnisse['wmToreB']; ?>" />
              </td>
              <td>
                  <label>
                      <input <?php if (!(strcmp($row_WMErgebnisse['wmplayed'],"1"))) 
                              {echo "checked=\"checked\"";} ?> 
                      type="checkbox" name="checkbox1" id="Played" />
                  </label>
              </td>
              
              <?php $ergebnis1 = (int) isset($_POST["checkbox1"]);?>
              
              <input type="hidden" name="wmErgebnis[Played][]" size="1" style="width:40" 
                  maxlength="2" value="<?php echo $ergebnis1; ?>" />
          </tr>
      <?php     } 
           
           while ($row_WMErgebnisse = mysql_fetch_assoc($WMErgebnisse)); ?>
        </table>
        
        <input type="submit" name="speichern" id="speichern" value="speichern" />
        <p></p>
      </form>
      Die Ausgabe im Browser:

      UPDATE

      Array (
      [SpielID] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 )
      [ErgA] => Array ( [0] => 3 [1] => 3 [2] => 1 [3] => 4 [4] => 5 [5] => 4 [6] => 1 [7] => 1 )
      [ErgB] => Array ( [0] => 0 [1] => 0 [2] => 2 [3] => 1 [4] => 6 [5] => 5 [6] => 7 [7] => 1 )
      [Played] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 ) )

      Ergebnis gespeichert!

      Ich habe jetzt ein Array, wie ich es haben möchte, allerdings sind die Werte im Feld "Played" immer 0, egal ob ich die Checkbox angeklickt habe oder nicht.
      Was habe ich falsch gemacht?

      Gruss
      Markus
      Zuletzt geändert von mark2911; 12.05.2010, 23:21.

      Kommentar


      • #4
        Ich kann nicht erkennen wo die besagte Ausgabe herkommen soll.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Sorry, habe ich nicht wiederholt. Ist mein Update-Code vom 1. Post.

          PHP-Code:
           <?php }    

          /* Warteschleife, bis Tippformular abgesendet wurde */
          if (isset($_POST['wmErgebnis'])) 
          {    
          /* UPDATE CODE */    
                  
          echo ("UPDATE");
                  
          $WMErg=$_POST['wmErgebnis'];
                  
          print_r($_POST['wmErgebnis']);
                     foreach(
          $WMErg['SpielID'] as $key => $dummy)
                  {
                      
          mysql_select_db($database_wm2010$wm2010);
                      
          $updateErg sprintf("
                                                 UPDATE 
                                                  wmspielplan SET wmToreA=%s, wmToreB=%s, wmplayed=%s
                                              WHERE 
                                                  wmSpielID=%s"
          ,    
                                                    
          GetSQLValueString($WMErg['ErgA'][$key], "int"),    
                                                    
          GetSQLValueString($WMErg['ErgB'][$key], "int"),
                                                    
          GetSQLValueString($WMErg['SpielID'][$key], "int"),
                                                    
          GetSQLValueString($WMErg['Played'][$key], "int")
                                                    );
                      
          mysql_query($updateErg$wm2010);                                                
                  }
                  echo (
          "Ergebnis gespeichert!");
          }
          ?>

          Kommentar


          • #6
            Ich seh grad nicht mehr durch. Ist das immer dieselbe Datei?
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Ja, ist immer dieselbe Datei.

              Kommentar


              • #8
                Kannst du die in deinem ersten Beitrag mal so bearbeiten, dass man sie im Ganzen sieht?
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  So wie die da steht, ist sie komplett. Erst das Eingabeformular, dann der PHP Code für's Update der MySQL Datenbank.

                  Ausser Du möchtest noch die SQL Abfrage am Anfang sehen.

                  Komplette Datei:
                  HTML-Code:
                  <?php
                  /* WMErgebnisse für Spielplan Formular */
                  $colname_WMErgebnisse = "-1";
                  if (isset($_POST['WMSpieltag_Auswahl'])) 
                      {
                          $colname_WMErgebnisse = $_POST['WMSpieltag_Auswahl'];
                      }
                  mysql_select_db($database_wm2010, $wm2010);
                  $query_WMErgebnisse = sprintf("
                                  SELECT 
                                      wmSpielID, wmSpielDatum, wmSpielort, wmTeamA, wmTeamB, wmSpieltag, wmToreA, wmToreB, wmplayed 
                                  FROM 
                                      wmspielplan 
                                  WHERE 
                                      wmSpieltag = %s 
                                  ORDER BY 
                                      wmSpielID ASC", 
                                          GetSQLValueString($colname_WMErgebnisse, "text"));
                  
                  $WMErgebnisse = mysql_query($query_WMErgebnisse, $wm2010) or die(mysql_error());
                  $row_WMErgebnisse = mysql_fetch_assoc($WMErgebnisse);
                  $totalRows_WMErgebnisse = mysql_num_rows($WMErgebnisse);
                  ?>
                  
                  
                  <form id="WMErgebnisse" name="WMErgebnisse" method="post" action="WMErgebnisse.php">
                    <p>&nbsp;</p>
                    <table border="1">
                      <tr>
                          <td>wmTeamA</td>
                          <td>wmTeamB</td>
                          <td>wmSpieltag</td>
                          <td>wtTippA</td>
                          <td>wtTippB</td>
                          <td>Pl</td>
                      </tr>
                  <?php do { ?>
                      <tr>
                          <input type="hidden" name="wmErgebnis[SpielID][]" size="1" style="width:40" 
                              maxlength="2" value="<?php echo $row_WMErgebnisse['wmSpielID']; ?>" />
                            <td>
                              <?php echo $row_WMErgebnisse['wmTeamA']; ?>
                          </td>
                            <td>
                              <?php echo $row_WMErgebnisse['wmTeamB']; ?>
                          </td>
                            <td>
                              <?php echo $row_WMErgebnisse['wmSpieltag']; ?>
                          </td>
                            <td>
                              <input type="text" name="wmErgebnis[ErgA][]" size="1" style="width:40" 
                              maxlength="2" value="<?php echo $row_WMErgebnisse['wmToreA']; ?>" />
                          </td>
                            <td>
                              <input type="text" name="wmErgebnis[ErgB][]" size="1" style="width:40" 
                              maxlength="2" value="<?php echo $row_WMErgebnisse['wmToreB']; ?>" />
                          </td>
                          <td>
                              <label>
                                  <input <?php if (!(strcmp($row_WMErgebnisse['wmplayed'],"1"))) 
                                          {echo "checked=\"checked\"";} ?> 
                                  type="checkbox" name="checkbox1" id="Played" />
                              </label>
                          </td>
                          
                          <?php $ergebnis1 = (int) isset($_POST["checkbox1"]);?>
                          
                          <input type="hidden" name="wmErgebnis[Played][]" size="1" style="width:40" 
                              maxlength="2" value="<?php echo $ergebnis1; ?>" />
                      </tr>
                  <?php     } 
                       
                       while ($row_WMErgebnisse = mysql_fetch_assoc($WMErgebnisse)); ?>
                    </table>
                    
                    <input type="submit" name="speichern" id="speichern" value="speichern" />
                    <p></p>
                  </form>
                  
                    <?php }    
                  
                  /* Warteschleife, bis Tippformular abgesendet wurde */
                  if (isset($_POST['wmErgebnis'])) 
                  {    
                  /* UPDATE CODE */    
                          echo ("UPDATE");
                          $WMErg=$_POST['wmErgebnis'];
                          print_r($_POST['wmErgebnis']);
                             foreach($WMErg['SpielID'] as $key => $dummy)
                          {
                              mysql_select_db($database_wm2010, $wm2010);
                              $updateErg = sprintf("
                                                         UPDATE 
                                                          wmspielplan SET wmToreA=%s, wmToreB=%s, wmplayed=%s
                                                      WHERE 
                                                          wmSpielID=%s",    
                                                            GetSQLValueString($WMErg['ErgA'][$key], "int"),    
                                                            GetSQLValueString($WMErg['ErgB'][$key], "int"),
                                                            GetSQLValueString($WMErg['SpielID'][$key], "int"),
                                                            GetSQLValueString($WMErg['Played'][$key], "int")
                                                            );
                              mysql_query($updateErg, $wm2010);                                                
                          }
                          echo ("Ergebnis gespeichert!");
                  }
                  ?>
                  <p>&nbsp;</p>

                  Kommentar


                  • #10
                    Was bezweckst du denn mit diesem Stück Code?

                    PHP-Code:
                            <td>
                                <label>
                                    <input <?php if (!(strcmp($row_WMErgebnisse['wmplayed'],"1"))) 
                                            {echo 
                    "checked=\"checked\"";} ?> 
                                    type="checkbox" name="checkbox1" id="Played" />
                                </label>
                            </td>
                            
                            <?php $ergebnis1 = (int) isset($_POST["checkbox1"]);?>
                            
                            <input type="hidden" name="wmErgebnis[Played][]" size="1" style="width:40" 
                                maxlength="2" value="<?php echo $ergebnis1?>" />
                    $ergebnis1 ist doch immer erst beim nächsten Absenden da, oder ist das Absicht?
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar


                    • #11
                      Zitat von AmicaNoctis Beitrag anzeigen
                      Was bezweckst du denn mit diesem Stück Code?

                      PHP-Code:
                              <td>
                                  <label>
                                      <input <?php if (!(strcmp($row_WMErgebnisse['wmplayed'],"1"))) 
                                              {echo 
                      "checked=\"checked\"";} ?> 
                                      type="checkbox" name="checkbox1" id="Played" />
                                  </label>
                              </td>
                              
                              <?php $ergebnis1 = (int) isset($_POST["checkbox1"]);?>
                              
                              <input type="hidden" name="wmErgebnis[Played][]" size="1" style="width:40" 
                                  maxlength="2" value="<?php echo $ergebnis1?>" />
                      $ergebnis1 ist doch immer erst beim nächsten Absenden da, oder ist das Absicht?
                      Hmm, da hast Du recht. Ich möchte eigentlich im Array wmErgebnis[Played][] den Status (0 oder 1) der Checkbox für die 8 Spiele speichern. Das Formular läuft ja in einer Schleife.
                      Das bedeutet ja, dass die Überprüfung erst nach dem Senden des Formulars erfolgen kann. Aber dann erhalte ich ja für die 8 Spiele nur die Werte (1) für die gecheckten Boxen.

                      Kann ich eigentlich auch einen Snapshot in einem Beitrag posten?

                      Kommentar


                      • #12
                        So sieht mein Formular im Browser aus

                        Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Formular.jpg
Ansichten: 1
Größe: 61,5 KB
ID: 1028118

                        Kommentar


                        • #13
                          gleiches Problem, und ich raffs nicht



                          Hi,
                          habe dasselbe Problem mit den checkboxen, und habe diverse Lösungsweg bereits getestet, leider ohne Erfolg.
                          Ich habe eine **************** Onlineliga ****************-funbolzer.de und würde diese Variante für die freigabe der einzelnen Ligaspieltage benötigen siehe Bild.

                          [IMG]http://www.****************-funbolzer.de/images/freigeben.gif[/IMG]

                          Leider werden die Checkboxen nicht richtrig übergeben.
                          Wenn ich z.b Spieltag 6 ankreuze wird nur der Wert der Checkbox von Spieltag 5 übergeben.
                          Kreuze ich beide an, werden auch beide übergeben.

                          Siehe Bild

                          [IMG]http://www.****************-funbolzer.de/images/array_freigeben.gif[/IMG]

                          Einen Lösungsvorschlg mit der Bennenung name=\status[$i] habe ich auch getestet, danach wird aber immer nur Array[2] angezeigt, egal ob eine checkbox oder beide aktiviert sind.

                          Dies ist der Code meiner Checkbox.

                          PHP-Code:
                          PHP-Code:
                              while($row mysql_fetch_array($zeige_gesperrte_spieltage))
                               {
                           
                               
                          $id $row["id"];
                               
                          $gameday $row["gameday"];
                               
                          $status $row["status"];  
                           
                               echo 
                          "<tr>";
                               echo 
                          "<td align=\"left\"><input type=\"hidden\" name=\"id[]\" readonly value=\"$id\" size=\"5\"/></td>";
                               echo 
                          "<td align=\"center\"><b>SPIELTAG : </b><input type=\"text\" name=\"gameday[]\" readonly value=\"$gameday\" size=\"2\"/</td>";
                               echo 
                          "<td align=\"left\"><input type=\"checkbox\" name=\"status[]\" value=\"1\" /></td>";
                               
                          //echo "<td align=\"left\"><select name=\"status[]\" <option>$status</option><option>-</option><option>0</option><option>1</option>/></td>";
                              
                          echo "</tr>";
                               } 
                          und hier das verabeitende Formular:

                          PHP-Code:
                            {
                            
                          //daten vom league_admin_gameday_open_form formular
                            
                          $id $_POST["id"];
                            
                          $liga $_POST["liga"];
                            
                          $gameday $_POST["gameday"];
                            
                          $status $_POST["status"];
                           
                            
                          print_r ($id);
                            
                          print_r ($status);
                            
                          print_r ($gameday);
                           
                            for(
                          $i=0$i<count($id); $i++)
                            {
                            
                          //$sqlab_update = mysql_query("UPDATE fmo_ligen_spieltage SET status = '$status[$i]' WHERE id = '$id[$i]'") OR die(mysql_error());  
                            //$sqlab_update1 = mysql_query("UPDATE fmo_ligen_spielplan SET status = '$status[$i]' WHERE status <> '2' AND status_league = 'open' AND gameday = '$gameday[$i]' AND liga = '$liga'") OR die(mysql_error()); 
                            


                          Ich hab echt kein Plan mehr, und wäre super für eure Hilfe dankbar
                          Gruß
                          Ingo
                          Zuletzt geändert von AmicaNoctis; 28.06.2011, 10:37. Grund: URL entlinkt

                          Kommentar


                          • #14
                            Hallo,

                            wie bereits gesagt: ausgeschaltete CHeckboxen werden nie übermittelt, also musst du serverseitig selbst dafür sorgen, die anderen mit false oder ähnlichem vorzubelegen.

                            Gruß,

                            Amica
                            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                            Super, danke!
                            [/COLOR]

                            Kommentar


                            • #15
                              Danke für deine schnelle Antwort.

                              Leider komme ich mir gerade vor, als stehe ich mit beiden Beinen auf nem Schlauch und sitze mit meinem Hintern auf der Leitung.

                              Kannst du mir direkt helfen?
                              Mit nem konkreten Lösungsweg.

                              Sorry, muß die Hitze sein aber mein Kopf ist gerade leer.

                              Danke

                              Kommentar

                              Lädt...
                              X