03.03.2019, 22:33
Estou com um problema, que nгo sei como resolver...
Quando registro dentro do servidor, й chamada a seguinte linha:
Atй aн tudo bem.
As outras variбveis, sгo nulas, ou seja, sу sгo alteradas atravйs do UPDATE, para que na linha INSERT nгo fiquem muitas linhas.
No caso, fica assim:
Atй aн, sem problema algum; registrei no servidor, e estб tudo normal, o registro no banco de dados foi criado.
Sу que apуs um tempo, nгo sei por que, as linhas na qual define a `Origin`, `Birthdate` e `NomeOOC`, ficam vazias
Daн pensei comigo...
As linhas da origem, data de nascimento e o nome ooc sгo strings
A senha tambйm й uma string
Entгo por quк o mesmo nгo acontece com a senha?
Decidi procurar na gamemode a linha na qual insere a senha no banco de dados
Percebi que a string estava com Escape, no caso, %e, ao invйs de string direta, como %s.
Entгo, pensando que resolveria o caso, defini todas as strings do UPDATE na qual eram string diretas, para strings com escape, entгo, ficou:
Ou seja, todas as strings tornaram-se strings escapadas.
Tentei registrar no servidor, e quando me conectei, dizia que minha senha estava errada...
Pensei ser um bug na database, e quando fui ver, os registros estavam assim:
Como resolver isso
Estou tentando jб tem 2 dias...
Quando registro dentro do servidor, й chamada a seguinte linha:
PHP код:
Dialog:RegisterScreen(playerid, response, listitem, inputtext[])
{
if (response)
{
if(strlen(inputtext) < 6) {
SendClientMessageEx(playerid, COLOR_LIGHTRED, "Vocк digitou uma senha invбlida (mнnimo 7 caracteres).");
Dialog_Show(playerid, RegisterScreen, DIALOG_STYLE_PASSWORD, "Californa Roleplay | Registro", "Olб, %s.\nSeja bem vindo ao Califуrnia Roleplay!\n\nInformaзгo: Sua conta ainda nгo estб registrada em nosso servidor!\n\n{FF6347}Digite uma senha abaixo para registrar-se:", "Registrar", "Sair", ReturnName(playerid, 0));
} else {
new
query[2580];
WP_Hash(PlayerData[playerid][pPassword], 129, inputtext);
mysql_format(MySQL, query, sizeof(query), "INSERT INTO `accounts` (`Username`, `Password`) VALUES ('%e', '%e')", ReturnName(playerid, 1), PlayerData[playerid][pPassword]);
mysql_tquery(MySQL, query, "OnAccountRegister", "i", playerid);
}
} else {
Kick(playerid);
}
return 1;
}
As outras variбveis, sгo nulas, ou seja, sу sгo alteradas atravйs do UPDATE, para que na linha INSERT nгo fiquem muitas linhas.
No caso, fica assim:
Atй aн, sem problema algum; registrei no servidor, e estб tudo normal, o registro no banco de dados foi criado.
Sу que apуs um tempo, nгo sei por que, as linhas na qual define a `Origin`, `Birthdate` e `NomeOOC`, ficam vazias
Daн pensei comigo...
As linhas da origem, data de nascimento e o nome ooc sгo strings
A senha tambйm й uma string
Entгo por quк o mesmo nгo acontece com a senha?
Decidi procurar na gamemode a linha na qual insere a senha no banco de dados
PHP код:
mysql_format(MySQL, query, sizeof(query), "INSERT INTO `accounts` (`Username`, `Password`) VALUES ('%e', '%e')", ReturnName(playerid, 1), PlayerData[playerid][pPassword], ReturnIP(playerid));
Entгo, pensando que resolveria o caso, defini todas as strings do UPDATE na qual eram string diretas, para strings com escape, entгo, ficou:
PHP код:
UpdatePlayerData(playerid)
{
new
query[3000];
if (GetPlayerState(playerid) != PLAYER_STATE_SPECTATING)
{
GetPlayerPos(playerid, PlayerData[playerid][pPos][0], PlayerData[playerid][pPos][1], PlayerData[playerid][pPos][2]);
GetPlayerFacingAngle(playerid, PlayerData[playerid][pPos][3]);
GetPlayerHealth(playerid, PlayerData[playerid][pHealth]);
GetPlayerArmour(playerid, PlayerData[playerid][pArmor]);
PlayerData[playerid][pMoney] = GetMoney(playerid);
}
format(query, sizeof query, "UPDATE `accounts` SET `Password` = '%e', `IP` = '%e', `Gender` = '%d', `Origin` = '%e', `Birthdate` = '%e'",
PlayerData[playerid][pPassword],
PlayerData[playerid][pIP],
PlayerData[playerid][pGender],
PlayerData[playerid][pOrigin],
PlayerData[playerid][pBirthdate]
);
format(query, sizeof query, "%s, `Skin` = '%d', `Registred` = '%d', `PosX` = '%f', `PosY` = '%f', `PosZ` = '%f', `PosA` = '%f', `Admin` = '%d', `NomeOOC` = '%e', `Money` = '%d', `PlayingHours` = '%d', `PlayingMinutes` = '%d', `Interior` = '%d', `World` = '%d'",
query,
PlayerData[playerid][pSkin],
PlayerData[playerid][pRegistred],
PlayerData[playerid][pPos][0],
PlayerData[playerid][pPos][1],
PlayerData[playerid][pPos][2],
PlayerData[playerid][pPos][3],
PlayerData[playerid][pAdmin],
PlayerData[playerid][pOOCName],
PlayerData[playerid][pMoney],
PlayerData[playerid][pPlayingHours],
PlayerData[playerid][pPlayingMinutes],
PlayerData[playerid][pInterior],
PlayerData[playerid][pWorld]
);
for (new i = 0; i < 13; i ++) {
format(query, sizeof(query), "%s, `Gun%d` = '%d', `Ammo%d` = '%d'", query, i + 1, PlayerData[playerid][pGuns][i], i + 1, PlayerData[playerid][pAmmo][i]);
}
format(query, sizeof query, "%s, `Health` = '%f', `Armor` = '%f', `Injured` = '%d', `Hunger` = '%d', `Thirst` = '%d', `JailTime` = '%d', `Prisoned` = '%d', `Entrance` = '%d', `Banned` = '%d', `BannedBy` = '%e', `BannedReason` = '%e' WHERE `ID` = '%d' LIMIT 1",
query,
PlayerData[playerid][pHealth],
PlayerData[playerid][pArmor],
PlayerData[playerid][pInjured],
PlayerData[playerid][pHunger],
PlayerData[playerid][pThirst],
PlayerData[playerid][pJailTime],
PlayerData[playerid][pPrisoned],
PlayerData[playerid][pEntrance],
PlayerData[playerid][pBanned],
PlayerData[playerid][pBannedBy],
PlayerData[playerid][pBannedReason],
PlayerData[playerid][pID]
);
mysql_tquery(MySQL, query);
return 1;
}
Tentei registrar no servidor, e quando me conectei, dizia que minha senha estava errada...
Pensei ser um bug na database, e quando fui ver, os registros estavam assim:
Como resolver isso
Estou tentando jб tem 2 dias...