Ich möchte mit dir herausfinden, wo der Fehler mit der ID liegt, der im Grunde genommen dein Hauptproblem verursacht hat.
Das aktuelle Problem ist nämlich das Folgende: die User ID wird anscheinend nicht korrekt übergeben, sodass der Query auch nicht (korrekt) ausgeführt werden kann, da falscher User.
Deshalb möchte ich nun wissen, wie du die Variable mit der User ID zuweist um zu gucken, wo der Fehler liegt. Daher das systematische Aufrollen.
Alter in MySQL-Datenbank speichern
- Dj-BoMa
- Geschlossen
- Erledigt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
also bei mir in der datenbank tabelle user ist eine spalte id und da ist bei I_A ein hacken drin das heißt ja AUTO_INCREMENT oder?
und muss ich das im script auchnoch festlegen? -
und muss ich das im script auchnoch festlegen?
Eigentlich nicht. Wie lädst du denn den Spieler? Da müsste doch die Variable mit der User ID gesetzt werden.
-
Spieler laden tue ich so
public OnPasswordResponse(playerid)
{
new num_fields,num_rows;
cache_get_data(num_rows,num_fields,dbhandle);
if(num_rows==1)
{
//Passwort richtig
sInfo[playerid][eingeloggt] = 1;
sInfo[playerid][id] = cache_get_field_content_int(0,"id",dbhandle);
sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
sInfo[playerid][money] = cache_get_field_content_int(0,"money",dbhandle);
sInfo[playerid][bonus] = cache_get_field_content_int(0,"Bonus",dbhandle);
SetPlayerMoney(playerid,sInfo[playerid][money]);
SetPlayerScore(playerid,sInfo[playerid][level]);
SpawnPlayer(playerid);
}
else
{
//Passwort falsch
SendClientMessage(playerid,COLOR_RED,"Das eingegebene Passwort ist falsch.");
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{FFFFB9}Login auf {FF0000}Servername.","{FFFFB9}Herzlich Willkommen zurück.\nGib bitte dein Passwort ein was du bei der Registrierung angegeben hast.\n{FF0000}Hast du Probleme bei der eingabe schreibe bitte im Forum: einen Supporter an.\n{FFFFB9}Viel spaß auf dem Server.","Login","Abbrechen");
}
return 1;
} -
Und die Werte der User IDs stehen sonst aber auch korrekt in der Datenbank?
-
Level Money und Bonus wird aber geladen?
-
ja die datenbank zählt immer hoch also pro user +1
nein Bonus auch nicht gleiche problem
-
Also ließt er garnichts aus der Datenbank ja ?
Aber er speichert es richtig sagst du ?
Hast du in der Datenbank auch eine Spalte alter angelegt ?
-
nein Bonus speichert er auch nicht nur geld und level
-
Hast du in der Datenbank eine Spalte für alter und Bonus angelegt ?
-
ja habe ich angelegt
-
Hast du auch auf groß und klein Schreibung geachtet ?
Das alter nicht zB Alter ist -
Das Problem idt folgendes:
Du fragst nach dem alter in der Registrierung. Zu dem Zeitpunkt wo du die update abfrage machst existiert die variable sinfo[playerid] [id] noch garnicht (also 0) weil die erst nach dem einloggen ausgelesen wird. Bei deinem scriot gehst du aber so vor:Registrierung
Password angeben
Insert...
Alter angeben
Update mit sinfo [playerid] [ id]
Login durchführen
Sinfo[playerid] [id] wird deklariertProblem erkannt? An einer gescheiten Lösung darfst du jetzt selber tüfteln
Grüße -
manchmal hat es einen sehr einfachen Grund undzwar query [128].. 128 Zeichen reichen nicht aus. Versuch einfach mal 256 oder eine noch grössere zahl daraus zu machen und probiers nochmal aus.
Also beim laden und speichern einfach
new query [128]; --> new query [256] -
Wenn ich mich vertan hsbe sollte schau dir mal deine abfrage an deine alter variable ist ein string deklarierst in der SQL abfrage aber als integer.
-
Poste einfach mal ddein Tabellenaufbau und der Dazugehörige Code vom Speichern, Laden und Hinzufügen von Usern
-
So hier die Datenbank
Spieler speichern
public OnPlayerDisconnect(playerid, reason)
{
savePlayer(playerid);
resetPlayer(playerid);
return 1;
}savePlayer(playerid)
{
if(sInfo[playerid][eingeloggt]==0)return 1;
//Speichern
new query[256];
format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',Bonus'%i' WHERE id='%i'",GetPlayerScore(playerid),GetPlayerMoney(playerid),sInfo[playerid][bonus],sInfo[playerid][id]);
mysql_function_query(dbhandle,query,false,"","");
return 1;
}Spieler Laden
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid==DIALOG_LOGIN)
{
if(response)
{
new name[MAX_PLAYER_NAME],query[128],passwort[35];
GetPlayerName(playerid,name,sizeof(name));
if(strlen(inputtext)>0)
{
//Passwort richtig
mysql_escape_string(inputtext,passwort,dbhandle);
format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND password='%s'",name,passwort);
mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
}
else
{
//Keine Eingabe
SendClientMessage(playerid,COLOR_RED,"Gib bitte dein Passwort ein.");
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{FFFFB9}Login auf {FF0000}Servername.","{FFFFB9}Herzlich Willkommen zurück.\nGib bitte dein Passwort ein was du bei der Registrierung angegeben hast.\n{FF0000}Hast du Probleme bei der eingabe schreibe bitte im Forum: einen Supporter an.\n{FFFFB9}Viel spaß auf dem Server.","Login","Abbrechen");
}
}
else
{
Kick(playerid);
}
return 1;
}
return 1;
}public OnPasswordResponse(playerid)
{
new num_fields,num_rows;
cache_get_data(num_rows,num_fields,dbhandle);
if(num_rows==1)
{
//Passwort richtig
sInfo[playerid][eingeloggt] = 1;
sInfo[playerid][id] = cache_get_field_content_int(0,"id",dbhandle);
sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
sInfo[playerid][money] = cache_get_field_content_int(0,"money",dbhandle);
sInfo[playerid][bonus] = cache_get_field_content_int(0,"Bonus",dbhandle);
SetPlayerMoney(playerid,sInfo[playerid][money]);
SetPlayerScore(playerid,sInfo[playerid][level]);
SpawnPlayer(playerid);
}
else
{
//Passwort falsch
SendClientMessage(playerid,COLOR_RED,"Das eingegebene Passwort ist falsch.");
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{FFFFB9}Login auf {FF0000}Servername.","{FFFFB9}Herzlich Willkommen zurück.\nGib bitte dein Passwort ein was du bei der Registrierung angegeben hast.\n{FF0000}Hast du Probleme bei der eingabe schreibe bitte im Forum: einen Supporter an.\n{FFFFB9}Viel spaß auf dem Server.","Login","Abbrechen");
}
return 1;
}so ich hoffe jetzt kann mir richtig geholfen werden
-
UPDATE user SET level='%i',money='%i',Bonus'%i' WHERE id='%i'
Schau mal bei deiner savePlayer() Funktion. Du musst bei "Bonus" noch das Gleichzeichen = ergänzen.
Wir wären deinem Problem aber viel schneller auf die Schliche gekommen, wenn du früher die MySQL Log gepostet hättest, wonach ich auch mehrmals fragte.
Um in Zukunft deinerseits Fehler in der MySQL Syntax auszuschließen, wenn du dir zum Beispiel nicht sicher bist, empfehle ich dir eine Internetseite, wo du eine MySQL-Anweisung auf Korrektheit überprüfen kannst: https://de.piliapp.com/mysql-syntax-check/ -
also in alter gbdatum wird jetzt nur die ersten 4 stellen gespeichert also 1302 nur das 1996 fehlt woran liegt das jetzt?
//CLOSE
Danke an alle die mitgesucht haben es geht jetzt alles wie gewollt.
Vielen danke dafür -
Beitrag von amphax.me ()
Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Fail (). -