Habe in meinem Login/Register System MySQL benutzt und das speichert auch alles korrekt. Wenn ich aber ein falsches Passwort eingebe, werden alle Werte zurückgesetzt, bis auf den Namen, das Passwort, das Geschlecht und das Alter. warum?
public PasswortAbfrage(playerid)
{
new num_fields,num_rows;
cache_get_data(num_rows,num_fields,dbhandle);
if(num_rows>0)
{
TextDrawShowForPlayer(playerid, Time), TextDrawShowForPlayer(playerid, Date);
pInfo[playerid][Logged] = 1;
pInfo[playerid][Level] = cache_get_field_content_int(0,"level",dbhandle);
pInfo[playerid][Geschlecht] = cache_get_field_content_int(0,"sex",dbhandle);
pInfo[playerid][Alter] = cache_get_field_content_int(0,"age",dbhandle);
pInfo[playerid][Adminlevel] = cache_get_field_content_int(0,"adminlevel",dbhandle);
pInfo[playerid][Geld] = cache_get_field_content_int(0,"money",dbhandle);
pInfo[playerid][Fraktion] = cache_get_field_content_int(0,"faction",dbhandle);
pInfo[playerid][Rang] = cache_get_field_content_int(0,"rank",dbhandle);
SetPlayerScore(playerid,pInfo[playerid][Level]);
new altmoney = GetPlayerMoney(playerid);
GivePlayerMoney(playerid,-altmoney);
GivePlayerMoney(playerid,pInfo[playerid][Geld]);
SetSpawnInfo(playerid,0,29,-1969.4128,137.6455,27.6875,91.5533,0,0,0,0,0,0);
SpawnPlayer(playerid);
}
else
{
SetPVarInt(playerid,"badlogin",GetPVarInt(playerid,"badlogin")+1);
if(GetPVarInt(playerid,"badlogin")<3)
{
SendClientMessage(playerid,Rot,"Dieses Passwort war falsch!");
ShowPlayerDialog(playerid,DIALOG_LOGIN1,DIALOG_STYLE_PASSWORD,"Login","Dein Passwort:","OK","Abbrechen");
}
if(GetPVarInt(playerid,"badlogin") >=3)
{
SendClientMessage(playerid,Rot,"Du wurdest gekickt, weil du dein Passwort dreimal falsch eingegeben hast!");
Kick(playerid);
}
}
return 1;
}
Wird hier aufgerufen (OnDialogResponse)
switch(dialogid)
{
case DIALOG_LOGIN1:
{
if(response)
{
new query[256],passwort[40];
if(strlen(inputtext)>0)
{
mysql_escape_string(inputtext,passwort,dbhandle);
format(query,sizeof(query),"SELECT username,password,sex,age,adminlevel,level,money,faction,rank FROM user WHERE username='%s' AND password='%s'",pname,passwort);
mysql_function_query(dbhandle,query,true,"PasswortAbfrage","");
}
else
{
SendClientMessage(playerid,Gelb,"Gib ein Passwort ein!");
ShowPlayerDialog(playerid,DIALOG_LOGIN1,DIALOG_STYLE_PASSWORD,"Login","Dein Passwort:","OK","Abbrechen");
}
}
else
{
Kick(playerid);
}
}
Wenn ich auf dem Server bin und ein Kumpel dazujoint, vertauscht MySQL außerdem einige Werte.. Was los? Ich denke, das liegt daran, dass ich beim Disconnect alle Werte in der Database update. Wenn er gekickt wird, hat er natürlich keine Werte - und alles ist zurückgesetzt. Ich hatte die Idee, dies mit einer Variable zu lösen (wenn sie 1 ist, speichern, wenn 0 nicht), doch es sind ja unterschiedliche Callbacks... Wie dann?
MySQL setzt Werte zurück
- Uppermost
- Geschlossen
- Erledigt
-
-
format(query,sizeof(query),"SELECT username,password,sex,age,adminlevel,level,money,faction,rank FROM user WHERE username='%s' AND password='%s'",pname,passwort);
Du gibst hier die leere Variable "passwort" aus,
die Variable brauchst du aber garnicht. Nutze dafür einfach den inputtext:format(query,sizeof(query),"SELECT username,password,sex,age,adminlevel,level,money,faction,rank FROM user WHERE username='%s' AND password='%s'",pname,inputtext);
Wenn ich dir noch einen Tipp geben darf:
Verwende mysql_format in Kombination mit %e für strings.
So vermeidest du Query-Fehler -
Naja, die Variable Passwort ist ja oben mit mysql_escape_string definiert, anstatt dem Inputtext, damit keiner Query-Befehle als Passwort schreiben kann und somit die Datenbanken verändern. Wie funktioniert mysql_format genau, und was würde es mir in dieser Situation bringen?? Im Moment geht es mir ja nur darum, dass die Werte beim Disconnect (also beim kick wegen des falschen Passworts) zurückgesetzt werden
-
Fehler gefunden
mysql_function_query(dbhandle,query,true,"PasswortAbfrage","");
du hast vergessen die parameter zu übergeben.
So müsste es richtig sein:mysql_function_query(dbhandle,query,true,"PasswortAbfrage","i",playerid);
-
Werde ich probieren, mir ist aber eben aufgefallen, dass ein Kollege auf dem Server war, ich mich eingeloggt habe und er anstelle von mir gespawnt ist. Schon wieder: warum?
-
Werde ich probieren, mir ist aber eben aufgefallen, dass ein Kollege auf dem Server war, ich mich eingeloggt habe und er anstelle von mir gespawnt ist. Schon wieder: warum?
Weil du die Variablen nicht weitergegeben hast. -
Jetzt können auch mehrere Connecten etc., und wenn ich ein falsches Passwort eingebe, wird nur mein Geld zurückgesetzt, der Rest bleibt. Warum?^^
-
breadfish.de
Hat das Thema geschlossen.