| SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden. |
 |

27-07-2010, 20:43
|
|
Blaxmon
Registrierter Benutzer
|
|
Registriert seit: Jul 2010
Beiträge: 4
|
|
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!
|

27-07-2010, 21:15
|
|
streuner
Registrierter Benutzer
|
|
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
|
|
Ä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 ---"
|

27-07-2010, 21:55
|
|
Blaxmon
Registrierter Benutzer
|
|
Registriert seit: Jul 2010
Beiträge: 4
|
|
Hallo Streuner,
erstmal danke für die schnelle Reaktion.
Zitat:
Zitat von streuner
Ä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:
Zitat von streuner
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:
Zitat von streuner
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++; }
?>
|

27-07-2010, 22:06
|
|
sili
Registrierter Benutzer
|
|
Registriert seit: Feb 2004
Beiträge: 115
|
|
Die Zeile
Zitat:
Zitat von Blaxmon
PHP-Code:
$id=$sql_spieler[id];
|
ist doppelt falsch und sollte so
PHP-Code:
$id=$show_spieler['id'];
lauten
|

27-07-2010, 22:24
|
|
Blaxmon
Registrierter Benutzer
|
|
Registriert seit: Jul 2010
Beiträge: 4
|
|
Oh mein Gott... die Zeile hatte ich zwischendurch mal kurz umgestrickt...
Das tut schon weh - irgendwie, irgendwo...
Danke!
|

27-07-2010, 23:29
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
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
__________________
Wer LESEN kann, ist klar im Vorteil!
Geändert von eagle275 (27-07-2010 um 23:39 Uhr)
|

28-07-2010, 17:40
|
|
Blaxmon
Registrierter Benutzer
|
|
Registriert seit: Jul 2010
Beiträge: 4
|
|
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...
|

28-07-2010, 20:06
|
|
sili
Registrierter Benutzer
|
|
Registriert seit: Feb 2004
Beiträge: 115
|
|
Zitat:
Zitat von Blaxmon
@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
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|