Problem mit mysql UPDATE
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
altbekanntes problem
ausgeben
code
datenbank
datensatz
ende
fehler
header
hilfe
klein schreibung
liefern
machen
message
problem
spalten
tabelle
tag
update
url
zeile
-
Hallo.
Ich hab schon wieder ein neues tag/problem">Problem...
Und zwar funktioniert UPDATE in einer Datei nicht, was ich mir aber wirklich nicht erklären kann, da ich den gesamten Codeteil aus einer anderen kopiert habe, die ich schon vorher geschrieben habe und in der es einwandfrei funktioniert....
$code = $_SESSION['DC']; $findlink = "SELECT * FROM $dbtable WHERE code = '$code'"; $getlink = mysql_query($findlink); if ($getlink == false) { $errmsg = mysql_error(); $subject = "MySQL-ERROR"; $message = $errmsg; mail($to, $subject, $message); mysql_close(); echo $error; } else { $link = mysql_fetch_array($getlink); $url = $link['link1']; $change = "UPDATE dcodes_LOG SET DOWNLOAD1 = '$url' WHERE CODE = '$code'"; $update = mysql_query($change); if ($update == false) { $errmsg = mysql_error(); $subject = "MySQL-ERROR"; $message = $errmsg; mail($to, $subject, $message); } header('Location: '.$url); mysql_close();
Nämlich funktioniert von $change bis zu header anscheinend nichts (header funktioniert). Ich bekomme keine Mail ($to ist schon vorher definiert), es wird kein Fehler ausgegeben (sogar wenn ich error_reporting(E_ALL) aktiviere) und der Link wird nicht in die Datenbank geschrieben.
Hat jemand eine Erklärung? Danke im Voraus!
Beitrag zuletzt geändert: 8.6.2012 4:04:36 von yorecords -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hast du schonmal versucht dir die einzelnen Teile ausgeben zu lassen?
Ein altbekanntes Problem, was mir als erstes eingefallen ist, ist das "Headers already sent"-Problem.
Die Funktion header() kann nicht verwendet werden, wenn du davor bereits Ausgaben erzeugt hast (echo, Leerzeichen vor dem <?php-Tag oder wenn mehrere Files verwendet werden auch nach einem ?>-Tag etc.).
Der zweite Ansatz (erscheint mir wahrscheinlicher) wäre: Ist $code vielleicht leer oder enthält einen Wert, der nicht in der Datenbank steht? UPDATE modifiziert ja nur etwas, wenn es einen oder mehrere Einträge in der Tabelle findet, auf die die WHERE-Condition zutrifft.
Es wäre also denkbar, dass der UPDATE ausgeführt wird, ohne einen Fehler zu liefern und daher natürlich auch keine Mail verschickt wird.
lg Vex
Beitrag zuletzt geändert: 8.6.2012 7:19:06 von vexi -
Hast du schon in der Datenbank nachgeschaut ob UPDATE wirklich nichts macht?
Ansonsten:$findlink = "SELECT * FROM $dbtable WHERE code = '$code'";
Wurde davor
auch definiert?$dbtable
In deinem Code fehlt ein
am Ende...}
Und wenn
funktioniert müsste dein Update auch ausgeführt worden sein; dein Mail würdest du bekommen, wenn UPDATE oder SELECT fehlschlägt.header()
Schau also nochmal in der Datenbank ob sich da was ändert (phpMyAdmin). -
Du hast einmal
SELECT ... WHERE code = '$code'
und dann wieder
UPDATE ... WHERE CODE = '$code'
könnte es sein,
dass auch die Groß-/Klein-Schreibung bei Spalten-Namen entscheidend ist ?!
also entweder CODE oder code nehmen, je nachdem wie in Tabelle definiert.
-
hackyourlife schrieb:
Hast du schon in der Datenbank nachgeschaut ob UPDATE wirklich nichts macht?
Ansonsten:$findlink = "SELECT * FROM $dbtable WHERE code = '$code'";
Wurde davor
auch definiert?$dbtable
In deinem Code fehlt ein
am Ende...}
Und wenn
funktioniert müsste dein Update auch ausgeführt worden sein; dein Mail würdest du bekommen, wenn UPDATE oder SELECT fehlschlägt.header()
Schau also nochmal in der Datenbank ob sich da was ändert (phpMyAdmin).
Klar hab ich nachgeschaut ob es wirklich nichts macht.. Ja $dbtable wurde definiert. Und am ende des Codes fehlt da einiges, ist aber nicht relevant.Header funktioniert, UPDATE aber nicht. Wie gesagt: Sonst funktioniert alles. Und ich hab gestern 1000 Mal in die Datenbank geschaut. Da tut sich nichts.
guteseiten schrieb:
Du hast einmal
SELECT ... WHERE code = '$code'
und dann wieder
UPDATE ... WHERE CODE = '$code'
könnte es sein,
dass auch die Groß-/Klein-Schreibung bei Spalten-Namen entscheidend ist ?!
also entweder CODE oder code nehmen, je nachdem wie in Tabelle definiert.
Das sind 2 verschiedene Spalten in 2 verschiedenen Tabellen.
vexi schrieb:
Hast du schonmal versucht dir die einzelnen Teile ausgeben zu lassen?
Ein altbekanntes Problem, was mir als erstes eingefallen ist, ist das "Headers already sent"-Problem.
Die Funktion header() kann nicht verwendet werden, wenn du davor bereits Ausgaben erzeugt hast (echo, Leerzeichen vor dem <?php-Tag oder wenn mehrere Files verwendet werden auch nach einem ?>-Tag etc.).
Der zweite Ansatz (erscheint mir wahrscheinlicher) wäre: Ist $code vielleicht leer oder enthält einen Wert, der nicht in der Datenbank steht? UPDATE modifiziert ja nur etwas, wenn es einen oder mehrere Einträge in der Tabelle findet, auf die die WHERE-Condition zutrifft.
Es wäre also denkbar, dass der UPDATE ausgeführt wird, ohne einen Fehler zu liefern und daher natürlich auch keine Mail verschickt wird.
lg Vex
Wie gesagt: header funktioniert. Das mit $code werd ich aber am besten noch einmal überprüfen, vielleicht stimmt ja irgendwas mit der Session nicht... Daran hab ich noch nicht gedacht. -
Wenn du sagst dass nichts passiert kannst du ja mal prüfen ob die richtige Zeile upgedated werden würde...
$change = "SELECT * FROM dcodes_LOG WHERE CODE = '$code'";
Lass dir mal das Ergebnis davon ausgeben... das zeigt dir an welche Zeilen überhaupt upgedated werden würden.
Wenn hier etwas zurückkommt müsste auch das Update erfolgreich sein, wenn hier 0 Zeilen zurück kommen hast du den Fehler gefunden (WHERE-Klausel). -
Ich glaub es einfach nicht....
Gestern bin ich stundenlang dabeigesessen und hab alles versucht, und heute gehts auf einmal.... Ich hab nichts verändert aber es funktioniert jetzt....
Jedenfalls vielen Dank für eure Hilfe!
Edit:
Und schon wieder funktioniert es nicht mehr.. Ich versteh das nicht.. Wieso funktioniert es nur wenn es Lust dazu hat?
Beitrag zuletzt geändert: 9.6.2012 0:04:45 von yorecords -
Lass dir mal $change ausgeben und prüfe dann, ob der überhaupt einen zu aktualisierenden Datensatz finden kann.
-
vexi schrieb:
Lass dir mal $change ausgeben und prüfe dann, ob der überhaupt einen zu aktualisierenden Datensatz finden kann.
Das Problem ist gelöst.. Der Fehler lag am Tabellentyp...
Danke für eure Hilfe.. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage