View Single Post
Bacardi
Veteran Member
Join Date: Jan 2010
Location: mom's basement
Old 05-09-2020 , 13:45   Re: [ISSUE] Problem while storing data in the database
Reply With Quote #5

- This create table, which set timestamp on every record.
- When query player IP from database, plugin fetch first row only. Because we order query results by timestamp DESC.
- Plugin compare player IP with database IP. If not match, it makes new record.

PHP Code:


Handle MyDataBase
;

public 
void OnPluginStart()
{
    
SQL_TConnect(connect_callback"test");
}

public 
void connect_callback(Handle ownerHandle hndl, const char[] errorany data)
{
    
MyDataBase hndl;

    if(
MyDataBase == null)
    {
        
SetFailState("Error: %s"error);
    }

    
SQL_TQuery(MyDataBasecreatetable_callback"CREATE TABLE IF NOT EXISTS `players` (`name` varchar(64),`steamid` varchar(64),`ip` varchar(64),`timestamp` timestamp DEFAULT CURRENT_TIMESTAMP)");
}


public 
void createtable_callback(Handle ownerHandle hndl, const char[] errorany data)
{
    if(
hndl == null)
    {
        
LogError("Create table Error: %s"error);
        return;
    }
}

public 
void OnClientPostAdminCheck(int client)
{
    
char query[255], auth[30];
    
    if(!
GetClientAuthId(clientAuthId_Engineauthsizeof(auth))) return;
    
    
Format(querysizeof(query), "SELECT `ip` FROM `players` WHERE `steamid`='%s' ORDER BY `players`.`timestamp` DESC"auth);
    
SQL_TQuery(MyDataBasequery_callbackqueryGetClientUserId(client));
}


public 
void query_callback(Handle ownerHandle hndl, const char[] errorany data)
{
    
int client GetClientOfUserId(data);

    if(
client == || !IsClientInGame(client)) return;

    
char query[255], name[32], auth[30], ip[60];
    
    
GetClientName(clientnamesizeof(name));
    
char name2[64];
    
SQL_EscapeString(MyDataBasenamename2sizeof(name2)); // Don't save raw names in database!!
    
    
GetClientAuthId(clientAuthId_Engineauthsizeof(auth));
    
    
GetClientIP(clientipsizeof(ip));


    
// Query is not UPDATE, INSERT or DELETE
    
if(hndl != null && SQL_HasResultSet(hndl))
    {
        if(
SQL_GetRowCount(hndl))
        {
            if(!
SQL_FetchRow(hndl)) return;

            
char buffer[64];
            
SQL_FetchString(hndl0buffersizeof(buffer)); // fetch first row only (timestamp DESC)
            //PrintToServer("buffer %s", buffer);
            
            
if(StrEqual(bufferip))
            {
                return;
            }
        }


        
Format(querysizeof(query), "INSERT INTO `players` (`name`,`steamid`,`ip`) VALUES ('%s', '%s','%s')"name2authip);
        
SQL_TQuery(MyDataBasesave_callbackquery);

    }

}

public 
void save_callback(Handle ownerHandle hndl, const char[] errorany data)
{
    
PrintToServer("Done");



old
__________________
Do not Private Message @me

Last edited by Bacardi; 05-10-2020 at 01:29.
Bacardi is offline