MySQL Update Problem

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

  • MySQL Update Problem

    Folgendes Problem in Stichworten:
    - Ich öffne eine Datenbank/Tabelle und lese Daten aus
    - Mit diesen Daten errechne ich bestimmte andere Daten
    (so weit so gut, funktioniert alles wunderbar wie Testausgaben gezeigt haben)
    - Diese Daten möchte ich nun wahlweise in diese oder in eine andere Tabelle (beides probiert, beides funktioniert nicht) schreiben (via Update)

    Mein Problem: Ich weiß einfach nicht weiter (warum es nicht funktioniert).
    Und die Fehlermeldung ist einfach nur für jeden Durchgang " : ", sprich leer.

    PHP-Code:
    // Datenbank 1 (Spiele) geöffnet und Update-Befehl für 2 (Stat) definiert:
    <?
    (...)
    $sql_spieler=mysql_query("SELECT * FROM Spiele");
    $up="UPDATE Stat SET Schnitt='$schnitt', Min='$min', Max='$max', Spiele='$spiele' WHERE id='$id'";
    ?>
    <?    
        $count=1; // Zählt Anzahl der Datensätze

        // Datenquelle durchlaufen und einzelne Werte errechnen:
        while ($show_spieler=mysql_fetch_array($sql_spieler)){
            $id=$sql_spieler[id];
            $schnitt;
            $spiele=0;
            $min=300;
            $max=0;
            $summe=0;
            // kleine Schleife, funktioniert, nur der Vollständigkeit halber drin gelassen - kann überlesen werden
            for($lauf=1; $lauf<37; $lauf++){
               $temp = $show_spieler[$lauf];
               if($temp!=0){ $spiele++; }
               $summe += $temp;
               if($max < $temp){ $max = $temp; }
               if($min > $temp && $temp != 0){ $min = $temp; }
            }
            $schnitt = $summe / $spiele;

            // Update ausführen
            $update = mysql_query($up);
            echo mysql_errno($update) . ": " . mysql_error($update). "\n";

            $count++;
        }

    ?>
    Ich habe den Code so gering entfremdet wie gerade nötig (im Prinzip nur den Bereich mit dem Zugang zu der (Online-)Datenbank).

    Der Fehler muss in dem zitierten Bereich stecken. Bin um jede Hilfe / jeden Ansatz dankbar!

  • #2
    Ähm...wenn ich das richtig sehe, erstellst du den Update Befehl mit Variablen, die Du erst weiter unten befüllst. Wen dem so ist, haben wir schon mal das Problem. Ansonsten solltest Du ein korrektes Debuuging nutzen um Fehler zu finden.

    Anbei: Warum hast Du

    PHP-Code:
    <?
    (...)
    $sql_spieler=mysql_query("SELECT * FROM Spiele");
    $up="UPDATE Stat SET Schnitt='$schnitt', Min='$min', Max='$max', Spiele='$spiele' WHERE id='$id'";
    ?>
    <?
    PHP Code geschlossen und direkt danach geöffnet?

    mfg streuner
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
    der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

    "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

    Kommentar


    • #3
      Hallo Streuner,

      erstmal danke für die schnelle Reaktion.

      Zitat von streuner Beitrag anzeigen
      Ähm...wenn ich das richtig sehe, erstellst du den Update Befehl mit Variablen, die Du erst weiter unten befüllst. Wen dem so ist, haben wir schon mal das Problem.
      Das sollte eigentlich unproblematisch sein. Korrigier mich bitte, wenn ich irre - aber soweit ich das gelernt habe erstelle ich da im Prinzip nichts anderes als einen String, der erst durch das Einsetzen unten mit Sinnhaftigkeit befüllt wird (und sich an der Stelle die Variablen holt). Das ist mir als "eleganterer Weg" beigebracht worden, insbesondere sollte man den Befehl mal häufiger benutzen...
      Ich habe den Befehl auch unten (ohne den Umweg) eingesetzt gehabt und einzelne Variablen durch Default-Werte ersetzt. Leider blieb beides ohne Erfolg.

      Zitat von streuner Beitrag anzeigen
      Ansonsten solltest Du ein korrektes Debuuging nutzen um Fehler zu finden.
      Das da wäre? Wenn ich bewusst Fehler in die Zeile einbaue, funktioniert das wunderbar mit Fehlernummer, Beschreibung und allem...

      Zitat von streuner Beitrag anzeigen
      Anbei: Warum hast Du

      PHP-Code:
      <?
      (...)
      $sql_spieler=mysql_query("SELECT * FROM Spiele");
      $up="UPDATE Stat SET Schnitt='$schnitt', Min='$min', Max='$max', Spiele='$spiele' WHERE id='$id'";
      ?>
      <?
      PHP Code geschlossen und direkt danach geöffnet?

      mfg streuner

      Das ist einfach erklärt, das sind zwei Code-Blöcke aus der Datei. Dazwischen liegt u.a. ein Abschnitt mit HTML-Tags, der mir die Seite auf dem Server ansehnlich formatiert...

      Entsprechend deines ersten Ansatzes habe ich hier ein Beispiel, wie es leider auch nicht funktioniert:

      PHP-Code:
      <?
          $sql_spieler=mysql_query("SELECT * FROM Spiele");

          $count=1;
          while ($show_spieler=mysql_fetch_array($sql_spieler)){
              $id=$sql_spieler[id];
              $schnitt;
              $spiele=0;
              $min=300;
              $max=0;
              $summe=0;
              for($lauf=1; $lauf<37; $lauf++){
                 $temp = $show_spieler[$lauf];
                 if($temp!=0){ $spiele++; }
                 $summe += $temp;
                 if($max < $temp){ $max = $temp; }
                 if($min > $temp && $temp != 0){ $min = $temp; }
              }
              $schnitt = $summe / $spiele;
              $schn = number_format($schnitt, 2, ',', ' ');
              
              // Variablen vor Ort wo sie auf jeden Fall als deklariert gelesen werden + Defaultbelegung als Test (Min='83')
              $update = mysql_query("UPDATE Stat SET Schnitt='$schnitt', Min='83', Max='$max', Spiele='$spiele' WHERE id='$id'");
              echo mysql_errno($update) . ": " . mysql_error($update). "\n";
              $count++;
          }

      ?>

      Kommentar


      • #4
        Die Zeile
        Zitat von Blaxmon Beitrag anzeigen
        PHP-Code:
        $id=$sql_spieler[id]; 
        ist doppelt falsch und sollte so
        PHP-Code:
        $id=$show_spieler['id']; 
        lauten

        Kommentar


        • #5
          Oh mein Gott... die Zeile hatte ich zwischendurch mal kurz umgestrickt...

          Das tut schon weh - irgendwie, irgendwo...

          Danke!

          Kommentar


          • #6
            da irrst du ein wenig Blaxmon ...

            wenn du mit
            PHP-Code:
            $up="UPDATE Stat SET Schnitt='$schnitt', Min='$min', Max='$max', Spiele='$spiele' WHERE id='$id'"
            einen Sql-String zusammenbaust, dann ist der statisch , und wird so verwendet, wie du ihn dort "oben" zusammenbastelst. Dies scheitert aber eigentlich daran, dass die verwendeten Variablen zu diesem Zeitpunkt noch unbekannt - und damit dann "leer" verwendet werden.

            Sowas sieht man dann recht deutlich, wenn du dir den SQL-String mittels echo kurz vor seiner Verwendung mal ausgeben lässt, ob er nämlich die erwarteten Werte enthält oder Blödsinn der Form "Where id='' ".....

            daher auch der "echo-debugger"^^

            ich bin mir eigentlich ziemlich sicher, dass bei dir genau dieser Fehler zuschlägt und deshalb das Schreiben in die Datenbank scheitert ...

            diese Where-Klausel wird bei keinem deiner Datensätze Erfolg haben - und die anderen Daten werden auch leer übergeben ....

            bau den String am besten "da unten" zusammen, wo du ihn auch brauchst - da sind dir nämlich die benötigten Werte für $id und so weiter bekannt
            Zuletzt geändert von eagle275; 27.07.2010, 23:39.
            [font=Verdana]
            Wer LESEN kann, ist klar im Vorteil!
            [/font]

            Kommentar


            • #7
              Danke, danke. Läuft alles. Nach dem Hinweis von Sili hätte ich das vielleicht ausdrücklicher hinschreiben sollen: Problem gelöst!


              @eagle275: Das mit dem String werde ich bei Gelegenheit noch mal testen, aber es ist sehr gut möglich, dass du da Recht hast. Momentan habe ich die Anweisung "vor Ort" platziert und die ursprüngliche Version noch nicht wieder getestet.
              Das Hauptproblem war natürlich die falsch initialisierte id...

              Kommentar


              • #8
                Zitat von Blaxmon Beitrag anzeigen
                @eagle275: Das mit dem String werde ich bei Gelegenheit noch mal testen, aber es ist sehr gut möglich, dass du da Recht hast.
                Es ist nicht nur möglich, dass er recht hat. Er hat ganz sicher recht

                Es kann aber sein, dass du das ganze mit sogenannten Prepared Statements verwechselt. Das hat aber nichts mit PHP Variablen zu tun und du solltest dich nochmals einlesen

                Kommentar

                Lädt...
                X