Archiv verlassen und diese Seite im Standarddesign anzeigen : 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.
// 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!
streuner 27-07-2010, 22:15 Ä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
<?
(...)
$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
Hallo Streuner,
erstmal danke für die schnelle Reaktion.
Ä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.
Ansonsten solltest Du ein korrektes Debuuging nutzen um Fehler zu finden.
Das da wäre? :confused: Wenn ich bewusst Fehler in die Zeile einbaue, funktioniert das wunderbar mit Fehlernummer, Beschreibung und allem...
Anbei: Warum hast Du
<?
(...)
$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:
<?
$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++;
}
?>
Die Zeile
$id=$sql_spieler[id];
ist doppelt falsch und sollte so
$id=$show_spieler['id'];
lauten ;)
Oh mein Gott... die Zeile hatte ich zwischendurch mal kurz umgestrickt... :eek:
Das tut schon weh - irgendwie, irgendwo...
Danke!:jo:
eagle275 28-07-2010, 00:29 da irrst du ein wenig Blaxmon ...
wenn du mit
$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
Danke, danke. Läuft alles. Nach dem Hinweis von Sili hätte ich das vielleicht ausdrücklicher hinschreiben sollen: Problem gelöst! :danke:
@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...
@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 (http://linkio.us/txrFHF) verwechselt. Das hat aber nichts mit PHP Variablen zu tun und du solltest dich nochmals einlesen ;)
|
|