Fehler bei Update und Delete
Thomas
- php
0 Philipp Hasenfratz0 Tobias Kloth
Hallo zusammen.
Ich bin gerade dabei, ein kleines Online-Game zu programmieren, aber bei der Abfrage des Ranges der einzelnen Benutzer wird der SQL-Update nicht ausgeführt.
Beim Anlegen eines neuen Users habe ich zudem einen Fehler beim Delete gefunden, den ich mir aber ebenfalls nicht erklären kann!
Zu meiner MySQL-Datenbank:
es geht um die Tabelle tabBenutzer, in der die Userdaten (Username, Mail, Rang, Kontostand, ...) gespeichert sind.
Primärschlüssel ist user (varchar[30], NOT NULL)
weiteres Attribut: rang (varchar[20], NULL)
Hier der Code zum Update des Rangs:
$update = "UPDATE tabBenutzer SET rang='$Rang' WHERE user='$Benutzer'";
$sqlupdate = mysql_db_query("Anmeldename", $update, $verbindung);
if(!$sqlupdate)
{
print "<h1>Fehler beim Update des Rangs!</h1>";
}
In $Benutzer ist der Username, in $Rang der zuvor ermittelte Rang abgelegt ($Rang stimmt, das habe ich überprüft; dort ist "Chef der Unterwelt" gespeichert).
Wo ist denn hier bitte der Fehler?
Und zu guter letzt noch der Code des fehlerhaften Delete:
$sqldelete = "DELETE * FROM tabBenutzer WHERE user = '$User'";
$loeschen = @mysql_db_query("Anmeldename", $sqldelete, $verbindung);
if (!$loeschen)
{
print "<p>Es ist ein SQL-Fehler aufgetreten.</p>";
print "<p>Die fehlerhaften Datensätze konnten nicht gelöscht werden!</p>";
}
exit;
In $User ist hier der Username gespeichert. Was habe ich da denn falsch gemacht?
Bitte helft mir, denn ich komme wirklich nicht mehr weiter!
Vielen Dank vorab für alle hilfreichen Beiträge,
Thomas
Halihallo Thomas
$update = "UPDATE tabBenutzer SET rang='$Rang' WHERE user='$Benutzer'";
$sqlupdate = mysql_db_query("Anmeldename", $update, $verbindung);
if(!$sqlupdate)
{
print "<h1>Fehler beim Update des Rangs!</h1>";
Benutze http://www.php.net/mysql_error um die _genaue_ Fehler-
ursache zu finden.
Wo ist denn hier bitte der Fehler?
Kann mehrere Ursachen haben, Klarheit verschafft anwenden von
mysql_error.
$sqldelete = "DELETE * FROM tabBenutzer WHERE user = '$User'";
Befasse dich mit der Syntax von DELETE:
http://dev.mysql.com/doc/mysql/en/DELETE.html
Was für einen Sinn soll die Nennung von Attributnamen bei DELETE
ergeben?
$loeschen = @mysql_db_query("Anmeldename", $sqldelete, $verbindung);
Fehlerbehandlung! - mysql_error ausgeben!
Viele Grüsse
Philipp
Benutze http://www.php.net/mysql_error um die _genaue_ Fehler-
ursache zu finden.
Mein Problem an der Sache ist, dass gar kein Fehler angezeigt wird. Der Update-Befehl wird aber dennoch nicht ausgeführt, denn in der Datenbank bleibt der Rang auf "Anfaenger"!
$sqldelete = "DELETE * FROM tabBenutzer WHERE user = '$User'";
Befasse dich mit der Syntax von DELETE:
http://dev.mysql.com/doc/mysql/en/DELETE.html
OK, der * muss weg
Was für einen Sinn soll die Nennung von Attributnamen bei DELETE
ergeben?
Was genau meinst du?
Vielen Dank schonmal für die Tipps,
Thomas
Halihallo Thomas
Mein Problem an der Sache ist, dass gar kein Fehler angezeigt wird. Der Update-Befehl wird aber dennoch nicht ausgeführt, denn in der Datenbank bleibt der Rang auf "Anfaenger"!
Lass dir den Query über "echo" ausgeben. Sieht er aus, wie erwartet?
Korrekte Werte in $Benutzer und $Rand.
Mir ist z.B. aufgefallen, dass du einmal $User und einmal $Benutzer
verwendest, obwohl beide ggf. das selbe sein sollten...
Schalte Warnungen von PHP ein!
ini_set('display_errors',true);
ini_set('error_reporting', E_ALL);
$sqldelete = "DELETE * FROM tabBenutzer WHERE user = '$User'";
Befasse dich mit der Syntax von DELETE:
http://dev.mysql.com/doc/mysql/en/DELETE.htmlOK, der * muss weg
aha...
Was für einen Sinn soll die Nennung von Attributnamen bei DELETE
ergeben?
Was genau meinst du?
Ich meine, dass ein * bei DELETE keinen Sinn ergibt und wollte dich
fragen, was dich dazu verleitet hat, anzunehmen, dass er Sinn
ergeben soll.
Viele Grüsse
Philipp
Ich meine, dass ein * bei DELETE keinen Sinn ergibt und wollte dich
fragen, was dich dazu verleitet hat, anzunehmen, dass er Sinn
ergeben soll.
Habe mir fälschlicherweise gedacht, wenn ich den Stern weglasse, löscht er nur den jeweiligen Wert (z.B. nur das Attribut user).
Wenn man so überlegt, dann würde er mit DELETE * das ganze Tuple löschen ...
Halihallo Thomas
Habe mir fälschlicherweise gedacht, wenn ich den Stern weglasse, löscht er nur den jeweiligen Wert (z.B. nur das Attribut user).
Wenn man so überlegt, dann würde er mit DELETE * das ganze Tuple löschen ...
Die Argumentation ist z.T. einleuchtend, nur so sieht es der SQL
Standard (IMHO zurecht [1]) nicht vor :-)
[1] Es gibt gute Gründe, die DML und DDL klar zu unterscheiden,
besonders auf der Ebene eines Datensatzes (das wäre dann etwa
die 1.5-te NF, 1NF + Datentyp einer Tabelle bleibt stets derselbe
:-))...
Falls du mit Löschen "auf Default-Wert zurücksetzen" meinst,
nunja, dann hat es wenig mit DELETE zu tun, sondern ginge auch
wieder in Richtung UPDATE...
Fazit: Kein Stern für DELETE :-)
Viele Grüsse
Philipp
Hallo Thomas,
$update = "UPDATE tabBenutzer SET rang='$Rang' WHERE user='$Benutzer'";
das sieht vom Syntax her schon mal richtig aus (allerdings ist die Verwendung von Variablen innerhalb von Strings nicht zu empfehlen, da langsam).
$sqlupdate = mysql_db_query("Anmeldename", $update, $verbindung);
du möchtest http://www.php.net/mysql_db_query lesen und dann mysql_select_db und mysql_query verwenden.
print "<h1>Fehler beim Update des Rangs!</h1>";
das ist keine besonders Hilfreiche Fehlermeldung - warum lässt du dir nicht die Fehlermeldung von mysql selbst anzeigen (->mysql_error())?
In $Benutzer ist der Username, in $Rang der zuvor ermittelte Rang abgelegt ($Rang stimmt, das habe ich überprüft; dort ist "Chef der Unterwelt" gespeichert).
hast du dir den Query mal mit echo $update; ausgeben lassen, um zu sehen, ob da wirklich das drinsteht, was du vermutest?
Wo ist denn hier bitte der Fehler?
woher soll ich das wissen? bekommst du eine Fehlermeldung? wenn ja, welche? Was macht der Query/was nicht?
$sqldelete = "DELETE * FROM tabBenutzer WHERE user = '$User'";
schau dir mal den Syntax von DELETE auf http://www.mysql.de/doc/de/DELETE.html an - du wirst feststellen dass das * da nichts zu suchen hat.
$loeschen = @mysql_db_query("Anmeldename", $sqldelete, $verbindung);
warum unterdrückst du jegliche Fehlermeldung?
print "<p>Es ist ein SQL-Fehler aufgetreten.</p>";
mysql_error() (s.o.)
Grüße aus Nürnberg
Tobias
$sqlupdate = mysql_db_query("Anmeldename", $update, $verbindung);
du möchtest http://www.php.net/mysql_db_query lesen und dann mysql_select_db und mysql_query verwenden.
Werd ich mal versuchen.
print "<h1>Fehler beim Update des Rangs!</h1>";
das ist keine besonders Hilfreiche Fehlermeldung - warum lässt du dir nicht die Fehlermeldung von mysql selbst anzeigen (->mysql_error())?
Werde ich in Zukunft machen.
Wo ist denn hier bitte der Fehler?
woher soll ich das wissen? bekommst du eine Fehlermeldung? wenn ja, welche? Was macht der Query/was nicht?
Das Problem ist ja, dass ich in diesem Fall keine Fehlermeldung bekomme. Aber der Rang bleibt in der Datenbank auf "Anfaenger", wird also nicht geändert.
$sqldelete = "DELETE * FROM tabBenutzer WHERE user = '$User'";
schau dir mal den Syntax von DELETE auf http://www.mysql.de/doc/de/DELETE.html an - du wirst feststellen dass das * da nichts zu suchen hat.$loeschen = @mysql_db_query("Anmeldename", $sqldelete, $verbindung);
warum unterdrückst du jegliche Fehlermeldung?print "<p>Es ist ein SQL-Fehler aufgetreten.</p>";
mysql_error() (s.o.)
Werde das auf jeden Fall so einbauen.
Vielen Dank,
Thomas
$update = "UPDATE tabBenutzer SET rang='$Rang' WHERE user='$Benutzer'";
das sieht vom Syntax her schon mal richtig aus (allerdings ist die Verwendung von Variablen innerhalb von Strings nicht zu empfehlen, da langsam).
Wie soll man denn die Werte sonst in den Abfragestring aufnehmen?
hi,
(allerdings ist die Verwendung von Variablen innerhalb von Strings nicht zu empfehlen, da langsam).
Wie soll man denn die Werte sonst in den Abfragestring aufnehmen?
string auftrennen,
"string, teil 1".$variable."string, teil 2";
gruss,
wahsaga
Halihallo GT
Wie soll man denn die Werte sonst in den Abfragestring aufnehmen?
vergl. </archiv/2004/4/79368/#m459755>
Viele Grüsse
Philipp