[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(hostuserpassbase);
    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(playeridpInfo[playerid][Nome], 21);
    
format(Query200"SELECT `Senha` FROM `Contas` WHERE `Nome`='%s'"pInfo[playerid][Nome]);
    
mysql_query(ConexaoQuery);
    
cache_get_value(0"Senha"pInfo[playerid][Senha], 20);
    if(
cache_num_rows() > 0)
    {
        
ShowPlayerDialog(playeridLOGINDIALOG_STYLE_PASSWORD"Logar""Digite sua senha para Logar""Logar""Sair");
    }
    else
    {
        
ShowPlayerDialog(playeridREGISTRODIALOG_STYLE_PASSWORD"Registro""Digite sua senha para Registrar""Registrar""Sair");
    }
    return 
1;
}
public 
OnPlayerDisconnect(playerid)
{
    
SalvarConta(playerid);
    return 
1;
}
public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    
GetPlayerName(playeridpInfo[playerid][Nome], 21);
    if(
dialogid == LOGIN)
    {
        if(!
strcmp(pInfo[playerid][Senha], inputtexttrue20))
        {
            new 
Query[200];
            
format(Query200"SELECT * FROM `Contas` WHERE `Nome`='%s'"pInfo[playerid][Nome]);
            
mysql_query(ConexaoQuery);
            
cache_get_value_name_int(0"Dinheiro"pInfo[playerid][Dinheiro]);
            
GivePlayerMoney(playeridpInfo[playerid][Dinheiro]);
            
SpawnPlayer(playerid);
            
SendClientMessage(playerid, -1"| INFO | Logado com sucesso.");
        }
        else
        {
            
SendClientMessage(playerid, -1"| ERRO | Senha incorreta. Digite ela correta!");
            
ShowPlayerDialog(playeridLOGINDIALOG_STYLE_PASSWORD"Logar""Digite sua senha para Logar""Logar""Sair");
        }
    }
    if(
dialogid == REGISTRO)
    {
        if(
strlen(inputtext) < || strlen(inputtext) > 20)
        {
            
SendClientMessage(playerid, -1"| ERRO | Digite senha de 6 a 20 caractйres!");
            
ShowPlayerDialog(playeridREGISTRODIALOG_STYLE_PASSWORD"Registro""Digite sua senha para Registrar""Registrar""Sair");
        }
        else
        {
            new 
Query[200];
            
format(Query200"INSERT INTO `Contas` (`Nome`, `Senha`, `Dinheiro`) VALUES ('%s', '%s', '%d')"pInfo[playerid][Nome], inputtextpInfo[playerid][Dinheiro] = 500);
            
mysql_query(ConexaoQuery);
            
GivePlayerMoney(playeridpInfo[playerid][Dinheiro]);
        }
    }
    return 
0;
}
static 
SalvarConta(playerid)
{
    new 
Query[200];
    
GetPlayerName(playeridpInfo[playerid][Nome], 21);
    
format(Querysizeof(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(ConexaoQuery);
    
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(Querysizeof(Query), "UPDATE `Contas` SET `Nome`='%s', `Senha`='%s', `Dinheiro`='%d'"
    
pInfo[playerid][Nome], 
    
pInfo[playerid][Senha], 
    
pInfo[playerid][Dinheiro] = GetPlayerMoney(playerid)); 
    
mysql_query(ConexaoQuery); 
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)