MySQL Logging player's Master Account in
#1

EDIT:
pawn Код:
forward MasterAccountLogin(playerid, password[]); // Login to an existing master account.
public MasterAccountLogin(playerid, password[])
{
    if(IsPlayerConnected(playerid))
    {
        if(AccountExists(playerid))
        {
            if(strlen(password) >= 1 && strlen(password) <= 20)
            {
                if(MasterAccount[playerid][mLoggedIn])
                {
                    /*new value[128], DBResult:qresult;
                    format(query, sizeof(query), "SELECT * FROM `MainAccount` WHERE ( `username` = '%s' AND `password` = '%s' )", sqlite_escape_string(PlayerName(playerid)), sqlite_escape_string(password));
                    qresult = mysql_query(database, query);
                    if(db_num_rows(qresult) >= 1)*/

                   
                    new rows, fields;
                    new value[128];
                    new query[128];
                    new qresult[128];
                    format(query, sizeof(query), "SELECT * FROM `MasterAccount` WHERE `username` = '%s' AND `mPassword` = '%s'", MasterAccount[playerid][mOriginalUsername] , MasterAccount[playerid][mPassword]);
                    cache_get_data(rows, fields);
                    if(rows >=1)
                    {
                        SetPlayerColor(playerid, COLOR_DARKGREY);// Logged in to master account, yellow = character not spawned.
                        MasterAccount[playerid][mLoggedIn] = true;
                        cache_get_row(qresult, "password", value, 20)format(MasterAccount[playerid][mPassword], 20, value); // 413
                        cache_get_row(qresult, "email_address", value, 30); format(MasterAccount[playerid][mEmailAddress], 30, value); // 414
                        cache_get_row(qresult, "ip_address", value, 20);    format(MasterAccount[playerid][mOld_IP], 20, value); // 415
                        cache_get_row(qresult, "super_admin", value, 5);    MasterAccount[playerid][mSuperAdmin] = strval(value); // 416
                        cache_get_row(qresult, "id", value, 15);    MasterAccount[playerid][mID] = strval(value); // 417
                        mysql_free_result(qresult);
                        ShowMenuDialog(playerid);
                        printf("Password: %s, Email Address: %s, Last IP Used: %s, Super Admin: %d, ID: %d.", MasterAccount[playerid][mPassword],  MasterAccount[playerid][mEmailAddress],  MasterAccount[playerid][mOld_IP], MasterAccount[playerid][mSuperAdmin], MasterAccount[playerid][mID]);
                        return true;
                    }
                    else
                    {
                        SetPVarInt(playerid, "LOGIN_ATTEMPTS", GetPVarInt(playerid, "LOGIN_ATTEMPTS") + 1);
                        switch(GetPVarInt(playerid, "LOGIN_ATTEMPTS"))
                        {
                            case 1: ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Master Account - Login","You entered an invalid password, you have three more attempts before you are auto-kicked.","Login","Cancel");
                            case 2: ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Master Account - Login","You entered an invalid password, you have two more attempts before you are auto-kicked.","Login","Cancel");
                            case 3: ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Master Account - Login","You entered an invalid password, you have one more attempt before you are auto-kicked.","Login","Cancel");
                            case 4: Kick(playerid);
                        }
                    }
                }
            }
            else
            {
                ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Master Account - Login","Account already registered, please enter your password to continue.","Login","Cancel");
            }
        }
    }
    return false;
}
pawn Код:
423) : error 035: argument type mismatch (argument 1)
(424) : error 035: argument type mismatch (argument 1)
(425) : error 035: argument type mismatch (argument 1)
(426) : error 035: argument type mismatch (argument 1)
(427) : error 035: argument type mismatch (argument 1)
(428) : error 017: undefined symbol "mysql_free_result"
Anyone?
Reply
#2

The first argument should be integer (rowid) and cache_get_row has the field index not the name. Assuming there'll only be 1 row for each player:
pawn Код:
cache_get_field_content(0, "password", MasterAccount[playerid][mPassword], 20);
cache_get_field_content(0, "email_address", MasterAccount[playerid][mEmailAddress], 30);
cache_get_field_content(0, "ip_address", MasterAccount[playerid][mOld_IP], 20);
cache_get_field_content(0, "super_admin", value, 5); MasterAccount[playerid][mSuperAdmin] = strval(value);
cache_get_field_content(0, "id", value, 15); MasterAccount[playerid][mID] = strval(value);
It'd be recommended to use the latest version of the mysql plugin (R39) and you can use cache_get_field_content_int to retrieve an integer value instead of using strval (plus it's much faster).
Reply
#3

Thanks, but I still get thus error:
pawn Код:
(428) : error 017: undefined symbol "mysql_free_result"
Reply
#4

That function wouldn't work for threaded queries anyways so it had been removed. By the way, you format the query and you use directly cache_get_data function without executing the query first. And because of the way threaded queries work, it will need to be in another callback.
Reply
#5

What..?
So I don't need mysql_free_result?
Reply
#6

No, you don't.

- A tutorial about threaded queries: https://sampforum.blast.hk/showthread.php?tid=337810
- An example script (for register/login) using threaded queries (R34+): https://github.com/pBlueG/SA-MP-MySQ...stem-cache.pwn
Reply
#7

I love you.
Reply
#8

That's the magic of threaded queries. You don't have to worry about free'ing the result, it's automatically free'd (clears up the cache you've used inside that callback from the plugin data) once you return 1 the callback you've used for query.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)