Raised This Month: $32 Target: $400
 8% 

Solved sql save problem


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
lexzor
Veteran Member
Join Date: Nov 2020
Old 05-03-2021 , 13:13   sql save problem
Reply With Quote #1

hello.
i have this code:
PHP Code:
public client_putinserver(id)
{
    
insert_new_player(id)    
}

public 
insert_new_player(id)
{
    new 
Data[1]
    
Data[0] = id    
    
    
new szTemp[512]
    
format(szTemp,charsmax(szTemp),"SELECT * FROM `%s` WHERE (`name` = '%s')"g_szONPlayer_Tableg_iPlayersInfo[id][Name])
    
SQL_ThreadQuery(g_SqlTuple,"register_client",szTemp,Data,1)
}


public 
register_client(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    if(
FailState == TQUERY_CONNECT_FAILED)
    {
        
log_amx("[Advanced Panel] Could not connect to SQL database.  [%d] %s"ErrcodeError)
    }
    else if(
FailState == TQUERY_QUERY_FAILED)
    {
        
log_amx("[Advanced Panel] Load Query failed. [%d] %s"ErrcodeError)
    }
    
    new 
id
    id 
Data[0]
    
    if(
SQL_NumResults(Query) < 1
    {
        for(new 
0DATAi++)
        {
            if (
equal(g_iPlayersInfo[id][i] ,"ID_PENDING"))
                return 
PLUGIN_HANDLED
        
}
        
        new 
szTemp[1024]
        
        
//get_users_info()
        
format(szTempcharsmax(szTemp), "INSERT INTO `%s` ( `name` , `ip` , `steamid` , `frags` , `deaths`) VALUES ( `%s` , `%s` , `%s` , `%d` , `%d`)"g_szONPlayer_Tableg_iPlayersInfo[id][Name], g_iPlayersInfo[id][Address], g_iPlayersInfo[id][AuthID], g_iPlayersInfo[id][Frags], g_iPlayersInfo[id][Deaths])
        
SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
    } 
    else 
    {
        
server_print("[Advanced Panel] Error sending data in table %s"g_szONPlayer_Table)
    }
    
    return 
PLUGIN_CONTINUE

but i get this error in console

Code:
L 05/03/2021 - 20:09:00: [MySQL] Function not found: IgnoreHandle
L 05/03/2021 - 20:09:00: [AMXX] Displaying debug trace (plugin "panel.amxx", version "1.0")
L 05/03/2021 - 20:09:00: [AMXX] Run time error 10: native error (native "SQL_ThreadQuery")
L 05/03/2021 - 20:09:00: [AMXX]    [0] panel.sma::register_client (line 430)
i m trying to get info about all connected players and put it in a database to create a panel, but i can't save.

some ideas?

Last edited by lexzor; 05-04-2021 at 11:56.
lexzor is offline
iceeedr
Veteran Member
Join Date: Apr 2017
Location: Brazil
Old 05-03-2021 , 13:37   Re: sql save problem
Reply With Quote #2

The error is self explanatory, where is the "ignore handle" function?

PHP Code:
SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp
Judging by the name of the function, I think this will serve.

PHP Code:
public IgnoreHandle(failStateHandle:queryerror[], errorNumdata[], dataSize)
{
    if (
failState) {
        if (
failState == TQUERY_CONNECT_FAILEDlog_to_file("LOG.log""Could not connect to SQL database. [%d] %s"errorNumerror);
        else if (
failState == TQUERY_QUERY_FAILEDlog_to_file("LOG.log""Query failed. [%d] %s"errorNumerror);
    }

    return 
PLUGIN_CONTINUE;

__________________


Quote:
Originally Posted by fysiks View Post
Please stop trying to help. You appear to just be posting random stuff. Wait until you actually understand more about AMX Mod X and how the game works.
https://iceeedr.com.br/

Last edited by iceeedr; 05-03-2021 at 13:40.
iceeedr is offline
Send a message via Skype™ to iceeedr
lexzor
Veteran Member
Join Date: Nov 2020
Old 05-03-2021 , 15:04   Re: sql save problem
Reply With Quote #3

PHP Code:
public client_putinserver(id)
{
    
insert_new_player(id)    
}

public 
insert_new_player(id)
{    
    new 
szTemp[512]
    
get_users_info()
    
format(szTempcharsmax(szTemp), "INSERT INTO `%s` (`id` , `name` , `ip` , `steamid` , `frags` , `deaths`) VALUES ( `NULL` , `%s` , `%s` , `%s` , `%d` , `%d`)"g_szONPlayer_Tableg_iPlayersInfo[id][Name], g_iPlayersInfo[id][Address], g_iPlayersInfo[id][AuthID], g_iPlayersInfo[id][Frags], g_iPlayersInfo[id][Deaths])
    
SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
}

public 
get_users_info()
{
    
g_iAdminsCount 0
    g_iPlayersCount 
0
    
new iPlayers[MAX_PLAYERS], iPlayeriNum
    
    get_players
(iPlayersiNum)
    
    for (new 
0iNumi++)
    {
        
iPlayer iPlayers[i]
        
        if(!
is_user_bot(iPlayer) && !is_user_hltv(iPlayer) && is_user_connected(iPlayer))
        {
            ++
g_iPlayersCount
            
if(get_user_flags(iPlayer) & ADMIN_FLAG)
            {
                ++
g_iAdminsCount
            
}
            
g_iPlayersInfo[iPlayer][Frags] = get_user_frags(iPlayer)
            
g_iPlayersInfo[iPlayer][Deaths] = get_user_deaths(iPlayer)
            
get_user_name(iPlayerg_iPlayersInfo[iPlayer][Name], charsmax(g_iPlayersInfo[][Name]))
            
get_user_authid(iPlayerg_iPlayersInfo[iPlayer][AuthID], charsmax(g_iPlayersInfo[][AuthID]))    
        }            
    }
    
    
}

public 
IgnoreHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    
SQL_FreeHandle(Query)
    
    return 
PLUGIN_HANDLED

this is the code and I CAN T SAVE. i don t understand why.
lexzor is offline
LondoN
Senior Member
Join Date: Dec 2015
Location: Roman, Romania.
Old 05-03-2021 , 17:22   Re: sql save problem
Reply With Quote #4

Code:
public client_putinserver(id)
{
	if(is_user_bot(id) || is_user_hltv(id))
		return;

	get_user_name(id, g_iPlayersInfo[id][Name], charsmax(g_iPlayersInfo[][Name]));
	get_user_ip(id, g_iPlayersInfo[id][Address], charsmax(g_iPlayersInfo[][Address]), 1);
	get_user_authid(id, g_iPlayersInfo[id][AuthID], charsmax(g_iPlayersInfo[][AuthID]));


	new query[512];
	formatex(query, charsmax(query), "SELECT * FROM %s WHERE name='%s', g_szONPlayer_Table, g_iPlayersInfo[id][Name]);
	
	new data[1];
	data[0] = id;

	SQL_ThreadQuery(g_SqlTuple, "Load_Data", query, data, sizeof data);
}

public Load_Data(FailState, Handle:Query, szError[], ErrorCode, szData[], iSize)
{
	if(FailState || ErrorCode)
		log_amx("sql.log", szError);

	new id = szData[0];

	if(SQL_NumResults(Query) < 1)
	{
		new query[512];
		formatex(query, charsmax(query), "INSERT INTO `%s` (`name`, `ip`, `steamid`, `frags`, `deaths`) VALUES ('%s', '%s', '%s', '0', '0');",
				g_szONPlayerTable, g_iPlayersInfo[id][Name], g_iPlayersInfo[id][Address], g_iPlayersInfo[id][AuthID]);
		SQL_ThreadQuery(g_SqlTuple, "Data_Ignore", query);
	}
	else
	{
		g_iPlayersInfo[id][Frags] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "frags"));
		g_iPlayersInfo[id][Deaths] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "deaths"));
	}
}

public Data_Ignore(FailState, Handle:Query, szError[], ErrorCode, szData[], iSize)
{
	if(FailState || ErrorCode)
		log_amx("sql.log", szError);

	SQL_FreeHandle(Query);
}

public client_disconnect(id)
{
	if(is_user_bot(id) || is_user_hltv(id))
		return;

	new query[512];
	formatex(query, charsmax(query), "UPDATE `ip`, `steamid`, `frags`, `deaths` SET '%s', '%s', '%d', '%d' WHERE `name`='%s');",
		g_iPlayersInfo[id][Address], g_iPlayersInfo[id][AuthID], g_iPlayersInfo[id][Frags], g_iPlayersInfo[id][Deaths], g_iPlayersInfo[id][Name]);
	SQL_ThreadQuery(g_SqlTuple, "Data_Ignore", query);
}
try whis way
__________________
LondoN is offline
iceeedr
Veteran Member
Join Date: Apr 2017
Location: Brazil
Old 05-03-2021 , 17:46   Re: sql save problem
Reply With Quote #5

You forgot to check for symbols in the name that will give error in the querie

Quote:
Originally Posted by LondoN View Post
Code:
public client_putinserver(id)
{
	if(is_user_bot(id) || is_user_hltv(id))
		return;

	get_user_name(id, g_iPlayersInfo[id][Name], charsmax(g_iPlayersInfo[][Name]));
	get_user_ip(id, g_iPlayersInfo[id][Address], charsmax(g_iPlayersInfo[][Address]), 1);
	get_user_authid(id, g_iPlayersInfo[id][AuthID], charsmax(g_iPlayersInfo[][AuthID]));


	new query[512];
	formatex(query, charsmax(query), "SELECT * FROM %s WHERE name='%s', g_szONPlayer_Table, g_iPlayersInfo[id][Name]);
	
	new data[1];
	data[0] = id;

	SQL_ThreadQuery(g_SqlTuple, "Load_Data", query, data, sizeof data);
}

public Load_Data(FailState, Handle:Query, szError[], ErrorCode, szData[], iSize)
{
	if(FailState || ErrorCode)
		log_amx("sql.log", szError);

	new id = szData[0];

	if(SQL_NumResults(Query) < 1)
	{
		new query[512];
		formatex(query, charsmax(query), "INSERT INTO `%s` (`name`, `ip`, `steamid`, `frags`, `deaths`) VALUES ('%s', '%s', '%s', '0', '0');",
				g_szONPlayerTable, g_iPlayersInfo[id][Name], g_iPlayersInfo[id][Address], g_iPlayersInfo[id][AuthID]);
		SQL_ThreadQuery(g_SqlTuple, "Data_Ignore", query);
	}
	else
	{
		g_iPlayersInfo[id][Frags] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "frags"));
		g_iPlayersInfo[id][Deaths] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "deaths"));
	}
}

public Data_Ignore(FailState, Handle:Query, szError[], ErrorCode, szData[], iSize)
{
	if(FailState || ErrorCode)
		log_amx("sql.log", szError);

	SQL_FreeHandle(Query);
}

public client_disconnect(id)
{
	if(is_user_bot(id) || is_user_hltv(id))
		return;

	new query[512];
	formatex(query, charsmax(query), "UPDATE `ip`, `steamid`, `frags`, `deaths` SET '%s', '%s', '%d', '%d' WHERE `name`='%s');",
		g_iPlayersInfo[id][Address], g_iPlayersInfo[id][AuthID], g_iPlayersInfo[id][Frags], g_iPlayersInfo[id][Deaths], g_iPlayersInfo[id][Name]);
	SQL_ThreadQuery(g_SqlTuple, "Data_Ignore", query);
}
try whis way
__________________


Quote:
Originally Posted by fysiks View Post
Please stop trying to help. You appear to just be posting random stuff. Wait until you actually understand more about AMX Mod X and how the game works.
https://iceeedr.com.br/

Last edited by iceeedr; 05-03-2021 at 17:46.
iceeedr is offline
Send a message via Skype™ to iceeedr
LondoN
Senior Member
Join Date: Dec 2015
Location: Roman, Romania.
Old 05-03-2021 , 17:54   Re: sql save problem
Reply With Quote #6

oh, i forgot

Code:
mysql_escape_string(dest[],len)
{
    //copy(dest, len, source);
    replace_all(dest,len,"\\","\\\\");
    replace_all(dest,len,"\0","\\0");
    replace_all(dest,len,"\n","\\n");
    replace_all(dest,len,"\r","\\r");
    replace_all(dest,len,"\x1a","\Z");
    replace_all(dest,len,"'","\'");
    replace_all(dest,len,"^"","\^"");
}
__________________
LondoN is offline
lexzor
Veteran Member
Join Date: Nov 2020
Old 05-04-2021 , 09:39   Re: sql save problem
Reply With Quote #7

ok, this is the code
PHP Code:

public MySql_Init()
{
    
g_SqlTuple SQL_MakeDbTuple(g_szPanelInfo[MYSQL_HOST], g_szPanelInfo[MYSQL_USER],g_szPanelInfo[MYSQL_PASS], g_szPanelInfo[MYSQL_DB])
       
    new 
ErrorCode,Handle:SqlConnection SQL_Connect(g_SqlTuple,ErrorCode,g_Error,charsmax(g_Error))
       
    if(
SqlConnection == Empty_Handle)
    {
        
set_fail_state(g_Error)
    }
    
    new 
Handle:Queries
    Queries 
SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS %s ( `id` INT(11) NOT NULL AUTO_INCREMENT , `name` VARCHAR(33) NOT NULL , `ip` VARCHAR(33) NOT NULL , `steamid` VARCHAR(33) NOT NULL , `frags` INT(33) NOT NULL , `deaths` INT(33) NOT NULL , `firstseen` VARCHAR(255) NOT NULL , `lastvisit` VARCHAR(255) NOT NULL , PRIMARY KEY (`id`))"g_szONPlayer_Table)
    
    if(!
SQL_Execute(Queries))
    {
        
SQL_QueryError(Queries,g_Error,charsmax(g_Error))
        
set_fail_state(g_Error)     
    }
    else
    {
        
server_print("[Advanced Panel] SQL Connection succesfully!")
    }
    
    
SQL_FreeHandle(Queries)
    
    
SQL_FreeHandle(SqlConnection)   
}  

public 
client_putinserver(id)
{
    
insert_new_player(id)
}

public 
insert_new_player(id)
{
    if (
is_user_bot(id) || is_user_hltv(id))
        return 
        
    
get_user_name(idg_iPlayersInfo[id][Name], charsmax(g_iPlayersInfo[][Name]))
    
    new 
szData[1]
    
szData[0] = id
    
    
new szQuery[512];
    
    
mysql_escape_string(g_iPlayersInfo[id][Name], charsmax(g_iPlayersInfo[][Name]))
    
    
formatex(szQuerycharsmax(szQuery), "SELECT * FROM %s WHERE name='%s'"g_szONPlayer_Tableg_iPlayersInfo[id][Name]);
    
    
SQL_ThreadQuery(g_SqlTuple"Check_Data"szQueryszData1)
}

public 
Check_Data(FailStateHandle:QueryszError[], ErrorCodeszData[], iSize)
{
    if(
FailState || ErrorCode)
        
server_print("%s"szError)
        
    new 
id szData[0]
    
    if(
SQL_NumResults(Query) < 1)
    {
        new 
szQuery[512]
        
        
get_users_info(id)
        
        
mysql_escape_string(g_iPlayersInfo[id][Name], charsmax(g_iPlayersInfo[][Name]))
        
        
formatex(szQuerycharsmax(szQuery), "INSERT INTO `%s` (`name`,`ip`,`steamid`,`frags`,`deaths`) VALUES (`%s`,`%s`,`%s`,`0`,`0`)",
        
g_szONPlayer_Tableg_iPlayersInfo[id][Name], g_iPlayersInfo[id][Address], g_iPlayersInfo[id][AuthID])
    
        if(
g_szPanelInfo[DEBUG_PRINT] != 0)
        {
            
server_print("[AdvancedPanel] Player %s has benn inserted into table: %s"g_iPlayersInfo[id][Name], g_szONPlayer_Table )
        }
        
        
SQL_ThreadQuery(g_SqlTuple"FreeHandle"szQuery )
    }
    else
    {
        
server_print("[Advanced Panel] SQL ERROR! Player %s already exists!"g_iPlayersInfo[id][Name])
    }
}

public 
FreeHandle(FailStateHandle:QueryszError[], ErrorCodeszData[], iSize)
{
    if(
FailState || ErrorCode)
        
server_print("%s"szError)
    
    
SQL_FreeHandle(Query);
    
    if(
g_szPanelInfo[DEBUG_PRINT] != 0)
    {
        
server_print("[AdvancedPanel] Query for inserting player is freehandle now.")
    }
}

stock get_users_info(id)
{
    
g_iPlayersInfo[id][Frags] = get_user_frags(id)
    
g_iPlayersInfo[id][Deaths] = get_user_deaths(id)
    
get_user_name(idg_iPlayersInfo[id][Name], charsmax(g_iPlayersInfo[][Name]))
    
get_user_authid(idg_iPlayersInfo[id][AuthID], charsmax(g_iPlayersInfo[][AuthID]))        
}

mysql_escape_string(dest[],len)
{
    
//copy(dest, len, source);
    
replace_all(dest,len,"\\","\\\\");
    
replace_all(dest,len,"\0","\\0");
    
replace_all(dest,len,"\n","\\n");
    
replace_all(dest,len,"\r","\\r");
    
replace_all(dest,len,"\x1a","\Z");
    
replace_all(dest,len,"'","\'");
    
replace_all(dest,len,"^"","\^"");

Code:
Unknown column 'lexzor' in 'field list'
lexzor is player name.

Last edited by lexzor; 05-04-2021 at 10:06.
lexzor is offline
lexzor
Veteran Member
Join Date: Nov 2020
Old 05-04-2021 , 10:23   Re: sql save problem
Reply With Quote #8

ok actually i must use ^"%s^" in query. Thanks for example london, is working now.
lexzor is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 18:36.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode