MySQL Update Problem

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

  • sili
    antwortet
    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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • eagle275
    antwortet
    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, 22:39.

    Einen Kommentar schreiben:


  • Blaxmon
    antwortet
    Oh mein Gott... die Zeile hatte ich zwischendurch mal kurz umgestrickt...

    Das tut schon weh - irgendwie, irgendwo...

    Danke!

    Einen Kommentar schreiben:


  • sili
    antwortet
    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

    Einen Kommentar schreiben:


  • Blaxmon
    antwortet
    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++;
        }

    ?>

    Einen Kommentar schreiben:


  • streuner
    antwortet
    Ä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

    Einen Kommentar schreiben:


  • Blaxmon
    hat ein Thema erstellt MySQL Update Problem.

    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!
Lädt...
X