JeuWeb - Crée ton jeu par navigateur
probleme de test d'existence d'un email en DB - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : probleme de test d'existence d'un email en DB (/showthread.php?tid=1673)

Pages : 1 2 3 4 5


RE: probleme de test d'existence d'un email en DB - gameprog2 - 03-10-2010

D'après ma logique algorithmique, ça devrait être ça :

1) Teste si le pseudo est connu dans la DB
* Si oui au test pseudo : Lit le passe dans la DB correspondant au pseudo et le compare au pass saisi.
* Si non au test pseudo : Met "existe" (boolean) à true.

cela ne fonctionne pas :/


$result = mysql_query("SELECT * FROM joueurs WHERE pseudo = '$pseudo'");
if(mysql_num_rows($result) == 0)
{
$msg="Ce pseudo n'existe pas !";
$existe=true; // existe pas.
}else
{
// Teste si le mot de passe existe déjà dans les champs DB de ce joueur.
$result = mysql_query("SELECT passe FROM joueurs WHERE pseudo= '$pseudo'");
if($result==$pass)
{
$msg="Ce mot de passe est mauvais !";
$existe=true; // n'existe pas.
}
}



RE: probleme de test d'existence d'un email en DB - Sephi-Chan - 03-10-2010

Peut-être que cela conviendrait :


$result = mysql_query("SELECT id FROM joueurs WHERE pseudo = '$pseudo';");
if(mysql_num_rows($result) == 0){
$errors['pseudo'][] = "Ce pseudo n'existe pas.";
}
else {
$result = mysql_query("SELECT id FROM joueurs WHERE pseudo = '$pseudo' AND passe = '$pass';");
if(mysql_num_rows($result) == 0){
$errors['passe'][] = "Le mot de passe est incorrect.";
}
}

Par contre, il faut de toute urgence que tu rendes ton code plus cohérent… Un coup on a des "passe", un coup des "$pass", etc. Choisis une langue à utiliser (je te conseille l'anglais) et n'utilise que celle-la dans tes tables, tes colonnes, tes variables, etc. C'est n'importe quoi ton patchwork. Et évite aussi les abréviations : ce n'est pas comme si on te mettait un coup de couteau à chaque fois que tu tapes une lettre.


Sephi-Chan


RE: probleme de test d'existence d'un email en DB - Plume - 03-10-2010

Conseil(s) :
  • Conserver une certaine rigueur dans le nommage des variables. Tout anglais ou tout français mais pas de mélange.
  • Quand t'as une liste de chose à afficher, tu utilises les balises qui vont bien :
    <ul>
    <li></li>
    <li></li>
    <li></li>
    </ul>
  • N'hésite pas à séparer tes sources en plusieurs fichiers. Ca permet d'utiliser des bouts de codes dans plusieurs endroits. Ca t'évite de recopier plusieurs fois les mêmes choses.
  • Généralement, on ajoute une confirmation de mot de passe à l'inscription pour être sûr que l'utilisateur ne s'est pas fourvoyé.

Remarque(s) :
  • Pourquoi l'email est présent dans login.php ?

Ci suit la refactorisation de ton code précédemment posté. Ce que j'ai fait n'est pas parfait mais j'ai pas envie de tout faire et au poil de cul. Pour te dire, j'ai même pas relu donc sois prudent avec ce que je publie. J'voulais juste te présenter une manière de faire que je pense meilleure.

Database.php

<?php
defined('DB_HOST') || define('DB_HOST', 'localhost');
defined('DB_USER') || define('DB_USER', 'root');
defined('DB_PASS') || define('DB_PASS', '');
defined('DB_NAME') || define('DB', 'kham');

Functions.php

<?php
function is_impolite($word) {
$array = array("pute", "con");

return in_array($word, $array);
}

function is_unique($name, $value) {
$result = mysql_query("SELECT id FROM joueurs WHERE $name = '$value'");

return (mysql_num_rows($result) == 0);
}

function check_length($word, $length) {
$word_trimmed = str_replace(' ', '', $word);
$word_trimmed_length = strlen($word_trimmed);

return ($length < $word_trimmed_length);
}

function validates_pseudo($pseudo, &$error_messages) {
$pseudo = trim($pseudo);

if (is_impolite($pseudo)) {
$error_messages[] = 'Votre pseudo est un mot interdit.';
}

if (check_length($pseudo, 3)) {
$error_messages[] = 'Votre pseudo doit avoir plus de 3 lettres.';
}

return $pseudo;
}

function validates_pass($pass, &$error_messages) {
$pass = trim($pass);

if (impolite($pass)) {
$error_messages[] = 'Votre mot de passe est un mot interdit.';
}

if (check_length($pass, 3)) {
$error_messages[] = 'Votre mot de passe doit avoir plus de 3 lettres.';
}

return $pass;
}

function validates_email($email, &$error_messages) {
$email = trim($email);

if (true) {
$error_messages[] = "Merci d'utiliser un email valide.";
}

return $email;
}

Inscription.php

<?php
session_start();

require_once 'functions.php';
require_once 'database.php';

$error_messages = array();

if (isset($_POST)) {

$pseudo = '';
$pass = '';
$email = '';

if (isset($_POST['pseudo'])) {
$pseudo = validates_pseudo($_POST['pseudo'], $error_messages);
} else {
$error_messages[] = 'Merci de saisir un pseudo.';
}

if (isset($_POST['pass'])) {
$pass = validates_pass($_POST['pass'], $error_messages);
} else {
$error_messages[] = 'Merci de saisir un mot de passe.';
}

if (isset($_POST['email'])) {
$email = validates_email($_POST["email"], $error_messages);
} else {
$error_messages[] = 'Merci de saisir un email.';
}

if (count($error_messages) > 0) {
$link = mysql_connect(DB_HOST, DB_USER, DB_PASS);

if ($link) {
$db = mysql_select_db(DB_NAME, $link);

if ($db) {

if (!is_unique('pseudo', $pseudo)) {
$error_messages[] = "Ce pseudo existe déjà.";
}

if (is_unique('email', $email)) {
$error_messages[] = "Cet email existe déjà.";
}

if (count($error_messages) > 0) {
$_SESSION['flash_messenger'] = serialize($error_messages);

} else {
$result = mysql_query("INSERT INTO joueurs (email, pseudo, passe) VALUES ('$email', '$pseudo', '$pass')");

$message = "Un lien d'activation vient d'être envoyé à votre adresse Email d'inscription.<br />";
$message .= "Vous devrez cliquer sur le lien pour activer votre compte.";

$_SESSION['flash_messenger'] = $message;
}
}
}
}
}

header('Location: accueil.html');

Login.php

<?php
session_start();

require_once 'functions.php';
require_once 'database.php';

$error_messages = array();

if (isset($_POST['pseudo1'])) {

$pseudo = '';
$pass = '';

if (isset($_POST['pseudo'])) {
$pseudo = validates_pseudo($_POST['pseudo'], $error_messages);
} else {
$error_messages[] = 'Merci de saisir un pseudo.';
}

if (isset($_POST['pass'])) {
$pass = validates_pass($_POST['pass'], $error_messages);
} else {
$error_messages[] = 'Merci de saisir un mot de passe.';
}
if (count($error_messages) > 0) {
$link = mysql_connect(DB_HOST, DB_USER, DB_PASS);

if ($link) {
$db = mysql_select_db(DB_NAME, $link);

if ($db) {

if (!is_unique('pseudo', $pseudo)) {
$error_messages[] = "Ce pseudo n'existe pas.";
}

$result = mysql_query("SELECT id FROM joueurs WHERE passe = $pass AND pseudo = $pseudo");
if (!mysql_num_rows($result)) {
$error_messages[] = "Ce mot de passe est faux.";
}

if (count($error_messages) > 0) {
$_SESSION['flash_messenger'] = serialize($error_messages);

} else {
header('Location: jouer.html');
exit();
}
}
}
}
}

header('Location: accueil.html');



RE: probleme de test d'existence d'un email en DB - gameprog2 - 03-10-2010

Bon, je vous remercie beaucoup pour votre soutien.
je vais suivre vos conseils que je trouve super pertinent c'est vrai.
C'est vrai que je persistais à utiliser du français par préférence perso sauf que j'étais obligé parfois d'utiliser des abréviations (qui me sont claires) mais le français ne s'y prête pas et donc rien ne vaut l'anglais pour les labels dans les codes.

Et pour ça :
Citation :Un coup on a des "passe", un coup des "$pass"
Le mot "passe" est le nom d'un champ dans la table, ce n'est pas une variable.
La variable $spass est tirée du formulaire de saisie par $_post[...].

Citation :Généralement, on ajoute une confirmation de mot de passe à l'inscription pour être sûr que l'utilisateur ne s'est pas fourvoyé.
Oui c'est vrai je n'y avais plus pensé :/

Citation :Pourquoi l'email est présent dans login.php ?
Ah oui, il y est parce que j'avais copié/collé le code de la page d'inscription, ce sont les mêmes tests, sauf que dans la page login je ne l'utilise pas, j'ai oublié de virer ce petit code de test.

Citation :N'hésite pas à séparer tes sources en plusieurs fichiers. Ca permet d'utiliser des bouts de codes dans plusieurs endroits.
Tu as tout à fait raison bien sûr, j'ai fait autrement parce que je ne connaissais pas bien l'include PHP et je voulais tester mon code rapidement puis voir ensuite comment améliorer par des includes quand j'aurais appris sur le net.

Pourquoi tu me fais remarquer les balises UL du HTML ?

Merci pour le temps que vous avez passé sur ces codes, je vais essayer de ne pas vous embêter plus, c'est juste que je ne savais pas comment allier le test du couple pseudo/pass à un message d'erreur pour chacun d'eux.
Cela n'est pas sur le net d'après les recherches que j'ai faites, donc merci de votre aide encore une fois, ça me sort d'un petit blocage.

Quand le code sera terminé et fonctionnel donc, peut-être qu'on pourra le mettre en modèle pour les gens qui ont le même problème que moi ?


RE: probleme de test d'existence d'un email en DB - Plume - 03-10-2010

Citation :Pourquoi tu me fais remarquer les balises UL du HTML ?

Parce que tu as écrit :
Citation :Je remarque que le forum enlève les < b r / > que j'ai mis à la fin de chaque message d'erreur donc vous ne les voyez pas dans le code, ça sert à afficher la liste des messages d'erreurs qui se suivent ligne par ligne dans un DIV d'affichage au lancement de la page d'accueil

Hors, les messages d'erreurs constituent une liste d'informations que la sémantique voudrait que tu traites en tant que tel.
Code :
<ul>
    <li>{message_1}</li>
    <li>{message_2}</li>
    <li>…</li>
</ul>



RE: probleme de test d'existence d'un email en DB - gameprog2 - 03-10-2010

Ah vi c'est vrai :/
Je suis tout confus :toilette:
et pour toi : :respect: :good:


RE: probleme de test d'existence d'un email en DB - Sephi-Chan - 03-10-2010

(03-10-2010, 06:00 PM)gameprog2 a écrit : Et pour ça :
Citation :Un coup on a des "passe", un coup des "$pass"
Le mot "passe" est le nom d'un champ dans la table, ce n'est pas une variable.
La variable $spass est tirée du formulaire de saisie par $_post[...].

Justement, quelle que soit l'origine, tu devrais utiliser le même nom. Et un nom correct. Ça ne veut rien dire "passe" dans ce contexte : c'est "mot de passe". Donc tes colonnes pour les mots de passes, le nom des paramètres, etc. devraient s'appeler "password", parce que c'est l'anglais de "mot de passe". Si tu en as vraiment envie, tu peux utiliser le français, mais c'est moins adapté au développement car moins clair et concis, et l'avantage du langue étrangère est qu'elle t'incite à reformuler pour trouver le bon nom, et donc à clarifier tes idées.

(03-10-2010, 06:00 PM)gameprog2 a écrit : Quand le code sera terminé et fonctionnel donc, peut-être qu'on pourra le mettre en modèle pour les gens qui ont le même problème que moi ?

Tant que tu ne crées pas un énième sujet sur ces histoires de formulaire de connexion/inscription, fais ce que tu veux.


Sephi-Chan


RE: probleme de test d'existence d'un email en DB - Plume - 03-10-2010

(03-10-2010, 06:17 PM)Sephi-Chan a écrit :
(03-10-2010, 06:00 PM)gameprog2 a écrit : Quand le code sera terminé et fonctionnel donc, peut-être qu'on pourra le mettre en modèle pour les gens qui ont le même problème que moi ?

Tant que tu ne crées pas un énième sujet sur ces histoires de formulaire de connexion/inscription, fais ce que tu veux.

D'ailleurs, y a un wiki pour publier ce genre de ressources si le cœur t'en dis. Tu le trouveras à l'adresse suivante : http://wiki.jeuweb.org/

@tchaOo°


RE: probleme de test d'existence d'un email en DB - srm - 03-10-2010

Et sinon pour le faire en une requête, une solution :
SELECT id, IF(password = '$pwd', 'OK', 'KO') as auth FROM player WHERE login = '$nom'

Si ça retourne une ligne, le login est bon, si la colonne auth contient OK, le mot de passe est bon, sinon il n'est pas bon Smile


RE: probleme de test d'existence d'un email en DB - gameprog2 - 03-10-2010

Merci Oxman Wink

Maintenant : Sujet résolu !
Wink