[Help] Mysql Registration
#1

Hi, i have a problem with Mysql Registration , i have plugin https://sampforum.blast.hk/showthread.php?tid=56564 ... R7 but
there is new function mysql_function_query .... there is code but it doesnt work and i dont know why please What is wrong ?

nothing in DB ....

Код:
#include <a_samp>
#include <a_mysql>
#include <sscanf2>

#define USER "samp"
#define PASS "159753"
#define DB   "samp"
#define IP   "localhost"

#define LOGIN_DIALOG 1
#define REGISTER_DIALOG 2

#define COLOR_GRAD 0x6E76ADFF
#define COLOR_WHITE 0xFFFFFFFF
#define COLOR_BLUE 0x18A4FFFF

forward  IsUsernameRegistered(playerid, usernm[]);
forward  OnLoginPlayer(playerid, pas[]);
forward  SavePlayerStats(playerid);

enum pdb
{
	username[MAX_PLAYER_NAME],
	pass[32], // He use 32 cells because Md5 is based 32 cell encriptation,
	experience,
	money,
	admin,
	maxexp,
	logged,
}

new playerdb[MAX_PLAYERS][pdb];
new mysqlconnection;



main()
{
	print("\n----------------------------------");
	print(" Blank Gamemode by your name here");
	print("----------------------------------\n");
}



public OnGameModeInit()
{
	// Don't use these lines if it's a filterscript
	SetGameModeText("Blank Script");
	AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
	
	
	mysql_debug(true);
	print("Register Loading...");
	mysqlconnection = mysql_connect(IP, USER, DB, PASS);
	if(mysql_ping()>=1)
	{
	    print("MySQL: Connected sucesfull");

	}
	else
	{
	    print("Cannot connect to MySQL");
	    SendRconCommand("exit");
	}
	
	
	return 1;
}

public OnGameModeExit()
{

    mysql_close();


	return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
	SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
	return 1;
}

public OnPlayerConnect(playerid)
{

	GetPlayerName(playerid, playerdb[playerid][username], 24); // username is sa-mp defined 24 cells
	
	mysql_function_query(mysqlconnection ,"SELECT * FROM users WHERE Name = '%s'", false, "IsUsernameRegistered", "s", playerdb[playerid][username]);
    IsUsernameRegistered(playerid, playerdb[playerid][username]);

	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{

	mysql_function_query(mysqlconnection, "UPDATE users SET  Money = %d WHERE Name ='%s'", false, "SavePlayerStats", "ds", GetPlayerMoney(playerid),playerdb[playerid][username]);
    SavePlayerStats(playerid);

	return 1;
}




public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{

    if(dialogid == REGISTER_DIALOG)
    {
        if(!response)
        {
            SendClientMessage(playerid, COLOR_GRAD,"You have been kicked duo the cancelation.");
            Kick(playerid);
        }
        
        // The register syntax is INSERT INTO destination, the names of the fields and it's values.
        mysql_function_query(mysqlconnection, "INSERT INTO users (Name,Password,Money) VALUES ('%s',md5('%s'), %d)", false, "ssd", playerdb[playerid][username], inputtext, 50000);
        ShowPlayerDialog(playerid,LOGIN_DIALOG,DIALOG_STYLE_PASSWORD,"Login to Account.","Enter your password below:","Login","Cancel");
    }
    
	if(dialogid == LOGIN_DIALOG)
    {
        if(!response)
        {
            SendClientMessage(playerid, COLOR_GRAD,"You have been kicked duo the cancelation.");
            Kick(playerid);
        }
        mysql_function_query(mysqlconnection,"SELECT * FROM users WHERE Name = '%s' AND Password = md5('%s')", false, "OnLoginPlayer", "ss", playerdb[playerid][username], inputtext);
        OnLoginPlayer(playerid, inputtext);
    }

	return 1;
}



public IsUsernameRegistered(playerid, usernm[])
{
    mysql_store_result();
    if(mysql_num_rows() != 0)
    {
        ShowPlayerDialog(playerid,REGISTER_DIALOG,DIALOG_STYLE_PASSWORD,"Register Account.","Enter your password below:","Register","Cancel");
    }
    else
    {
        ShowPlayerDialog(playerid,REGISTER_DIALOG,DIALOG_STYLE_PASSWORD,"Register Account.","Enter your password below:","Register","Cancel");
    }
    mysql_free_result();
    return 1;
}

public OnLoginPlayer(playerid, pas[])
{
    new result[1000];
    mysql_store_result();
    if(mysql_num_rows() != 0)
    {
        if(mysql_fetch_row_format(result , "|", mysqlconnection))
        {
            sscanf(result,"e<p<|>s[24]s[32]i>", playerdb[playerid]);
            new str[80];
            format(str, sizeof(str),"Welcome %s, you have been logged to your account",playerdb[playerid][username]);
            SendClientMessage(playerid, COLOR_BLUE, str);
            SetPlayerInterior(playerid, 0);
            SetPlayerVirtualWorld(playerid, 0);
            SpawnPlayer(playerid);
            playerdb[playerid][logged] = 1;
        }
    }
    else
    {
        ShowPlayerDialog(playerid,LOGIN_DIALOG,DIALOG_STYLE_PASSWORD,"Login to Account.","Wrong password:","Login","Cancel");
    }
    mysql_free_result();
    return 1;
}

public SavePlayerStats(playerid) // save player stats
{
    if(playerdb[playerid][logged] == 1)
    {
        new pmoney[MAX_PLAYERS];
        pmoney[playerid] = GetPlayerMoney(playerid);
        mysql_free_result();
        playerdb[playerid][logged] = 0;
    }
    
    return 1;
}

Mysql Log:


Код:
[18:00:47] >> mysql_close( Connection handle: 1 )
[18:00:47] CMySQLHandler::~CMySQLHandler() - deconstructor called.
[18:00:47] CMySQLHandler::FreeResult() - Result was successfully free'd.
[18:00:47] CMySQLHandler::Disconnect() - Connection was closed.
[18:00:47] Unloading Plugin
[18:00:47]  
[18:00:47]  ** MySQL Debugging enabled (05/13/12)
[18:00:47]  
[18:00:47] >> mysql_connect(localhost, samp, samp, ******) on port 3306
[18:00:47] CMySQLHandler::CMySQLHandler() - constructor called.
[18:00:47] CMySQLHandler::CMySQLHandler() - Connecting to "localhost" | DB: "samp" | Username: "samp"
[18:00:47] CMySQLHandler::Connect() - Connection was successful.
[18:00:47] CMySQLHandler::Connect() - Auto-Reconnect has been enabled.
[18:00:47] >> mysql_ping( Connection handle: 1 )
[18:00:47] CMySQLHandler::Ping() - Connection is still alive.
[18:01:10] >> mysql_query_callback( Connection handle: 1 )
[18:01:10] >> mysql_store_result( Connection handle: 1 )
[18:01:10] CMySQLHandler::StoreResult() - No data to store.
[18:01:10] >> mysql_num_rows( Connection handle: 1 )
[18:01:10] CMySQLHandler::NumRows() - You cannot call this function now. (Reason: Dead Connection)
[18:01:10] >> mysql_free_result( Connection handle: 1 )
[18:01:10] CMySQLHandler::FreeResult() - The result is already empty.
[18:01:10] Passing query SELECT * FROM users WHERE Name = '%s' | s
[18:01:10] ProcessQueryThread(IsUsernameRegistered) - Query was successful. (SELECT * FROM users WHERE Name = '%s')
[18:01:10] CMySQLHandler::ProcessQueryThread() - Data is getting passed to ->ProcessTick()
[18:01:10] IsUsernameRegistered(s) - Threaded function called.
[18:01:10] >> mysql_store_result( Connection handle: 1 )
[18:01:10] CMySQLHandler::StoreResult() - Result was stored.
[18:01:10] >> mysql_num_rows( Connection handle: 1 )
[18:01:10] CMySQLHandler::NumRows() - Returned 0 row(s)
[18:01:10] >> mysql_free_result( Connection handle: 1 )
[18:01:10] CMySQLHandler::FreeResult() - Result was successfully free'd.
[18:01:18] >> mysql_query_callback( Connection handle: 1 )
[18:01:18] Passing query INSERT INTO users (Name,Password,Money) VALUES ('%s',md5('%s'), %d) | JethroTMrwrw
[18:01:18] CMySQLHandler::ProcessQueryThread() - Error will be triggered to OnQueryError()
[18:01:20] >> mysql_query_callback( Connection handle: 1 )
[18:01:20] >> mysql_store_result( Connection handle: 1 )
[18:01:20] CMySQLHandler::StoreResult() - No data to store.
[18:01:20] >> mysql_num_rows( Connection handle: 1 )
[18:01:20] CMySQLHandler::NumRows() - You cannot call this function now. (Reason: Dead Connection)
[18:01:20] >> mysql_fetch_row_format( Connection handle: 1 )
[18:01:20] CMySQLHandler::FetchRow() - You cannot call this function now. (Reason: Empty Result)
[18:01:20] >> mysql_free_result( Connection handle: 1 )
[18:01:20] CMySQLHandler::FreeResult() - The result is already empty.
[18:01:20] Passing query SELECT * FROM users WHERE Name = '%s' AND Password = md5('%s') | ss
[18:01:20] ProcessQueryThread(OnLoginPlayer) - Query was successful. (SELECT * FROM users WHERE Name = '%s' AND Password = md5('%s'))
[18:01:20] CMySQLHandler::ProcessQueryThread() - Data is getting passed to ->ProcessTick()
[18:01:20] OnLoginPlayer(ss) - Threaded function called.
[18:01:20] >> mysql_store_result( Connection handle: 1 )
[18:01:20] CMySQLHandler::StoreResult() - Result was stored.
[18:01:20] >> mysql_num_rows( Connection handle: 1 )
[18:01:20] CMySQLHandler::NumRows() - Returned 0 row(s)
[18:01:20] >> mysql_free_result( Connection handle: 1 )
[18:01:20] CMySQLHandler::FreeResult() - Result was successfully free'd.
Reply
#2

You are using "mysql_store_result()" without executing a query.
Reply
#3

... yes but dont know why and where.. .. somebody help me please..
Reply
#4

Add this to your script:
Код:
CheckMySQL()
{
	if(mysql_ping() == -1)
		mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS);
}
Now everytime before you call a quary execute this.
Reply
#5

iґve got it ... but still doesnt work... 0 rows in DB and log is the same..
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)