Server crash when I register (MYSQL)
#1

[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 )


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.


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;
}
And here's my OnPlayerDisconnect for updating the thing:

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 <<
Reply
#2

Do you have
mysql_connect("Hostname", "Username", "Database", "Password");
correctly filled out?

Quote:

This forum requires that you wait 120 seconds between posts. Please try again in 14 seconds.

Reply
#3

It says the connection is dead. You either aren't connecting or you're trying to connect with the wrong details.
Reply
#4

pawn Код:
public OnGameModeInit()
{
    mysql_connect(mysql_host, mysql_user, mysql_database, mysql_password);
    mysql_debug(1); //for some reason it doesnt debug, go ingame
    mysql_query("CREATE TABLE IF NOT EXISTS playerdata(user VARCHAR(24), password VARCHAR(41), score INT(20), money INT(20), IP VARCHAR(16), capped INT(20), highestspree INT(20), adminlevel INT(5), viplevel INT(5) )");
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)