Tem falha minha aqui? MYSQL -
maikons - 04.01.2015
Estou tentando fazer um sistema de mysql funcionar, olhando a wiki e alguns codigos de base, estб compilando, mas estou com um problema:
Quando eu registro no servidor, a conta nгo й salva no banco de dados !! Hб algo de errado aqui?
DB:
http://i.imgur.com/GII8c57.png
http://i.imgur.com/lTC3ev5.png
Onde eu usar as funзхes :
public OnPlayerDisconnect(playerid, reason)
pawn Код:
if(Logado[playerid] == 1) {
SaveStats(playerid);
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
pawn Код:
if(dialogid == DIALOG_REGISTER)
{
if(response)
{
if(!strlen(inputtext) || strlen(inputtext) > 128)
{
new string1[128];
SendClientMessage(playerid, COLOR_RED, "[ERROR]: You must insert a password between 1-128 characters!");
format(string1, sizeof(string1), "Welcome %s\nPlease register to contiune.",PlayerName(playerid));
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Register", string1, "Register", "Quit");
}
else if(strlen(inputtext) > 0 && strlen(inputtext) < 128)
{
new escpass[100];
mysql_escape_string(inputtext, escpass);
MySQL_Register(playerid, escpass);
}
}
if(!response)
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_MSGBOX, "Kicked - Notice", "You must register to play", "Close", "");
Kick(playerid);
}
}
if(dialogid == DIALOG_LOGIN)
{
if(!response)
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_MSGBOX, "Kicked - Notice", "You must login to play", "Close", "");
Kick(playerid);
}
if(response)
{
new query[200], rows, fields;
mysql_format(ConnectSQL, query, sizeof(query), "SELECT `Username` FROM players WHERE Username = '%s' AND Password = SHA1('%e')", PlayerName(playerid), inputtext);
mysql_query(ConnectSQL, query);
cache_get_data(rows, fields);
if(rows) MySQL_Login(playerid);
if(!rows)
{
InvalidLogins[playerid]++;
if(InvalidLogins[playerid]==4)
{
Kick(playerid);
}
else
{
new str1[256];
format(str1,sizeof(str1),"{FFFF00}Wrong password Attempt\n\n{00CC00}Dear %s, Enter Your Password:\n{FFFF00}Login chance: (%d/4)",PlayerName(playerid),4-InvalidLogins[playerid]);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"Login Panel",str1,"Login","Quit");
}
}
}
}
pawn Код:
stock MySQL_Register(playerid, passwordstring[])
{
new Query[512], IP[16];
GetPlayerIp(playerid, IP, sizeof(IP));
strcat(Query,"INSERT INTO `players`(`Username`,`Senha`)");
strcat(Query,"VALUES ('%s', SHA1('%s'),0,0,0,0,0,0,0,0,0,0,'%d/%d/%d')");
mysql_format(ConnectSQL,Query,sizeof(Query),Query,PlayerName(playerid),passwordstring);
mysql_query(ConnectSQL,Query,false);
Logado[playerid] = 1;
GivePlayerMoney(playerid, 5000);
return 1;
}
stock MySQL_Login(playerid)
{
if(IsPlayerConnected(playerid))
{
new Query[512], savestr[50], rows, fields;
mysql_format(ConnectSQL,Query, sizeof(Query), "SELECT * FROM `players` WHERE `Username` = '%s'", PlayerName(playerid));
mysql_query(ConnectSQL,Query);
cache_get_data(rows, fields);
if(rows)
{
cache_get_field_content(0, "money", savestr); money[playerid] = strval(savestr);
cache_get_field_content(0, "admin", savestr); admin[playerid] = strval(savestr);
cache_get_field_content(0, "VIP", savestr); VIP[playerid] = strval(savestr);
cache_get_field_content(0, "deaths", savestr); deaths[playerid] = strval(savestr);
Logado[playerid] = 1;
}
Logado[playerid] = 1;
}
return 1;
}
Essa parte eu peguei de base, nгo entendo, acho que й parada de encryptaзгo
pode ser aqui pq nгo entendo essa parte
pawn Код:
stock MySQL_Register(playerid, passwordstring[])
{
new Query[512], IP[16];
GetPlayerIp(playerid, IP, sizeof(IP));
strcat(Query,"INSERT INTO `players`(`Username`,`Senha`)");
strcat(Query,"VALUES ('%s', SHA1('%s'),0,0,0,0,0,0,0,0,0,0,'%d/%d/%d')");
mysql_format(ConnectSQL,Query,sizeof(Query),Query,PlayerName(playerid),passwordstring);
mysql_query(ConnectSQL,Query,false);
Re: Tem falha minha aqui? MYSQL -
MultiKill - 04.01.2015
Tenta:
pawn Код:
if(dialogid == DIALOG_REGISTER)
{
if(response)
{
if(!strlen(inputtext) || strlen(inputtext) > 128)
{
new string1[128];
SendClientMessage(playerid, COLOR_RED, "[ERROR]: You must insert a password between 1-128 characters!");
format(string1, sizeof(string1), "Welcome %s\nPlease register to contiune.",PlayerName(playerid));
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Register", string1, "Register", "Quit");
}
else if(strlen(inputtext) > 0 && strlen(inputtext) < 128)
{
//new escpass[100];
//mysql_escape_string(inputtext, escpass);
MySQL_Register(playerid, inputtext);
}
}
if(!response)
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_MSGBOX, "Kicked - Notice", "You must register to play", "Close", "");
Kick(playerid);
}
}
Nгo sei se vai resolver, eu jб tive problemas no sqlite, o mesmo problema com o seu e era culpa do Escape.
Re: Tem falha minha aqui? MYSQL -
maikons - 04.01.2015
@MultiKill nada, nгo ta registrando a conta lб no banco de dados
Eu registro no jogo, logo e tal, msm coisa, mas no phpmyadmin lб nгo entra nada, ai da como se a conta nгo tive-se registrado
Re: Tem falha minha aqui? MYSQL -
Dolpin - 04.01.2015
Preocupante o uso dos vetores...
Anyway os erros estгo aqui:
pawn Код:
stock MySQL_Register(playerid, passwordstring[])
{
new Query[512], IP[16];
GetPlayerIp(playerid, IP, sizeof(IP));
strcat(Query,"INSERT INTO `players`(`Username`,`Senha`)");
strcat(Query,"VALUES ('%s', SHA1('%s'),0,0,0,0,0,0,0,0,0,0,'%d/%d/%d')");
mysql_format(ConnectSQL,Query,sizeof(Query),Query,PlayerName(playerid),passwordstring);
mysql_query(ConnectSQL,Query,false);
Logado[playerid] = 1;
GivePlayerMoney(playerid, 5000);
return 1;
}
Traduzindo para o Pseudo-cуdigo:
INSERIR DENTRO DA TABELA players CAMPOS A SER INSERIDOS: (Nome, Senha) Valores ( 'Nomedele', 'Senha', 0, 0, 0,0 , 0);
Mas e os valores que vocк colocou 0? Tem que colocar, oque vai colocar, e tentar preencher todo o campo da tabela, ou seja se vocк criou a tabela assim:
-Nome
-Senha
-Admin
-Matou
-Mortes
Vocк "Obrigatoriamente" Terб que preencher os campos vazios, tente fazer isso, se nгo voltar a funcionar, passe o Log do MySQL.
Por exemplo:
pawn Код:
INSERT INTO `players`(`Username`,`Senha`, `Admin`, `Matou`, `Mortes`) VALUES ('%s', '%s', %d, %d, %d)
Re: Tem falha minha aqui? MYSQL -
maikons - 04.01.2015
Erro:
pawn Код:
strcat(Query,"VALUES ('%e', '%s', 500, 0, 0, 0)", PlayerName(playerid), passwordstring, money[playerid], kills[playerid], deaths[playerid]);
error 035: argument type mismatch (argument 3)
Agora ia ficar certo tirando esse erro?
pawn Код:
stock MySQL_Register(playerid, passwordstring[])
{
new Query[512];
strcat(Query,"INSERT INTO `players` (`Username`, `Password`, `money`, `admin`, `kills` ,`deaths`)");
strcat(Query,"VALUES ('%e', '%s', 500, 0, 0, 0)", PlayerName(playerid), passwordstring, money[playerid], kills[playerid], deaths[playerid]);
mysql_format(ConnectSQL,Query,sizeof(Query),Query,PlayerName(playerid),passwordstring);
mysql_query(ConnectSQL,Query,false);
Logado[playerid] = 1;
GivePlayerMoney(playerid, 5000);
return 1;
}
Pq? %e
Todo lugar q eu procurava tava %e nгo seria %s? (jб tentei pra ver se era isso tbm nгo compilou)