formulardaten sql update mit for schleife

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

  • formulardaten sql update mit for schleife

    Hallo zusammen,

    Problem: Ich erstelle ein Formular mit Hilfe einer For-Schleife. Anschließend wenn der Benutzer die Daten einträgt, sollen die Daten entsprechend per UPDATE in die Datenbank geschrieben werden

    Formular:
    PHP-Code:
    <?php
    error_reporting
    (E_ALL);

    require_once (
    'konfiguration.php');
    $db_link mysql_connect(MYSQL_HOSTMYSQL_BENUTZERMYSQL_KENNWORT);
    mysql_select_db(MYSQL_DATENBANK) or die("Auswahl der Datenbank fehlgeschlagen");

    $sqlab "SELECT Vname, Nname FROM spielerakt";
    // MySQL-Anweisung ausführen lassen
    $erg mysql_query($sqlab) or die("Anfrage fehlgeschlagen: " mysql_error());
    $num mysql_num_rows($erg);

    echo 
    "$num Datens&auml;tze gefunden<br><br>";

    mysql_query($sqlab);

    for (
    $i 0$i $num$i++) {

        
    $nn mysql_result($erg$i"Nname");
        
    $vn mysql_result($erg$i"Vname");
        
    //umlaute etc.
        
    $nn htmlentities($nn);
        
    $vn htmlentities($vn);

        echo 
    "<tr><td><input type=\"checkbox\" name=\"bool$i\" value=\"1\"</td>" .
        
    "<td><input readonly name=\"vname$i\" value=\"$vn\" size=\"14\"/></td>
                                    <td><input readonly name=\"nname
    $i\" value=\"$nn\" size=\"14\"/></td>
                                        <td><select name=\"tore
    $i\" size=\"1\">
                                            <option value=\"0\">0</option>
                                            <option value=\"1\">1</option><option value=\"2\">2</option><option value=\"3\">3</option>
                                            <option value=\"4\">4</option><option value=\"5\">5</option><option value=\"6\">6</option>
                                            <option value=\"7\">7</option><option value=\"8\">8</option><option value=\"9\">9</option>
                                        </select></td>
                                    
                                        <td><select name=\"min
    $i\" size=\"1\">
                                            <option value=\"0\">0</option>
                                            <option value=\"5\">5</option><option value=\"10\">10</option><option value=\"15\">15</option>
                                            <option value=\"20\">20</option><option value=\"25\">25</option><option value=\"30\">30</option>
                                            <option value=\"35\">35</option><option value=\"40\">40</option><option value=\"45\">45</option>
                                            <option value=\"50\">50</option><option value=\"55\">55</option><option value=\"60\">60</option>
                                            <option value=\"65\">65</option><option value=\"70\">70</option><option value=\"75\">75</option>
                                            <option value=\"80\">80</option><option value=\"85\">85</option><option value=\"90\">90</option>
                                        </select></td>
                                    
                                        <td><select name=\"vorlagen
    $i\" size=\"1\">
                                            <option value=\"0\">0</option>
                                            <option value=\"1\">1</option><option value=\"2\">2</option><option value=\"3\">3</option>
                                            <option value=\"4\">4</option><option value=\"5\">5</option><option value=\"6\">6</option>
                                            <option value=\"7\">7</option><option value=\"8\">8</option><option value=\"9\">9</option>
                                        </select></td>
                                    
                                        <td><select name=\"gelb
    $i\" size=\"1\">
                                            <option value=\"0\">0</option>
                                            <option value=\"1\">1</option>
                                        </select></td>
                                        
                                        <td><select name=\"gelbrot
    $i\" size=\"1\">
                                            <option value=\"0\">0</option>
                                            <option value=\"1\">1</option>
                                        </select></td>
                                        
                                        <td><select name=\"rot
    $i\" size=\"1\">
                                            <option value=\"0\">0</option>
                                            <option value=\"1\">1</option>
                                        </select></td>"
    ;

    }
    mysql_close($db_link);
    ?>
                    <td><input type="submit" name="gesendet" value="abschicken" /></td></tr>
        </table>
    </form>
    SQL UPDATE:
    PHP-Code:
    <?php


    if (array_key_exists('gesendet'$_POST)) {

        for (
    $k 0$k $num$k++) {

            if (
    array_key_exists("bool$k"$_POST)) { //falls checkbox angeklickt

                
    $min[$k] = $_POST["min$k"];
                
    $tore[$k] = $_POST["tore$k"];
                
    $vname[$k] = $_POST["vname$k"];
                
    $nname[$k] = $_POST["nname$k"];
                
    $vorlagen[$k] = $_POST["vorlagen$k"];
                
    $gelb[$k] = $_POST["gelb$k"];
                
    $gelbrot[$k] = $_POST["gelbrot$k"];
                
    $rot[$k] = $_POST["rot$k"];


                echo 
    $vname[$k] . " " $nname[$k] . " " $tore[$k] . " " $min[$k] . " " $vorlagen[$k] . " " $gelb[$k] . " " $rot[$k] . " " $gelbrot[$k] . "<br>";

                
                
    //Trage DS ein
                
    error_reporting(E_ALL);

                require_once (
    'konfiguration.php');
                
    $db_link1[$k] = mysql_connect(MYSQL_HOSTMYSQL_BENUTZERMYSQL_KENNWORT);
                
    mysql_select_db(MYSQL_DATENBANK) or die("Auswahl der Datenbank fehlgeschlagen");

                
    $sqlq[$k] = "update spielerakt set Minuten=Minuten+'$min[$k]', " .
                
    "Spiele=Spiele+1, Tore=Tore+'$tore[$k]', Vorlagen=Vorlagen+'$vorlagen[$k]'," .
                
    " Gelb=Gelb+'$gelb[$k]', Gelbrot=Gelbrot+'$gelbrot[$k]', " .
                
    "Rot=Rot+'$rot[$k]' WHERE Vname='$vname[$k]' AND Nname='$nname[$k]'";




                
    mysql_query($sqlq[$k]);

                
    $num mysql_affected_rows();
                
    mysql_close($db_link1[$k]);
                if (
    $num 0)
                    echo 
    "Es wurde 1 Datensatz hinzugef&uuml;gt.";
                else {
                    echo 
    "Es ist ein Fehler aufgetreten, ";
                    echo 
    "es wurde kein Datensatz hinzugef&uuml;gt";
                }
            } else { 
    //checkbox nicht angeklickt
                
    echo "<hr>";
            }
        }

    }
    ?>
    Wenn ich die Datenbankgeschichte weglasse in der unteren Schleife, dann gibt er mir alle Datensätze aus, die ich ausgewählt habe mit der checkbox.

    Sonst updated er mir nur den ersten Eintrag - es scheint so als ob er aus der schleife rausspringt nach dem ersten Eintrag und nicht wieder reingeht - er macht danach nicht mal mehr eine ausgabe.

    Bin ziemlicher Anfänger und hoffe, dass mir jmd auf die Sprünge helfen kann.
    Vielen Dank schonmal

    Gruß simay

  • #2
    Warum zum Geier machst du denn den Verbindungsaufbau jedes mal neu in der Schleife ...?
    Das ist absolut unperformanter Unfug - einmal vorher Verbindung herstellen, und anschließend Updates in Schleife ...
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      PHP-Code:
      if (array_key_exists('gesendet'$_POST)) {

          
      //Trage DS ein
          
      error_reporting(E_ALL);

          require_once (
      'konfiguration.php');
          
      $db_link1 mysql_connect(MYSQL_HOSTMYSQL_BENUTZERMYSQL_KENNWORT);
          
      mysql_select_db(MYSQL_DATENBANK) or die("Auswahl der Datenbank fehlgeschlagen");

          for (
      $k 0$k $num$k++) {

              if (
      array_key_exists("bool$k"$_POST)) { //falls checkbox angeklickt

                  
      $min[$k] = $_POST["min$k"];
                  
      $tore[$k] = $_POST["tore$k"];
                  
      $vname[$k] = $_POST["vname$k"];
                  
      $nname[$k] = $_POST["nname$k"];
                  
      $vorlagen[$k] = $_POST["vorlagen$k"];
                  
      $gelb[$k] = $_POST["gelb$k"];
                  
      $gelbrot[$k] = $_POST["gelbrot$k"];
                  
      $rot[$k] = $_POST["rot$k"];

                  echo 
      $vname[$k] . " " $nname[$k] . " " $tore[$k] . " " $min[$k] . " " $vorlagen[$k] . " " $gelb[$k] . " " $rot[$k] . " " $gelbrot[$k] ." ";

                  
      $sqlq "update spielerakt set Minuten=Minuten+'$min[$k]', " .
                  
      "Spiele=Spiele+1, Tore=Tore+'$tore[$k]', Vorlagen=Vorlagen+'$vorlagen[$k]'," .
                  
      " Gelb=Gelb+'$gelb[$k]', Gelbrot=Gelbrot+'$gelbrot[$k]', " .
                  
      "Rot=Rot+'$rot[$k]' WHERE Vname='$vname[$k]' AND Nname='$nname[$k]'";

                  
      //            column=".$array[0]['1'].";"
                  //            Zum Eintragen in Top100 Chronik            
                  //            $sqlab2 = "update spielerinsg set "Spiele=Spiele+1, Tore=Tore+'$tore[$k]' WHERE Vname='$vname[$k]' AND Nname='$nname[$k]'";

                  
      mysql_query($sqlq);

                  
      $cnt mysql_affected_rows();
                  
                  if (
      $cnt 0)
                      echo 
      "Es wurde 1 Datensatz hinzugef&uuml;gt.<br>";
                  else {
                      echo 
      "Es ist ein Fehler aufgetreten, ";
                      echo 
      "es wurde kein Datensatz hinzugef&uuml;gt<br>";
                  }
              } else { 
      //checkbox nicht angeklickt
                  
      echo "<hr>";
              }
          }
          
          
      mysql_close($db_link1);

      }
      ?> 
      Ok danke schonmal - jetzt wird nur der letzte ausgewählte Datensatz nicht in die Datenbank eingetragen. Also wenn ich 3 auswähle dann werden nur 2 eingetragen. Liegts an der Schleife? oder an $k

      gruß simay

      Kommentar


      • #4
        umlaute

        ok Problem gelöst.

        Ich kann nur noch keine Datensätze mit Umlaute eintragen. auf der db verwende ich für den Vornamen und für den Nachnamen: varchar utf_8_general ci.

        Jemand schnell ne Lösung parat? wär super danke

        Kommentar


        • #5
          Ich habs jetzt nur überflogen, aber schöner wäre es, die Arrays direkt im HTML zu deifnieren (name="tore[0]"). Dann kannst du dir schon einige Zuweisungen ersparen.

          Woher kommt $num und ist num vielleicht ne Nummer zu klein?

          Hast du mal Testausgaben gemacht? Welche Daten wurden gesendet (empfangen), was hast du damit gemacht, wie oft wird die schleife durchlaufen, etc...

          EDIT:
          ok Problem gelöst.
          Und wie?

          Aktuellen Stand posten! Aktuelles Problem posten!

          Kommentar


          • #6
            Aktuelles Problem/Stand

            Beheben des Problems warum nur ein Datensatz eingefügt wurde:
            PHP-Code:
            if (array_key_exists('gesendet'$_POST)) {

                
            //Trage DS ein
                
            error_reporting(E_ALL);

                require_once (
            'konfiguration.php');
                
            $db_link1 mysql_connect(MYSQL_HOSTMYSQL_BENUTZERMYSQL_KENNWORT);
                
            mysql_select_db(MYSQL_DATENBANK) or die("Auswahl der Datenbank fehlgeschlagen");

                for (
            $k 0$k $num$k++) {

                    if (
            array_key_exists("bool$k"$_POST)) { //falls checkbox angeklickt

                        
            $min[$k] = $_POST["min$k"];
                        
            $tore[$k] = $_POST["tore$k"];
                        
            $vname[$k] = $_POST["vname$k"];
                        
            $nname[$k] = $_POST["nname$k"];
                        
            $vorlagen[$k] = $_POST["vorlagen$k"];
                        
            $ein[$k] = $_POST["ein$k"];
                        
            $aus[$k] = $_POST["aus$k"];
                        
            $gelb[$k] = $_POST["gelb$k"];
                        
            $gelbrot[$k] = $_POST["gelbrot$k"];
                        
            $rot[$k] = $_POST["rot$k"];

                        echo 
            $vname[$k] . " " $nname[$k] . " " $tore[$k] . " " $min[$k] . " " $vorlagen[$k]. " " $ein[$k]. " " $aus[$k] . " " $gelb[$k] . " " $rot[$k] . " " $gelbrot[$k] ." ";

                        
            $sqlq "update spielerakt set Minuten=Minuten+'$min[$k]', " .
                        
            "Spiele=Spiele+1, Tore=Tore+'$tore[$k]', Vorlagen=Vorlagen+'$vorlagen[$k]'," .
                        
            " Gelb=Gelb+'$gelb[$k]', Ein=Ein+'$ein[$k]',Aus=Aus+'$aus[$k]' ,Gelbrot=Gelbrot+'$gelbrot[$k]', " .
                        
            "Rot=Rot+'$rot[$k]' WHERE Vname='$vname[$k]' AND Nname='$nname[$k]'";

                        
            //            column=".$array[0]['1'].";"
                        //            Zum Eintragen in Top100 Chronik            
                        //            $sqlab2 = "update spielerinsg set "Spiele=Spiele+1, Tore=Tore+'$tore[$k]' WHERE Vname='$vname[$k]' AND Nname='$nname[$k]'";

                        
            mysql_query($sqlq);

                        
            $cnt mysql_affected_rows();
                        
                        if (
            $cnt 0)
                            echo 
            "Es wurde 1 Datensatz hinzugef&uuml;gt.<br>";
                        else {
                            echo 
            "Es ist ein Fehler aufgetreten, ";
                            echo 
            "es wurde kein Datensatz hinzugef&uuml;gt<br>";
                        }
                    } else { 
            //checkbox nicht angeklickt
                        
            echo "<hr>";
                    }
                }
                
                
            mysql_close($db_link1);


            Lösung: Problem war wahrscheinlich, dass ich jeweils in der For-Schleife eine neue Verbindung zur Datenbank aufgebaut habe. Oben ist der korrekte Code dargestellt.



            Aktuelles Problem mit den Umlauten:
            Ich kann mehrere Datensätze hinzufügen allerdings nur diejenigen, die keine Umlaute enthalten. Es liegt sicherlich an irgend einer Kodierung. Auf der DB verwende ich wie oben erwähnt utf_8_general ci.
            Im html file charset=UTF-8.

            Folgende Ausgabe kommt, wenn ich Daten eintrage in mein Formularfeld:
            Claudio Hi 0 0 0 0 0 0 0 0 Es wurde 1 Datensatz hinzugefügt.
            Simon Hi 0 0 0 0 0 0 0 0 Es wurde 1 Datensatz hinzugefügt.
            Benjamin Jä 0 0 0 0 0 0 0 0 Es ist ein Fehler aufgetreten, es wurde kein Datensatz hinzugefügt
            Oliver K 0 0 0 0 0 0 0 0 Es wurde 1 Datensatz hinzugefügt.
            Wolfgang S 0 0 0 0 0 0 0 0 Es wurde 1 Datensatz hinzugefügt.

            Also es werden alle eingetragen nur die Datensätze mit Umlaute nicht...

            Frage: Liegt es vielleicht daran, dass zwischen der DB und dem HTML-file nochmal etwas umkodiert wird?

            Kommentar


            • #7
              Warum benutzt du nicht mysql_error()?

              Kommentar


              • #8
                keine ausgabe

                PHP-Code:
                echo "Error: "mysql_error(); 
                keine ausgabe

                Kommentar


                • #9
                  Kann nicht sein, es müsste ja mindestens "Error: "ausgegeben werden.

                  Außerdem, WO hast du den Code eingefügt?
                  Außerdem, ein UPDATE fügt keine Datensätze hinzu. Und wenn keine Zeile durch das Update betroffen wurde, heißt das noch lange nicht, dass etwas schief gelaufen ist.
                  Zuletzt geändert von TobiaZ; 18.07.2010, 13:32.

                  Kommentar


                  • #10
                    Zitat von TobiaZ Beitrag anzeigen
                    Kann nicht sein, es müsste ja mindestens "Error: "ausgegeben werden.

                    Außerdem, WO hast du den Code eingefügt?
                    Außerdem, ein UPDATE fügt keine Datensätze hinzu. Und wenn keine Zeile durch das Update betroffen wurde, heißt das noch lange nicht, dass etwas schief gelaufen ist.
                    Ja "Error:" wird ausgegeben.

                    PHP-Code:
                        for ($k 0$k $num$k++) {

                            if (
                    array_key_exists("bool$k"$_POST)) { //falls checkbox angeklickt

                                
                    $min[$k] = $_POST["min$k"];
                                
                    $tore[$k] = $_POST["tore$k"];
                                
                    $vname[$k] = $_POST["vname$k"];
                                
                    $nname[$k] = $_POST["nname$k"];
                                
                    $vorlagen[$k] = $_POST["vorlagen$k"];
                                
                    $ein[$k] = $_POST["ein$k"];
                                
                    $aus[$k] = $_POST["aus$k"];
                                
                    $gelb[$k] = $_POST["gelb$k"];
                                
                    $gelbrot[$k] = $_POST["gelbrot$k"];
                                
                    $rot[$k] = $_POST["rot$k"];

                                echo 
                    $vname[$k] . " " $nname[$k] . " " $tore[$k] . " " $min[$k] . " " $vorlagen[$k]. " " $ein[$k]. " " $aus[$k] . " " $gelb[$k] . " " $rot[$k] . " " $gelbrot[$k] ." ";

                                
                    $sqlq "update spielerakt set Minuten=Minuten+'$min[$k]', " .
                                
                    "Spiele=Spiele+1, Tore=Tore+'$tore[$k]', Vorlagen=Vorlagen+'$vorlagen[$k]'," .
                                
                    " Gelb=Gelb+'$gelb[$k]', Ein=Ein+'$ein[$k]',Aus=Aus+'$aus[$k]' ,Gelbrot=Gelbrot+'$gelbrot[$k]', " .
                                
                    "Rot=Rot+'$rot[$k]' WHERE Vname='$vname[$k]' AND Nname='$nname[$k]'";
                                echo 
                    "Error: "mysql_error();

                                
                    mysql_query($sqlq);
                                
                                
                    $cnt mysql_affected_rows();
                                echo 
                    "Error: "mysql_error();


                                if (
                    $cnt 0)
                                    echo 
                    "Es wurde 1 Datensatz hinzugef&uuml;gt.<br>";
                                else {
                                    echo 
                    "Es ist ein Fehler aufgetreten, ";
                                    echo 
                    "es wurde kein Datensatz hinzugef&uuml;gt<br>";
                                }
                            } else { 
                    //checkbox nicht angeklickt
                                
                    echo "<hr>";
                            }
                        } 
                    Also eingefügt in die For-schleife.

                    Und wenn keine Zeile durch das Update betroffen wurde, heißt das noch lange nicht, dass etwas schief gelaufen ist.
                    Richtig und ich glaub eben dass wegen dem ä die Zeile nicht betroffen ist.

                    Kommentar


                    • #11
                      Richtig und ich glaub eben dass wegen dem ä die Zeile nicht betroffen ist.
                      Dann überprüf' das doch einfach mal. Ist besser als wenn wir rumraten. Wir kennen nämlich weder die Daten in der Datenbank, noch können wir uns die Query ausgeben lassen.

                      Kommentar


                      • #12
                        Problem gelöst

                        Ok ich hab das Problem umgangen und eine viel elegantere richtige Lösung gefunden.

                        Anstatt im sql update statement Where Vname="vorname" und Nname ="Nachname" hab ich mir vorher die id des jeweiligen Datensatz geholt und das update statement nach der id angepasst also

                        Where id="idvonUser"

                        klappt wunderbar. Danke für die Hilfe

                        Kommentar

                        Lädt...
                        X