26.08.2012, 06:24
[11:57:54] MySQL Debugging activated (08/26/12)
[11:57:54] ---------------------------
[11:57:54]
[11:57:54] >> mysql_query( Connection handle: 1 )
[11:57:54] CMySQLHandler::Query() - You cannot call this function now. (Reason: Connection is dead)
[11:58:16] >> mysql_query( Connection handle: 1 )
[11:58:16] CMySQLHandler::Query() - You cannot call this function now. (Reason: Connection is dead)
[11:58:16] >> mysql_store_result( Connection handle: 1 )
[11:58:16] CMySQLHandler::StoreResult() - There is nothing to store (Reason: Connection is dead)
[11:58:16] >> mysql_num_rows( Connection handle: 1 )
[11:58:16] CMySQLHandler::NumRows() - You cannot call this function now. (Reason: Dead Connection)
[11:58:16] >> mysql_free_result( Connection handle: 1 )
[11:58:16] CMySQLHandler::FreeResult() - There is nothing to free (Reason: Connection is dead)
[11:58:18] >> mysql_query( Connection handle: 1 )
[11:58:18] CMySQLHandler::Query() - You cannot call this function now. (Reason: Connection is dead)
[11:58:20] >> mysql_real_escape_string( Connection handle: 1 )
Server crashes when I login after registerring.
+ The server doesn't detect if I'm registered or not. I checked the DB, It shows a row on my name.
![](/imageshack/img39/4260/bugdv.png)
Here's my check for registered:
And here's my OnPlayerDisconnect for updating the thing:
Server crashes on login and register <<
[11:57:54] ---------------------------
[11:57:54]
[11:57:54] >> mysql_query( Connection handle: 1 )
[11:57:54] CMySQLHandler::Query() - You cannot call this function now. (Reason: Connection is dead)
[11:58:16] >> mysql_query( Connection handle: 1 )
[11:58:16] CMySQLHandler::Query() - You cannot call this function now. (Reason: Connection is dead)
[11:58:16] >> mysql_store_result( Connection handle: 1 )
[11:58:16] CMySQLHandler::StoreResult() - There is nothing to store (Reason: Connection is dead)
[11:58:16] >> mysql_num_rows( Connection handle: 1 )
[11:58:16] CMySQLHandler::NumRows() - You cannot call this function now. (Reason: Dead Connection)
[11:58:16] >> mysql_free_result( Connection handle: 1 )
[11:58:16] CMySQLHandler::FreeResult() - There is nothing to free (Reason: Connection is dead)
[11:58:18] >> mysql_query( Connection handle: 1 )
[11:58:18] CMySQLHandler::Query() - You cannot call this function now. (Reason: Connection is dead)
[11:58:20] >> mysql_real_escape_string( Connection handle: 1 )
pawn Код:
stock MySQL_Register(playerid, passwordstring[])
{
new query[200], pname[24], IP[16];
GetPlayerName(playerid, pname, 24);
GetPlayerIp(playerid, IP, 16);
new score = GetPlayerScore(playerid);
new money = GetPlayerMoney(playerid);
format(query, sizeof(query), "INSERT INTO playerdata (user, password, score, money,adminlevel, operator,viplevel, capped, highestspree, IP, kills, deaths, banned) VALUES('%s', SHA1('%s'), '%d','%d', '%d' , '%d' , '%d','%d', '%d', '%s', '%d', '%d', '%d')", pname, passwordstring,score ,money ,pInfo[playerid][AdminLevel], pInfo[playerid][VIP], pInfo[playerid][Capped], pInfo[playerid][HighestSpree] ,IP, pInfo[playerid][Kills], pInfo[playerid][Deaths], pInfo[playerid][Banned]);
mysql_query(query);
SendClientMessage(playerid, -1, "You have been registered on this server!");
pInfo[playerid][Registered] = 1;
return 1;
}
stock MySQL_Login(playerid)
{
ResetPlayerMoney(playerid);
new query[300], pname[24], savingstring[20];
GetPlayerName(playerid, pname, 24);
format(query, sizeof(query), "SELECT * FROM playerdata WHERE user = '%s'", pname);
mysql_query(query);
mysql_store_result();
while(mysql_fetch_row_format(query,"|"))
{
mysql_fetch_field_row(savingstring, "score"); SetPlayerScore(playerid, strval(savingstring));
mysql_fetch_field_row(savingstring, "money"); GivePlayerMoney(playerid, strval(savingstring) );
mysql_fetch_field_row(savingstring, "adminlevel"); pInfo[playerid][AdminLevel] = strval(savingstring);
mysql_fetch_field_row(savingstring, "operator"); pInfo[playerid][Operator] = strval(savingstring);
mysql_fetch_field_row(savingstring, "viplevel"); pInfo[playerid][VIP] = strval(savingstring);
mysql_fetch_field_row(savingstring, "capped"); pInfo[playerid][Capped] = strval(savingstring);
mysql_fetch_field_row(savingstring, "deaths"); pInfo[playerid][Deaths] = strval(savingstring);
mysql_fetch_field_row(savingstring, "kills"); pInfo[playerid][Kills] = strval(savingstring);
mysql_fetch_field_row(savingstring, "highestspree"); pInfo[playerid][HighestSpree] = strval(savingstring);
}
mysql_free_result();
SendClientMessage(playerid, -1, "You have been logged in!");
pInfo[playerid][LoggedIn] = 1;
return 1;
}
public MySQL_Update(playerid)
{
new query[250];
format(query, sizeof(query), "UPDATE playerdata SET score=%d, money=%d adminlevel=%d capped=%d viplevel=%d highestspree=%d kills=%d deaths=%d banned=%d WHERE user='%s'", GetPlayerScore(playerid), GetPlayerMoney(playerid),pInfo[playerid][AdminLevel], pInfo[playerid][Capped],pInfo[playerid][VIP], pInfo[playerid][HighestSpree], pInfo[playerid][Kills], pInfo[playerid][Deaths], pInfo[playerid][Banned] ,PlayerName(playerid));
mysql_query(query);
return 1;
}
pawn Код:
switch(dialogid)
{
case DIALOG_REGISTER:
{
if (!response) return Kick(playerid);
if (response)
{
if(!strlen(inputtext))
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Registering...","You have entered an invalid password.\nType your password below to register a new account.","Register","Quit");
}
else
{
MySQL_Register(playerid, inputtext);
pInfo[playerid][Registered] = 1;
pInfo[playerid][LoggedIn] = 0;
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,"Login","Type your password below to login.","Login","Quit");
}
}
}
case DIALOG_LOGIN:
{
if(!response)
{
SendClientMessage(playerid, 0xFF0000, "You must login before you spawn!"); //Sends the client a error message
ShowPlayerDialog(playerid, 15500, DIALOG_STYLE_INPUT, "Login","Your user is {FF0000}registered{FFFFFF}! Please {0000FF}login{FFFFFF} with your password below!\n{FF0000} You must login before you spawn!","Login","Cancel"); //Shows our login dialog :).
}
if(response)
{
new query[200], pname[24], escapepass[100];
GetPlayerName(playerid, pname, 24);
mysql_real_escape_string(inputtext, escapepass); //We escape the inputtext to avoid SQL injections.
format(query, sizeof(query), "SELECT `user` FROM playerdata WHERE user = '%s' AND password = SHA1('%s')", pname, escapepass);
mysql_query(query);
mysql_store_result();
new numrows = mysql_num_rows();
if(numrows == 1) MySQL_Login(playerid);
if(!numrows)
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login","Your user is {FF0000}registered{FFFFFF}! Please {0000FF}login{FFFFFF} with your password below!\n{FF0000} The password you typed was incorrect!","Login","Cancel"); //Shows our login dialog :).
SendClientMessage(playerid, 0xFF0000, "Incorrect password!");
}
mysql_free_result();
}
}
Server crashes when I login after registerring.
+ The server doesn't detect if I'm registered or not. I checked the DB, It shows a row on my name.
![](/imageshack/img39/4260/bugdv.png)
Here's my check for registered:
pawn Код:
public OnPlayerConnect(playerid)
{
new query[200], pname[24];
GetPlayerName(playerid, pname, 24);
format(query, sizeof(query), "SELECT IP FROM `playerdata` WHERE user = '%s' LIMIT 1", pname);
mysql_query(query);
mysql_store_result();
if(mysql_num_rows() < 1)
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register","Your user is {FF0000}not{FFFFFF} registered! Please {0000FF}register{FFFFFF} with a password below!","Register","Cancel"); //Shows our register dialog :).
}
else
{
new IP[2][16];
mysql_fetch_field_row(IP[0],"IP");
GetPlayerIp(playerid, IP[1], 16);
if(strlen(IP[0]) != 0 && !strcmp(IP[0], IP[1], true))
{
MySQL_Login(playerid);
}
else if(!strlen(IP[0]) || strcmp(IP[0], IP[1], true))
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login","Your user is {FF0000}registered{FFFFFF}! Please {0000FF}login{FFFFFF} with your password below!","Login","Cancel"); //Shows our login dialog :).
pInfo[playerid][Registered] = 1;
}
}
mysql_free_result();
return 1;
}
pawn Код:
public OnPlayerDisconnect(playerid, reason)
{
if(pInfo[playerid][LoggedIn] == 1)
{
new score = GetPlayerScore(playerid);
new money = GetPlayerMoney(playerid);
new query[200], pname[24];
GetPlayerName(playerid, pname, 24);
format(query, sizeof(query), "UPDATE playerdata SET score=%d, money=%d adminlevel=%d operator=%d kills=%d deaths=%d viplevel=%d highestspree=%d banned=%d capped=%d WHERE user='%s'", score, money, pname);
mysql_query(query);
}
pInfo[playerid][LoggedIn] = 0;
return 1;
}
Server crashes on login and register <<