AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Solved sql save problem (https://forums.alliedmods.net/showthread.php?t=332283)

lexzor 05-03-2021 13:13

sql save problem
 
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?

iceeedr 05-03-2021 13:37

Re: sql save problem
 
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;



lexzor 05-03-2021 15:04

Re: sql save problem
 
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.

LondoN 05-03-2021 17:22

Re: sql save problem
 
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

iceeedr 05-03-2021 17:46

Re: sql save problem
 
You forgot to check for symbols in the name that will give error in the querie

Quote:

Originally Posted by LondoN (Post 2745824)
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 05-03-2021 17:54

Re: sql save problem
 
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,"^"","\^"");
}


lexzor 05-04-2021 09:39

Re: sql save problem
 
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.

lexzor 05-04-2021 10:23

Re: sql save problem
 
ok actually i must use ^"%s^" in query. Thanks for example london, is working now.


All times are GMT -4. The time now is 02:39.

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