[Ajuda] PROBLEMA COM LOGIN NO MySQL SAMP.
#1

Problema ao fazer login.
Eu entro no servidor ele checa se o usuario existe, atй aн tudo bem, mas na hora de checar se a senha estб correta ele nгo checa, simplesmente ele entra, pode a senha ser "123", e o cara colocar no dialog "fsadsada", sempre vai entrar, alguem pode dar uma ajudinha aqui? kkk
Nгo faзo a menor ideia de como faзo pra comparar 2 textos.
A que estб em PlayerInfo[playerid][pSenha] e oque estб no inputtext.
Dб um help aqui pls :c

Code:
#include <a_samp>
#include <a_mysql>

#define MySQL_HOST	"localhost"
#define MySQL_USER  "root"
#define MySQL_PASS  ""
#define MySQL_DATA  "banco"

#define mysql_fetch_row(%1)  mysql_fetch_row_format(%1,"|")

#define DIALOG_REGISTRO     1
#define DIALOG_LOGIN        2

new MySQL:con;

enum pInfo
{
    pID,
    pNick[24],
    pSenha[20],
    pScore,
    pDinheiro,
    pBanco,
    pAdmin,
     bool:pLogado
};
new PlayerInfo[MAX_PLAYERS][pInfo];

main(){
}

public OnGameModeInit(){

    
	con = mysql_connect(MySQL_HOST,MySQL_USER,MySQL_PASS,MySQL_DATA);
	mysql_query(con,"CREATE TABLE IF NOT EXISTS contas(id INT(11) NOT NULL AUTO_INCREMENT, nick VARCHAR(24) NOT NULL, senha VARCHAR(40) NOT NULL, score INT(11) DEFAULT '15', banco BIGINT(20) NOT NULL,dinheiro BIGINT(20) NOT NULL)");
	if(mysql_errno(con) != 0){
	    printf("Falha na conexгo com o banco de dados.");
	}else{
	    printf("Conexгo com o banco de dados bem sucedida.");
	}
	return 1;
}

public OnGameModeExit()
{
    for(new i = 0; i < MAX_PLAYERS; i++) SalvarDados(i);
    mysql_close(con);
    return 1;
}

public OnPlayerConnect(playerid)
{
    GetPlayerName(playerid, PlayerInfo[playerid][pNick], 24);
    new Query[90];
    mysql_format(con, Query, sizeof(Query), "SELECT * FROM `contas` WHERE nick='%s'", PlayerInfo[playerid][pNick]);
    mysql_tquery(con, Query, "PegarSenha", "i", playerid);
    mysql_format(con, Query, sizeof(Query), "SELECT * FROM `contas` WHERE nick='%s'", PlayerInfo[playerid][pNick]);
    mysql_tquery(con, Query, "VerificarContas", "i", playerid);

    return 1;
}
forward VerificarContas(playerid);
public VerificarContas(playerid)
{
    new Dialog[240];

    if(cache_num_rows() > 0)
    {
        cache_get_value(0, "Senha", PlayerInfo[playerid][pSenha], 20);
        format(Dialog, sizeof(Dialog),"{F8F8FF}Bem Vindo(a) Ao Servidor {058AFF}%s{F8F8FF}\n\nVocк ja tem uma Conta registrada\n\nDigite sua senha para Logar\n\nStatus: {1E90FF}Registrado", PlayerInfo[playerid][pNick]);
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", Dialog, "Logar", "Cancelar");
        } else {
        format(Dialog, sizeof(Dialog),"{F8F8FF}Bem Vindo(a) Ao Servidor {058AFF}%s{F8F8FF}\n\nVocк nгo tem uma Conta registrada\n\nDigite uma senha para Registrar\n\nStatus: {058AFF}N/A Registrado", PlayerInfo[playerid][pNick]);
        ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_PASSWORD, "Registro", Dialog, "Registrar", "Cancelar");
    }
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    SalvarDados(playerid);
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case DIALOG_REGISTRO:
        {
            if(!response) return Kick(playerid);

            if(strlen(inputtext) < 4 || strlen(inputtext) > 20)
            {
                SendClientMessage(playerid, -1, "ERRO:{FFFFFF} A senha deve conter de 4 a 20 caracteres!");

                new Dialog[240];
                format(Dialog, sizeof(Dialog),"{F8F8FF}Bem Vindo(a) Ao Servidor {058AFF}%s{F8F8FF}\n\nVocк nгo tem uma Conta registrada\n\nDigite uma senha para Registrar\n\nStatus: {058AFF}N/A Registrado", PlayerInfo[playerid][pNick]);
                ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_PASSWORD, "Registro", Dialog, "Registrar", "Cancelar");

                } else {

                new Query[100];
                mysql_format(con, Query, sizeof(Query), "INSERT INTO `contas`(`nick`, `senha`) VALUES ('%s', '%s')", PlayerInfo[playerid][pNick], inputtext);
                mysql_tquery(con, Query, "DadosRegistrados", "i", playerid);
                RegistrarDados(playerid);
            }
        }

        case DIALOG_LOGIN:
        {
            if(!response) return Kick(playerid);
            if(!strlen(inputtext))
            {
            	SendClientMessage(playerid, -1, "ERRO:{FFFFFF} Vocк nгo digitou a senha !");
                ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Digite sua senha:", "Digite sua senha abaixo para logar-se", "Logar", "Voltar");
                return 1;
            }
            if(!strcmp(PlayerInfo[playerid][pSenha], inputtext, true, 20))
            {
                new Query[70];
                mysql_format(con, Query, sizeof(Query), "SELECT * FROM `contas` WHERE nick='%s'", PlayerInfo[playerid][pNick]);
                mysql_tquery(con, Query, "CarregarContas", "d", playerid);
                PlayerInfo[playerid][pLogado] = true;

                } else {
                SendClientMessage(playerid, -1, "ERRO:{FFFFFF} Senha incorreta !");
                ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Digite sua senha:", "Digite sua senha abaixo para logar-se", "Logar", "Voltar");
            }
        }
    }
    return 1;
}

public OnPlayerUpdate(playerid)
{
    new Query[70];
	mysql_format(con, Query, sizeof(Query), "SELECT * FROM `contas` WHERE nick='%s'", PlayerInfo[playerid][pNick]);
	mysql_tquery(con, Query, "AtualizarConta", "i", playerid);
	if(GetPlayerMoney(playerid) != PlayerInfo[playerid][pDinheiro]){
		GivePlayerMoney(playerid,- GetPlayerMoney(playerid));
	    GivePlayerMoney(playerid, PlayerInfo[playerid][pDinheiro]);
	}
	if(GetPlayerScore(playerid) != PlayerInfo[playerid][pScore]){
	    SetPlayerScore(playerid,PlayerInfo[playerid][pScore]);
	}
	return 1;
}

forward AtualizarConta(playerid);
public AtualizarConta(playerid)
{
    cache_get_value_int(0, "score", PlayerInfo[playerid][pScore]);
    cache_get_value_int(0, "dinheiro", PlayerInfo[playerid][pDinheiro]);
	cache_get_value_int(0, "banco", PlayerInfo[playerid][pBanco]);
	
    return 1;
}

forward DadosRegistrados(playerid);
public DadosRegistrados(playerid)
{
	printf("-> Nova conta registrada ID: %d", PlayerInfo[playerid][pID]);
	return 1;
}

forward CarregarContas(playerid);
public CarregarContas(playerid)
{

    cache_get_value_int(0, "id", PlayerInfo[playerid][pID]);
    cache_get_value_int(0, "admin", PlayerInfo[playerid][pAdmin]);
    cache_get_value_int(0, "score", PlayerInfo[playerid][pScore]);
    cache_get_value_int(0, "dinheiro", PlayerInfo[playerid][pDinheiro]);
	cache_get_value_int(0, "banco", PlayerInfo[playerid][pBanco]);

    CarregarDados(playerid);
    return 1;
}

forward PegarSenha(playerid);
public PegarSenha(playerid)
{
    cache_get_value(0, "senha", PlayerInfo[playerid][pSenha]);
    
    CarregarDados(playerid);
    return 1;
}

stock RegistrarDados(playerid)
{
    PlayerInfo[playerid][pDinheiro] = 500;
    PlayerInfo[playerid][pBanco] = 1000;
    PlayerInfo[playerid][pAdmin] = 0;
    PlayerInfo[playerid][pScore] = 15;
    CarregarDados(playerid);
    return 1;
}

stock CarregarDados(playerid)
{
    PlayerInfo[playerid][pLogado] = true;
    SetPlayerScore(playerid, PlayerInfo[playerid][pScore]);
	GivePlayerMoney(playerid,- GetPlayerMoney(playerid));
    GivePlayerMoney(playerid, PlayerInfo[playerid][pDinheiro]);
    return 1;
}

stock SalvarDados(playerid)
{
	if(PlayerInfo[playerid][pLogado] == false) return 1;
    PlayerInfo[playerid][pDinheiro] = GetPlayerMoney(playerid);
    new Query[350];
    mysql_format(con, Query, sizeof(Query), "UPDATE `contas` SET `score`=%d, `admin`=%d, `dinheiro`=%d, `banco`=%d WHERE `nick`=%d",
    PlayerInfo[playerid][pScore],
    PlayerInfo[playerid][pAdmin],
    PlayerInfo[playerid][pDinheiro],
    PlayerInfo[playerid][pBanco],
	PlayerInfo[playerid][pNick]);
    mysql_tquery(con, Query, "DadosSalvos","d", playerid);


    PlayerInfo[playerid][pScore] = 0;
    PlayerInfo[playerid][pAdmin] = 0;
    PlayerInfo[playerid][pDinheiro] = 0;
    PlayerInfo[playerid][pBanco] = 0;
    PlayerInfo[playerid][pLogado] = false;
    return 1;
}

forward DadosSalvos(playerid);
public DadosSalvos(playerid) return printf("-> Conta salva ID: %d", PlayerInfo[playerid][pID]);
Aн estб todo o cуdigo da GM.

Fonte do Cуdigo: Cleyson
Reply
#2

Tente trocar esta parte:
PHP Code:
if(!strcmp(PlayerInfo[playerid][pSenha], inputtexttrue20)) 
Para essa:
PHP Code:
if(strcmp(PlayerInfo[playerid][pSenha], inputtextfalse) == 0
Reply
#3

Quote:
Originally Posted by ipsLuan
View Post
Tente trocar esta parte:
PHP Code:
if(!strcmp(PlayerInfo[playerid][pSenha], inputtexttrue20)) 
Para essa:
PHP Code:
if(strcmp(PlayerInfo[playerid][pSenha], inputtextfalse) == 0
Mesma coisa, eu adoro MySQL mas eu faзo й desistir desse jeito, toda (TODA) vez que tento fazer um sistema de MySQL pro samp sempre da esse mesmo problema.
Reply
#4

Pega esse aqui como base
PHP Code:
//OnPlayerConnect
mysql_format(Conexaostrsizeof(str), "SELECT `Senha` FROM `Contas` WHERE `Nome`='%s'"Player[playerid][Nome]);
    
mysql_tquery(Conexaostr"VerificarAcc""i"playerid);

public 
VerificarAcc(playerid

    new 
Dialog[240];
     
    if(
cache_num_rows() > 0
    {
        
cache_get_value(0"Senha"Player[playerid][Senha], 20); 
         
        
format(Dialogsizeof(Dialog),"{F8F8FF}Bem Vindo(a) Ao Servidor {058AFF}%s{F8F8FF}\n\nVocк ja tem uma Conta registrada\n\nDigite sua senha para Logar\n\nStatus: {1E90FF}Registrado"Player[playerid][Nome]); 
        
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Registro"Dialog"Logar""Cancelar"); 

        } else { 
         
        
format(Dialogsizeof(Dialog),"{F8F8FF}Bem Vindo(a) Ao Servidor {058AFF}%s{F8F8FF}\n\nVocк nгo tem uma Conta registrada\n\nDigite uma senha para Registrar\n\nStatus: {058AFF}N/A Registrado"Player[playerid][Nome]); 
        
ShowPlayerDialog(playeridDIALOG_REGISTRODIALOG_STYLE_PASSWORD"Registro"Dialog"Registrar""Cancelar"); 
    } 
    return 
1

Reply
#5

Quote:
Originally Posted by Malandrin
View Post
Pega esse aqui como base
PHP Code:
//OnPlayerConnect
mysql_format(Conexaostrsizeof(str), "SELECT `Senha` FROM `Contas` WHERE `Nome`='%s'"Player[playerid][Nome]);
    
mysql_tquery(Conexaostr"VerificarAcc""i"playerid);
public 
VerificarAcc(playerid

    new 
Dialog[240];
     
    if(
cache_num_rows() > 0
    {
        
cache_get_value(0"Senha"Player[playerid][Senha], 20); 
         
        
format(Dialogsizeof(Dialog),"{F8F8FF}Bem Vindo(a) Ao Servidor {058AFF}%s{F8F8FF}\n\nVocк ja tem uma Conta registrada\n\nDigite sua senha para Logar\n\nStatus: {1E90FF}Registrado"Player[playerid][Nome]); 
        
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Registro"Dialog"Logar""Cancelar"); 
        } else { 
         
        
format(Dialogsizeof(Dialog),"{F8F8FF}Bem Vindo(a) Ao Servidor {058AFF}%s{F8F8FF}\n\nVocк nгo tem uma Conta registrada\n\nDigite uma senha para Registrar\n\nStatus: {058AFF}N/A Registrado"Player[playerid][Nome]); 
        
ShowPlayerDialog(playeridDIALOG_REGISTRODIALOG_STYLE_PASSWORD"Registro"Dialog"Registrar""Cancelar"); 
    } 
    return 
1

AAAH DANADO.
Deu certo mano, valeu ai kk
REP +

@edit

Parei pra olhar agora, acho que o problema foi ter deixado na parte de checar se a conta existe assim:

PHP Code:
cache_get_value(0"Senha"Player[playerid][pSenha], 20); 
quando o certo era:

PHP Code:
cache_get_value(0"senha"Player[playerid][pSenha], 20); 
Reply
#6

Tente trocar esses cуdigos abaixo se nгo der o erro estб neste local do strcmp

PHP Code:
Esse cod:

if(!
strcmp(PlayerInfo[playerid][pSenha], inputtexttrue20))

Por esse cod:

if(
strcmp(inputtextPlayerInfo[playerid][Senha], true) == 0
Reply
#7

Quote:
Originally Posted by AutoMatic2
View Post
Tente trocar esses cуdigos abaixo se nгo der o erro estб neste local do strcmp

PHP Code:
Esse cod:
if(!
strcmp(PlayerInfo[playerid][pSenha], inputtexttrue20))
Por esse cod:
if(
strcmp(inputtextPlayerInfo[playerid][Senha], true) == 0
Poderia sim ser na checagem de comparaзгo de strings mas o dele nem se quer chegou a carregar a string da senha =)

#MySql й vida <3
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)