SA-MP Forums Archive
Mysql doesn't save anymore - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Mysql doesn't save anymore (/showthread.php?tid=629880)



Mysql doesn't save anymore - DuyDang2412 - 05.03.2017

yeah, yesterday, mysql saved the player data very well but today, i don't know the reason why it doesn't save anymore. This is my code, please tell me the resolution.
PHP код:
SaveCharacterInfo(playerid){
    new 
query[1024];
    
GetPlayerName(playeridCharacter[playerid][Username], MAX_PLAYER_NAME);
    
GetPlayerFacingAngle(playeridCharacter[playerid][posA]);
    
GetPlayerPos(playeridCharacter[playerid][posX], Character[playerid][posY], Character[playerid][posZ]);
    
GetPlayerHealth(playeridCharacter[playerid][Health]);
    
GetPlayerArmour(playeridCharacter[playerid][Armour]);
    
GetPlayerIp(playeridCharacter[playerid][IP], 16); 
    
Character[playerid][Skin] = GetPlayerSkin(playerid);
    
Character[playerid][Money] = GetPlayerMoney(playerid);
    
mysql_format(MHandlequerysizeof(query), "UPDATE `character` SET `Level` = %d, `Username` = '%e', `Password` = '%s', IP = '%s', `Money` = %d, `posX` = %0.2f, `posY` = %0.2f, `posZ` = %0.2f, `posA` = %0.2f, `Health` = %.1f, `Armour` = %.1f, `Admin` = %d, `Helper` = %d, `SecretKey` = '%e', `Age` = %d, `Sex` = %d, `Skin` = %d, `Int` = %d, `VW` = %d WHERE `Username` = '%e' LIMIT 1",
    
Character[playerid][Level], Character[playerid][Username], Character[playerid][Password], Character[playerid][IP], Character[playerid][Money], Character[playerid][posX], Character[playerid][posY], Character[playerid][posZ], Character[playerid][posA], Character[playerid][Health], Character[playerid][Armour], Character[playerid][Admin],
    
Character[playerid][Helper], Character[playerid][SecretKey], Character[playerid][Age], Character[playerid][Sex], Character[playerid][Skin], Character[playerid][Username], Character[playerid][Int], GetPlayerVirtualWorld(playerid));
    
mysql_query(MHandlequery);
    return 
1;
}
// My timer
task SavingCharacterInfo[30000]()
{
    foreach(new 
Player){
        
SaveCharacterInfo(i);
    }
    
printf("[MYSQL] - Saved database of all characters.");
}
public 
OnPlayerDisconnect(playeridreason){
    
SaveCharacterInfo(playerid);
    
gCharacterLogged{playerid} = 0;
    return 
1;




Re: Mysql doesn't save anymore - JessThompson - 05.03.2017

Please post your mysql table so i can see


Re: Mysql doesn't save anymore - DuyDang2412 - 05.03.2017

Quote:
Originally Posted by JessThompson
Посмотреть сообщение
Please post your mysql table so i can see
This is the screenshot of it.



Re: Mysql doesn't save anymore - JessThompson - 05.03.2017

And your player enum please :P


Re: Mysql doesn't save anymore - DuyDang2412 - 05.03.2017

Quote:
Originally Posted by JessThompson
Посмотреть сообщение
And your player enum please :P
Sure, here it is.
PHP код:
enum cInfo
{
    
Username[MAX_PLAYER_NAME],
    
Password[129],
    
Skin,
    
Sex,
    
IP[16],
    
Level,
    
Money,
    
Age,
    
Float:posX,
    
Float:posY,
    
Float:posZ,
    
Float:posA,
    
Float:Health,
    
Float:Armour,
    
Int,
    
VW,
    
Admin,
    
Helper,
    
SecretKey
}; 



Re: Mysql doesn't save anymore - JessThompson - 05.03.2017

Please try this, I have recoded your saving system, removed username, password saving as this should be done once it has been changed and not within the saving system itself. Please try this

Код:
SaveCharacterInfo(playerid)
{ 
    new query[1024]; 
    GetPlayerName(playerid, Character[playerid][Username], MAX_PLAYER_NAME); 
    GetPlayerFacingAngle(playerid, Character[playerid][posA]); 
    GetPlayerPos(playerid, Character[playerid][posX], Character[playerid][posY], Character[playerid][posZ]); 
    GetPlayerHealth(playerid, Character[playerid][Health]); 
    GetPlayerArmour(playerid, Character[playerid][Armour]); 
    GetPlayerIp(playerid, Character[playerid][IP], 16);  

    Character[playerid][Skin] = GetPlayerSkin(playerid); 
    Character[playerid][Money] = GetPlayerMoney(playerid);

    mysql_format(MHandle, query, sizeof(query), "UPDATE `character` SET `Level` = '%d', `IP` = '%s', `Money` = '%d', `posX` = '%f', `posY` = '%f', `posZ` = '%f', `posA` = '%f' WHERE `Username` = '%s'",
    Character[playerid][Level],   
    Character[playerid][IP],
    Character[playerid][Money],
    Character[playerid][posX], 
    Character[playerid][posY], 
    Character[playerid][posZ], 
    Character[playerid][posA],
    Character[playerid][Username]);
    mysql_query(MHandle, query);

    mysql_format(MHandle, query, sizeof(query), "UPDATE `character` SET `Health` = '%f', `Armour` = '%f', `Admin` = '%d', `Helper` = '%d', `SecretKey` = '%s', `Age` = '%d', `Sex` = '%d' WHERE `Username` = '%s'",
    Character[playerid][Health],   
    Character[playerid][Armour],
    Character[playerid][Admin],
    Character[playerid][Helper], 
    Character[playerid][SecretKey], 
    Character[playerid][Age], 
    Character[playerid][Sex],
    Character[playerid][Username]);
    mysql_query(MHandle, query);

    mysql_format(MHandle, query, sizeof(query), "UPDATE `character` SET `Int` = '%d', `VW` = '%d' WHERE `Username` = '%s'",
    Character[playerid][Int],   
    GetPlayerVirtualWorld(playerid),
    Character[playerid][Username]);
    mysql_query(MHandle, query);
    return 1; 
} 


task SavingCharacterInfo[30000]() 
{ 
    foreach(new i : Player){ 
        SaveCharacterInfo(i); 
    } 
    printf("[MYSQL] - Saved database of all characters."); 
}


public OnPlayerDisconnect(playerid, reason)
{ 
    SaveCharacterInfo(playerid); 
    gCharacterLogged{playerid} = 0; 
    return 1; 
}



Re: Mysql doesn't save anymore - DuyDang2412 - 05.03.2017

Is 'SecretKey' the problem? It must be SecretKey[size] right? And by the way, should I use '%e' or '%s' in mysql query?


Re: Mysql doesn't save anymore - JessThompson - 05.03.2017

Quote:
Originally Posted by DuyDang2412
Посмотреть сообщение
Is 'SecretKey' the problem? It must be SecretKey[size] right? And by the way, should I use '%e' or '%s' in mysql query?
if SecretKey is a string yes it must have [SIZE] within the enum


Use %e on string that need to be escaped so for instence a string that user types and will be entered right in the database %e escapes the string and stops it from being a sql injection


Re: Mysql doesn't save anymore - X337 - 05.03.2017

You put 'Character[playerid][Username]' after 'Character[playerid][Skin]' in format where it should be in the last.
Try this:
Код:
mysql_format(MHandle, query, sizeof(query), "UPDATE `character` SET `Level` = %d, `Username` = '%e', `Password` = '%s', IP = '%s', `Money` = %d, `posX` = %0.2f, `posY` = %0.2f, `posZ` = %0.2f, `posA` = %0.2f, `Health` = %.1f, `Armour` = %.1f, `Admin` = %d, `Helper` = %d, `SecretKey` = '%e', `Age` = %d, `Sex` = %d, `Skin` = %d, `Int` = %d, `VW` = %d WHERE `Username` = '%e' LIMIT 1",
Character[playerid][Level], Character[playerid][Username], Character[playerid][Password], Character[playerid][IP], Character[playerid][Money], Character[playerid][posX], Character[playerid][posY], Character[playerid][posZ], Character[playerid][posA], Character[playerid][Health], Character[playerid][Armour], Character[playerid][Admin], Character[playerid][Helper], Character[playerid][SecretKey], Character[playerid][Age], Character[playerid][Sex], Character[playerid][Skin], Character[playerid][Int], GetPlayerVirtualWorld(playerid), Character[playerid][Username]);



Re: Mysql doesn't save anymore - DuyDang2412 - 05.03.2017

OH YES, I have detected my problem.
PHP код:
mysql_format(MHandlequerysizeof(query), "UPDATE `character` SET `Level` = %d, `Username` = '%e', `Password` = '%s', IP = '%s', `Money` = %d, `posX` = %0.2f, `posY` = %0.2f, `posZ` = %0.2f, `posA` = %0.2f, `Health` = %.1f, `Armour` = %.1f, `Admin` = %d, `Helper` = %d, `SecretKey` = '%e', `Age` = %d, `Sex` = %d, `Skin` = %d, `Int` = %d, `VW` = %d WHERE `Username` = '%e' LIMIT 1"
    
Character[playerid][Level], Character[playerid][Username], Character[playerid][Password], Character[playerid][IP], Character[playerid][Money], Character[playerid][posX], Character[playerid][posY], Character[playerid][posZ], Character[playerid][posA], Character[playerid][Health], Character[playerid][Armour], Character[playerid][Admin], 
    
Character[playerid][Helper], Character[playerid][SecretKey], Character[playerid][Age], Character[playerid][Sex], Character[playerid][Skin], Character[playerid][Username], Character[playerid][Int], GetPlayerVirtualWorld(playerid)); 
It must be :
PHP код:
mysql_format(MHandlequerysizeof(query), "UPDATE `character` SET `Level` = %d, `Username` = '%e', `Password` = '%s', IP = '%s', `Money` = %d, `posX` = %0.2f, `posY` = %0.2f, `posZ` = %0.2f, `posA` = %0.2f, `Health` = %.1f, `Armour` = %.1f, `Admin` = %d, `Helper` = %d, `SecretKey` = '%e', `Age` = %d, `Sex` = %d, `Skin` = %d, `Int` = %d, `VW` = %d WHERE `Username` = '%e' LIMIT 1"
    
Character[playerid][Level], Character[playerid][Username], Character[playerid][Password], Character[playerid][IP], Character[playerid][Money], Character[playerid][posX], Character[playerid][posY], Character[playerid][posZ], Character[playerid][posA], Character[playerid][Health], Character[playerid][Armour], Character[playerid][Admin], 
    
Character[playerid][Helper], Character[playerid][SecretKey], Character[playerid][Age], Character[playerid][Sex], Character[playerid][Skin], Character[playerid][Int], GetPlayerVirtualWorld(playerid), [COLOR="Red"]Character[playerid][Username][/COLOR]);