[FilterScript] Registro/Login MySQL
#1

@Att 04/03/2018
PHP код:
#include a_samp
#include a_mysql
#define host "localhost"
#define user "root"
#define pass ""
#define base "samp"
#define REGISTRO         100
#define LOGIN           200
main(){}
enum PlayerInfo
{
   
Nome[21],
   
Senha[20],
   
Dinheiro
}
new 
pInfo[MAX_PLAYERS][PlayerInfo];
new 
MySQL:Conexao;
public 
OnGameModeInit()
{
    
Conexao = mysql_connect(host, user, pass, base);
    if(
mysql_errno(Conexao) !=0) return print("Nгo foi possнvel conectar a base de dados.");
    else print(
"Conexгo com a base de dados efetuada com sucesso.");
    
mysql_query(Conexao, "CREATE TABLE IF NOT EXISTS `Contas`(`Nome` VARCHAR(21) NOT NULL, `Senha` VARCHAR(20) NOT NULL, `Dinheiro` INT NOT NULL)");
    return 
1;
}
public 
OnPlayerConnect(playerid)
{
    
ResetarVariaveis(playerid); // Resetar Variбveis
    
new Query[200];
    
GetPlayerName(playerid, pInfo[playerid][Nome], 21);
    
format(Query, 200, "SELECT `Senha` FROM `Contas` WHERE `Nome`='%s'", pInfo[playerid][Nome]);
    
mysql_query(Conexao, Query);
    
cache_get_value(0, "Senha", pInfo[playerid][Senha], 20);
    if(
cache_num_rows() > 0)
    {
        
ShowPlayerDialog(playerid, LOGIN, DIALOG_STYLE_PASSWORD, "Logar", "Digite sua senha para Logar", "Logar", "Sair");
    }
    else
    {
        
ShowPlayerDialog(playerid, REGISTRO, DIALOG_STYLE_PASSWORD, "Registro", "Digite sua senha para Registrar", "Registrar", "Sair");
    }
    return 
1;
}
public 
OnPlayerDisconnect(playerid)
{
    
SalvarConta(playerid);
    return 
1;
}
public 
OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    
GetPlayerName(playerid, pInfo[playerid][Nome], 21);
    if(
dialogid == LOGIN)
    {
        if(!
strcmp(pInfo[playerid][Senha], inputtext, true, 20))
        {
            new 
Query[200];
            
format(Query, 200, "SELECT * FROM `Contas` WHERE `Nome`='%s'", pInfo[playerid][Nome]);
            
mysql_query(Conexao, Query);
            
cache_get_value_name_int(0, "Dinheiro", pInfo[playerid][Dinheiro]);
            
GivePlayerMoney(playerid, pInfo[playerid][Dinheiro]);
            
SpawnPlayer(playerid);
            
SendClientMessage(playerid, -1, "| INFO | Logado com sucesso.");
        }
        else
        {
            
SendClientMessage(playerid, -1, "| ERRO | Senha incorreta. Digite ela correta!");
            
ShowPlayerDialog(playerid, LOGIN, DIALOG_STYLE_PASSWORD, "Logar", "Digite sua senha para Logar", "Logar", "Sair");
        }
    }
    if(
dialogid == REGISTRO)
    {
        if(
strlen(inputtext) < 6 || strlen(inputtext) > 20)
        {
            
SendClientMessage(playerid, -1, "| ERRO | Digite senha de 6 a 20 caractйres!");
            
ShowPlayerDialog(playerid, REGISTRO, DIALOG_STYLE_PASSWORD, "Registro", "Digite sua senha para Registrar", "Registrar", "Sair");
        }
        else
        {
            new 
Query[200];
            
format(Query, 200, "INSERT INTO `Contas` (`Nome`, `Senha`, `Dinheiro`) VALUES ('%s', '%s', '%d')", pInfo[playerid][Nome], inputtext, pInfo[playerid][Dinheiro] = 500);
            
mysql_query(Conexao, Query);
            
GivePlayerMoney(playerid, pInfo[playerid][Dinheiro]);
        }
    }
    return 
0;
}
static 
SalvarConta(playerid)
{
    new 
Query[200];
    
GetPlayerName(playerid, pInfo[playerid][Nome], 21);
    
format(Query, sizeof(Query), "UPDATE `Contas` SET `Nome`='%s', `Senha`='%s', `Dinheiro`='%d' WHERE `Nome`='%s'",
    
pInfo[playerid][Nome],
    
pInfo[playerid][Senha],
    
pInfo[playerid][Dinheiro] = GetPlayerMoney(playerid),
    
pInfo[playerid][Nome]);
    
mysql_query(Conexao, Query);
    
ResetarVariaveis(playerid);
}
static 
ResetarVariaveis(playerid)
{
    
pInfo[playerid][Nome] = 0;
    
pInfo[playerid][Senha] = 0;
    
pInfo[playerid][Dinheiro] = 0;
    return 
1;
} 
Reply
#2

Parece bom, mas uma dica, pra usar mysql_query sem deletar o cache vc deve saber que esta a desperdiзar memoria, sem, contar que o sistema fica vulnerбvel. Recomendo dar uma olha na Wiki

Ou use mysql_tquery || mysql_pquery oque acho mais seguro.

Do mais esta bem simples. que sirva de aprendizado. reputado.
Reply
#3

PHP код:
format(Query, sizeof(Query), "UPDATE `Contas` SET `Nome`='%s', `Senha`='%s', `Dinheiro`='%d'", 
    
pInfo[playerid][Nome], 
    
pInfo[playerid][Senha], 
    
pInfo[playerid][Dinheiro] = GetPlayerMoney(playerid)); 
    
mysql_query(Conexao, Query); 
Esta query atualizarб os dados de todos os registros na tabela, vocк deve usar o WHERE para dizer em qual linha ele deve atualizar

Aconselho fortemente adicionar a coluna ID a tabela e atribuir esta coluna como auto_increment assim podendo usar nas querys de UPDATE e SELECT
Reply
#4

PHP код:
Aconselho fortemente adicionar a coluna ID a tabela e atribuir esta coluna como auto_increment assim podendo usar nas querys de UPDATE e SELECT 
Da para fazer com o nome do jogador.
Reply
#5

Vlw Galera! Essa de ID eu já sabia como fazer, eu só achei que não precisava.. Próxima Versão vou colocar tudo oque vocês quiserem.
PHP код:
@TOPIC Cleyson VLW <3
@MBJ Obrigado pelo conselho.
#Marlun Valeu Tbm <3 
Reply
#6

Quote:
Originally Posted by Marllun
Посмотреть сообщение
PHP код:
Aconselho fortemente adicionar a coluna ID a tabela e atribuir esta coluna como auto_increment assim podendo usar nas querys de UPDATE e SELECT 
Da para fazer com o nome do jogador.
Da pra fazer, mas nгo й o certo, o ideal й ter uma coluna como identificador e numйrico, nгo й bom usar uma string como chave primбria, e nesse caso nem й chave primбria й sу uma string normal
Reply
#7

уtimo, realmente adorei o seu trabalho!
Reply
#8

Quote:
Originally Posted by IgorLuiz
Посмотреть сообщение
уtimo, realmente adorei o seu trabalho!
Valeu ! Abraзos. <3
Reply
#9

Ele funciona? preciso criar o banco de dados com que nome?
Reply
#10

Quote:
Originally Posted by FabioGTP
Посмотреть сообщение
Ele funciona? preciso criar o banco de dados com que nome?
Sim, o nome do banco de dados й "samp"
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)