• 08 Juillet 2025, 22:46:23


Auteur Sujet: Système de comptes par MySQL  (Lu 3358 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3551
    • Voir le profil
Système de comptes par MySQL
« le: 20 Mai 2013, 15:10:26 »
Bonjour,

Ca fait maintenant 3 jours que je suis plusieurs tutos afin de créer un système de création de compte par mySQL.
Dans chacun des tutos (en anglais) que j'ai suivi à la lettre, il y a des problèmes.

Celui-ci par exemple, quand je me connecte avec un pseudo que je n'ai jamais utilisé, dit que le compte existe. Ou alors, quand je fais /login avec un compte créé, et que je tape n'importe quel MDP ça marche.

Je cherche désespérément un bon tutoriel qu'il soit anglais ou français, mais fonctionnel ! Je ne cherche pas de Filterscript tout prêt, ça sert à rien car on apprend pas. Je me tourne vers vous, pour savoir si vous connaissiez un tutoriel, ou si vous vous sentez capable de m'expliquer par Teamviewer, forum comme vous voulez...

Je vous remercie d'avance  :smile:


Adju ♥
(-_-)



Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : Système de comptes par MySQL
« Réponse #1 le: 20 Mai 2013, 19:41:25 »
Salut :)

Et si tu nous envoyez ta fonction qui vérifie le mot de passe ? :p

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3551
    • Voir le profil
Re : Système de comptes par MySQL
« Réponse #2 le: 20 Mai 2013, 19:49:19 »
Tout est dans le tuto  :tongue:

EDIT: Je le met quand même, c'est pas à vous de chercher ;)

Vérifier si un compte existe.
Code: (pawn) [Sélectionner]
CheckAccountExists(account[])
{
new string[128];
    format(string, sizeof(string), "SELECT * FROM Users WHERE Name = '%s'", account);
    mysql_query(string);
   
mysql_store_result();

new value;
value = mysql_num_rows();
mysql_free_result();
return value;
}

Se connecter/enregistrer...
Code: (pawn) [Sélectionner]
RegisterPlayer(playerid, password[])
{
if(AccountExists[playerid])
return SendClientMessage(playerid, COLOR_RED, "[ACCOUNT] You're already registered!");

  if(PlayerLogged[playerid])
return SendClientMessage(playerid, COLOR_RED, "[ACCOUNT] You're already logged in!");

if(strlen(password) < 3 || strlen(password) >= 32)
return SendClientMessage(playerid, COLOR_RED, "[ACCOUNT] Your password is too short or too long!");

CheckMySQL();

new string[128];
format(string, sizeof(string), "INSERT INTO Users (Name,Password) VALUES ('%s','%s')", UserStats[playerid][Name], password);
mysql_query(string);

    AccountExists[playerid] = 1;
SendClientMessage(playerid, COLOR_YELLOW, "[ACCOUNT] Your account has been created, please login now!");

LoginPlayer(playerid, password);
return 1;
}

LoginPlayer(playerid, password[])
{
if(!AccountExists[playerid])
return SendClientMessage(playerid, COLOR_RED, "[ACCOUNT] You're not registered!");

if(PlayerLogged[playerid])
    return SendClientMessage(playerid, COLOR_RED, "[ACCOUNT] You're already logged in!");

  if(strlen(password) < 3 || strlen(password) >= 32)
    return SendClientMessage(playerid, COLOR_RED, "[ACCOUNT] Your password is too short or too long!");

CheckMySQL();

    new string[128];
format(string, sizeof(string), "SELECT * FROM Users WHERE Name = '%s' AND Password = '%s'", UserStats[playerid][Name], password);
mysql_query(string);
mysql_store_result();

if(!mysql_num_rows())
return SendClientMessage(playerid, COLOR_RED, "[ACCOUNT] Incorrect password!");

new row[128]; // The length of 1 'row' total.
new field[4][32]; // [4] = Amount of fields, [24] = Max length of the bigest field.

mysql_fetch_row_format(row, "|");
explode(row, field, "|");
mysql_free_result();

// The field starts here with 1, because the field 'Name' = 0, and we already have the name in a variable.
format(UserStats[playerid][Password], 32, "%s", field[1]);
  UserStats[playerid][Admin] = strval(field[2]);
  UserStats[playerid][Money] = strval(field[3]);

  GivePlayerMoney(playerid, UserStats[playerid][Money]);
 

format(string, sizeof(string), "[ACCOUNT] Welcome back %s, you are now logged in!", UserStats[playerid][Name]);
    SendClientMessage(playerid, COLOR_YELLOW, string);

    PlayerLogged[playerid] = 1;
    return 1;
}

SavePlayer(playerid)
{
if(!PlayerLogged[playerid])
return 0;

    UserStats[playerid][Money] = GetPlayerMoney(playerid);
   

CheckMySQL();
   
    new string[256];
    format(string, sizeof(string), "UPDATE Users SET Password='%s',Admin='%d',Money='%d' WHERE Name='%s'", UserStats[playerid][Password], UserStats[playerid][Admin], UserStats[playerid][Money], UserStats[playerid][Name]);
    mysql_query(string);
    return 1;
}


Adju ♥
(-_-)



Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : Système de comptes par MySQL
« Réponse #3 le: 20 Mai 2013, 20:41:52 »
Je ne vois nul part ou tu vérifie si les mots de passes sont les mêmes :p

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : Système de comptes par MySQL
« Réponse #4 le: 20 Mai 2013, 20:50:13 »
Je ne vois même pas où la fonction CheckAccountExists(account[]) est utilisée... Visiblement tu as un tableau dans lequel les booléens de cette fonction sont enregistrés, pourrais-tu nous le montrer ?

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3551
    • Voir le profil
Re : Système de comptes par MySQL
« Réponse #5 le: 20 Mai 2013, 20:53:08 »
Code: (pawn) [Sélectionner]
public OnPlayerConnect(playerid)
{
GetPlayerName(playerid, UserStats[playerid][Name], MAX_PLAYER_NAME);

if(CheckAccountExists(UserStats[playerid][Name])) AccountExists[playerid] = 1;
else AccountExists[playerid] = 0;
return 1;
}



Adju ♥
(-_-)



Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : Système de comptes par MySQL
« Réponse #6 le: 20 Mai 2013, 21:51:03 »
Ce que je voulais dire c'est que tu vérifie juste si tu as récupérer des données via ta requête grâce à :

if(!mysql_num_rows())

mais en aucun cas tu vérifie la similitude des 2 chaines de caractères.

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Système de comptes par MySQL
« Réponse #7 le: 21 Mai 2013, 15:08:55 »
Salut,

chneubeul, vérifie la requête dans le LoginPlayer:

        format(string, sizeof(string), "SELECT * FROM Users WHERE Name = '%s' AND Password = '%s'", UserStats[playerid][Name], password);

elle est là la vérification du mot de passe.

++Sim++





Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : Système de comptes par MySQL
« Réponse #8 le: 21 Mai 2013, 17:22:02 »
Salut,

Ah oui, je n'y avait pas fait attention. :)

Envoie nous le code ou tu appelle "LoginPlayer" stp

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3551
    • Voir le profil
Re : Système de comptes par MySQL
« Réponse #9 le: 21 Mai 2013, 19:59:43 »
Voilà voilà

Code: (pawn) [Sélectionner]
LoginPlayer(playerid, password[])
{
if(!AccountExists[playerid])
return SendClientMessage(playerid, COLOR_RED, "[ACCOUNT] You're not registered!");

if(PlayerLogged[playerid])
    return SendClientMessage(playerid, COLOR_RED, "[ACCOUNT] You're already logged in!");

  if(strlen(password) < 3 || strlen(password) >= 32)
    return SendClientMessage(playerid, COLOR_RED, "[ACCOUNT] Your password is too short or too long!");

CheckMySQL();

    new string[128];
format(string, sizeof(string), "SELECT * FROM Users WHERE Name = '%s' AND Password = '%s'", UserStats[playerid][Name], password);
mysql_query(string);
mysql_store_result();

if(!mysql_num_rows())
return SendClientMessage(playerid, COLOR_RED, "[ACCOUNT] Incorrect password!");

new row[128]; // The length of 1 'row' total.
new field[4][32]; // [4] = Amount of fields, [24] = Max length of the bigest field.

mysql_fetch_row_format(row, "|");
explode(row, field, "|");
mysql_free_result();

// The field starts here with 1, because the field 'Name' = 0, and we already have the name in a variable.
format(UserStats[playerid][Password], 32, "%s", field[1]);
  UserStats[playerid][Admin] = strval(field[2]);
  UserStats[playerid][Money] = strval(field[3]);

  GivePlayerMoney(playerid, UserStats[playerid][Money]);
 

format(string, sizeof(string), "[ACCOUNT] Welcome back %s, you are now logged in!", UserStats[playerid][Name]);
    SendClientMessage(playerid, COLOR_YELLOW, string);

    PlayerLogged[playerid] = 1;
    return 1;
}


Adju ♥
(-_-)



Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : Système de comptes par MySQL
« Réponse #10 le: 21 Mai 2013, 22:05:32 »
non la ou tu l'appelles :p

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3551
    • Voir le profil
Re : Système de comptes par MySQL
« Réponse #11 le: 22 Mai 2013, 17:54:23 »
Ah oui excuse moi la seule fois où elle est appelée c'est dans /login

Code: (pawn) [Sélectionner]
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(register, 8, cmdtext);
dcmd(login, 5, cmdtext);
return 0;
}

dcmd_register(playerid, params[])
{
RegisterPlayer(playerid, params);
return 1;
}

dcmd_login(playerid, params[])
{
LoginPlayer(playerid, params);
return 1;
}


Adju ♥
(-_-)



Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : Système de comptes par MySQL
« Réponse #12 le: 22 Mai 2013, 21:52:46 »
Salut :)

Je ferais quelques test avec ta requête SQL demain voir ce que ça retourne :)

A+, Sam.
:medieval_sword2:

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3551
    • Voir le profil
Re : Système de comptes par MySQL
« Réponse #13 le: 22 Mai 2013, 22:20:49 »
Je te remercie  :smile:


Adju ♥
(-_-)



Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : Système de comptes par MySQL
« Réponse #14 le: 23 Mai 2013, 18:54:12 »
Salut :)

J'ai tester et comparer par rapport à mon script, enfaite si tu SELECT * tu récupère des choses quand même.
Du coup, je comprend pas pourquoi, j'vais faire plus de test pour mieux comprendre, mais en selectionant par exemple SELECT id, le script fonctionne :)

Voilà tout,
A+, Sam.
:medieval_sword2: