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


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

Bonsoir, je n'arrive pas à tester si l'email correspondant à un pseudo existe déjà en DB :/
J'ai essayé ça et plusieurs variantes, j'y ai passé 2h en vain :/

$pseudo est tiré du $post[....


// Teste si l'email saisi existe déjà dans la DB.
$result = mysql_query("SELECT email FROM joueurs WHERE pseudo= '$pseudo'");
if(mysql_num_rows($result) != 0)
{
$msg="Cet email existe déjà !";
$existe=true; // existe déjà.
}



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

Tu te rends compte que ta requête ne comprends même pas l'E-mail saisi ?
Logiquement si tu tiens à utiliser cette fonction fais plutot : mysql_query("SELECT * FROM joueurs WHERE email= '$_POST['email']'");
(enfin sécurises le post dans une variable avant).

Et si tu veux ajouter le pseudo mysql_query("SELECT * FROM joueurs WHERE email= '".$_POST['email']."' AND pseudo= '$pseudo' ");


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

Merci Globe, c'est ce qu'il me faut ! :good:

mysql_query("SELECT * FROM joueurs WHERE email= '".$_POST['email']."' AND pseudo= '$pseudo' ");

$email (dans ma demande) est tiré de $_post[.... mais dans le test je ne le met pas c'est vrai :/
Parce que je pensais qu'il fallait chercher le mot de passe dans la DB correspondant au pseudo, et si on le trouvait alors c'était bon sinon erreur.
EDIT :
Je suis content ça marche, je m'étais trompé en plus dans le type de test c'est le pass que je voulais tester et j'ai écris l'email Wink
Mais j'ai corrigé mon code d'après ta solution et ça marche super !
Je m'aperçois que ce que je voudrais avoir en fait, c'est tester le pseudo et le pass séparément (car j'envoie un message selon le cas), mais qu'un joueur ne puisse pas entrer son pseudo avec l'email d'un autre.

J'ai essayé avec mon code qui bien sûr ne marche pas, je peux me connecter avec le pass d'un autre et mon pseudo :/

// Teste si le pseudo existe déjà dans la DB
$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 * FROM joueurs WHERE passe= '$pass'");
if(mysql_num_rows($result)==0)
{
$msg="Ce mot de passe est mauvais !";
$existe=true; // n'existe pas.
}
}

EDIT : j'avais affiché le mauvais code pardon, rétabli en 1 mn
EDIT : Corrigé un peu l'indentation Smile


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

Je me souviens t'avoir envoyé un script d'exemple d'inscription qui était vraiment mieux fait (notamment parce qu'il était capable d'admettre plusieurs erreurs de validation grâce à l'utilisation d'un tableau pour stocker les messages d'erreur). Pourquoi ne pas t'en inspirer ?


Sephi-Chan


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

Hum... la logique de ton code ne va pas du tout :

- $existe : Tu le met à true pour un élément qui n'existe pas. Du coup le nom de variable ne correspond pas, il faudrait soit le changer, soit inverser les valeurs que tu lui attribue.

$existe=true; // existe pas.
La, tu ne fais pas du tout ce que tu dis dans les commentaires :

// Teste si le mot de passe existe déjà dans les champs DB de ce joueur.
$result = mysql_query("SELECT * FROM joueurs WHERE passe= '$pass'");
Tu ne teste pas par rapport au joueur mais à TOUS les joueurs.
Tu récupères donc la liste des joueurs ayant le mot de passe indiqué. Ca sert à quoi?
Pourquoi empêcher des personnes différentes d'avoir le même mot de passe ?

C'est quoi comme formulaire ? Inscription, connexion... ?


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

Attend tu est sérieux la?
Tu as fait un sujet pour comparer si un pseudo existe deja, et un pour comparer l'email et un pseudo!

Pitié stop ça, lis les tutos et autres sujets et reviens quant tu aura des questions vraiment difficiles.

Si tu t'attend a ce que l'on te fasse tout, ça te sert a rien et on perd notre temps nous!

Te rend tu compte que tu poste 2 lignes de code sencé comparer l'e-mail alors que l'email n'est utilisé nulle part dans ta requete? Si tu avait réfléchis 2 minutes tu aurai trouvé!


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

gameprog2, tu pourrais au moins faire l'effort de te lire avant de poster, outre le fait que tu poses des questions qui n'ont pas spécialement leurs vocations ici, tu n'arrives même pas à demander ce que tu souhaites sur si peu de lignes...

Si cela continue, je te passe en modération automatique...

Il est clair que tu n'as jamais programmé de ta vie, car quel que soit le langage, ce genre de question n'aurait pas eu lieu d'être, surtout si tu as comme tu l'as dit passé 2 heures dessus.
Avant de se lancer dans un jeu, ou de répondre à tout va, il faut d'abord avoir un minimum de bagage technique, chose que tu n'as clairement pas.


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

Bein écoute, si je pose la question c'est que je ne trouve pas la réponse, je ne suis pas con.
Cela n'a rien à voir avec ma connaissance en programmation il faut arrêter de me répéter ça tous les 4 posts, c'est juste que ne connaissant pas PHP et MySql je cherche sur le net comment faire ci et comment faire ça, hors je n'ai trouvé que "comment tester le pseudo" ou "le pass" ou "les deux à la fois", mais jamais les "deux à la fois tout en donnant un message d'erreur pour chacun", et c'est ce que je cherche.
Ma connaissance en prog va consister en quoi ? à savoir si je teste l'un en fonction du résultat du précédent ? à savoir si je teste l'un après l'autre ? bein voilà, c'est tout ce que je fais, il n'y a aucun rapport avec ma connaissance de la prog il faut arrêter avec ça, parce que vous avez un plus haut niveau que moi vous croyez que les autres ne savent rien ? dans d'autres domaines vous en savez encore bien moins que moi ou que tout autre newbee, donc un peu d'humilité quoi.

Si vous ne voulez pas répondre parce que la question vous paraît saugrenue, ce n'est pas grave, je ne vais pas en faire une maladie, seulement dites les choses avec moins de hauteur et ça passera.

Merci Sephi-chan c'est bien ton code que j'ai utilisé avec un tableau de messages d'erreurs etc, et il convient tout à fait, mais j'essaie de l'adapter à ce que je veux faire car il testait les champs que séparément, hors comme je l'ai dis le champ "pass" doit correspondre au pseudo indiqué mais tout en ayant un message d'erreur pour chacun, voilà, donc j'ai essayé tel que je le montre mais aussi d'autres variantes que ma connaissance perfectionnée du jeu de billes m'a permit de faire, et comme je n'y arrive pas j'ai demandé votre aide.
Mais bon, reçu comme ça, ça fait peur.

NB : Je fais un test (une page) pour la connexion et une autre pour l'inscription.


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

Montre ton code de traitement du formulaire plus globalement. Pour rappel, ça se fait avec [code=PHP]Ton code…[/code].

Concernant la façon dont tu es reçu sur JeuWeb, je dois reconnaître que c'est assez inédit dans l'histoire du forum : jamais un demandeur d'aide n'a saoulé autant de monde pour les mêmes raisons. Je pense que tu devrais te remettre en question : tu as du voir que tu n'étais pas le premier à rejoindre la communauté mais c'est bien la première fois que quelqu'un a temps de mal à s'intégrer au groupe. L'inattention et le flood n'y sont peut-être pas pour rien.


Sephi-Chan


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

Citation :
Ton code…
Oui, j'utilise ça chaque fois depuis que tu me l'avais conseillé au début Wink
Je t'affiche le code entier donc, merci :
Page d'inscription :

<?php
/* ------------------BUT DU PROGRAMME -----------------------
Après des tests de validité des champs saisis, ce programme va vérifier dans la DB l'existence du pseudo et de l'email saisis.
1) S'il l'un des deux existe déjà en DB on redirige vers la page d'accueil en affichant un message disant que le champ existe déjà.
2) Si les deux champs n'existent pas déjà en DB, le visiteur est inscrit dans la DB puis est redirigé vers la page d'accueil en affichant un message disant qu'un mail d'activation lui a été envoyé.
*/

/* ----------------------VARIABLES--------------------------- */
$temps = 365*24*3600;
$errorMsg = array();
$loginOk = true;
/* ----------------------FONCTIONS--------------------------- */

// Renvoie TRUE si le mot est vulgaire sinon FALSE
function vulgaire($mot) {
//$tab=file("salmots",FILE_IGNORE_NEW_LINES);
$tab=array("pute","con");
if(in_array($mot,$tab))
{
return true;
}else
{
return false;
}
}

function testtaille($mot,$nbr)
{
$result=str_replace(" ","",$mot);
$long=strlen($result);
if( $long<$nbr ){return true;}else{return false;}
}

function validmail($email) {
/* Renvoie TRUE si L'email est valide
sinon renvoie FALSE
Code à compléter...
*/
return false; // Provisoire : juste pour test du code.
}

/* --------------------- Début du traitement ------------------ */

if ( isset($_POST['pseudo']) )
{
$pseudo = $_POST['pseudo'];
$pass= $_POST['pass'];
$email= $_POST["email"];

if( vulgaire($pseudo) ) {
$errorMsg[] = '* Votre pseudo est un mot interdit.<br/>';
$loginOk = false;
}

if( vulgaire($pass) ) {
$errorMsg[] = '* Votre mot de passe est un mot interdit.<br/>';
$loginOk = false;
}

if( validmail($email) ) {
$errorMsg[] = '* Merci d\'utiliser un email valide.<br/>';
$loginOk = false;
}

if( testtaille($pseudo,3) ) {
$errorMsg[] = '* Votre pseudo doit avoir plus de 3 lettres.<br/>';
$loginOk = false;
}

if ( testtaille($pass,3) ) {
$errorMsg[] = '* Votre mot de passe doit avoir plus de 3 lettres.<br/>';
$loginOk = false;
}

/* ----- ici le pseudo est ok, on se connecte pour tester son existence ------------- */

if($loginOk)
{
// On prépare la durée d'un cookie ($temps=un an).

// Données de connection.
$dbhost="localhost";
$dblogin="root";
$dbpassword="";
$dbname="kham";//le nom de ma base de données.
$table="joueurs";
// Connection au serveur Mysql.
$connecter=mysql_connect($dbhost,$dblogin,$dbpassword);
if (!$connecter)
{
echo "Probleme de connection au serveur. L'admin va vérifier ça :/ ";
}else
{
//............... Connection à la base de données ................
$okbase=mysql_selectdb($dbname);
//............ Si la base de donnée a un probleme on le dit............
if (!$okbase)
{
echo "Problème de connection à la base de données.";
}else
{
// Teste si le pseudo existe déjà dans la DB
$result = mysql_query("SELECT * FROM joueurs WHERE pseudo = '$pseudo'");
if(mysql_num_rows($result)!= 0)
{
$msg="Ce pseudo existe déjà !";
$existe=true; // existe déjà.
}else
{
// Teste si l'email saisi existe déjà dans la DB.
$result = mysql_query("SELECT * FROM joueurs WHERE email= '$email'");
if(mysql_num_rows($result) != 0)
{
$msg="Cet email existe déjà !";
$existe=true; // existe déjà.
}
}
// Si le pseudo OU l'email, existent déjà en DB alors...
if ($existe)
{
// Envoie du cookie
setcookie("message",$msg,time() + $temps);
header("location:accueil.html");
exit();
}else
{
/* Le pseudo ET l'email n'existent pas déjà dans la DB */
// Inscription du joueur dans la DB.
$result=mysql_query("INSERT INTO joueurs (email,pseudo,passe) VALUES('$email','$pseudo','$pass')");
/* Code à rajouter ici pour lui donner des objets par défaut si besoin... */
/* Code à rajouter ici pour envoyer un mail d'activation. */
// Prépare le message
$msg="Un lien d'activation vient d'être envoyé\n à votre adresse Email d'inscription.\n";
$msg=$msg."Vous devrez cliquer sur le lien pour activer votre compte.";
// Envoie du cookie
setcookie("message",$msg,time() + $temps);
//Redirection vers la page d'accueil
header("location:accueil.html");
exit();
}
} // Fin de la connection DB.
} // Fin de la connection serveur
mysql_close();
}else
{
/* Ici c'est que les champs contiennent des erreurs, donc réaffichage du formulaire en indiquant les messages d'erreurs.*/
$erreurs=implode($errorMsg) ;
setcookie("message",$erreurs,time() + $temps);
header("location:accueil.html");
exit();
}
}
/* --------------------- Fin du traitement ------------------ */
?>


La page de login :

<?php
/* ------------------BUT DU PROGRAMME -----------------------
Après des tests de validité des champs saisis, ce programme va vérifier dans la DB l'existance du pseudo et du mot de passe saisis, puis rediriger le joueur vers la page de jeu.
*/

/* ----------------------VARIABLES--------------------------- */
$temps = 365*24*3600;
$errorMsg = array();
$loginOk = true;

/* ----------------------FONCTIONS--------------------------- */

// Renvoie TRUE si le mot est vulgaire sinon FALSE
function vulgaire($mot) {
//$tab=file("salmots",FILE_IGNORE_NEW_LINES);
$tab=array("pute","con");
if(in_array($mot,$tab))
{
return true;
}else
{
return false;
}
}

function testtaille($mot,$nbr)
{
$result=str_replace(" ","",$mot);
$long=strlen($result);
if( $long<$nbr ){return true;}else{return false;}
}

function validmail($email) {
/* Renvoie TRUE si L'email est valide
sinon renvoie FALSE
Code à compléter...
*/
return false; // Provisoire : juste pour test du code.
}

/* --------------------- Début du traitement ------------------ */

if ( isset($_POST['pseudo1']) )
{
$pseudo = $_POST['pseudo1'];
$pass= $_POST['pass1'];


if( vulgaire($pseudo) ) {
$errorMsg[] = "* Votre pseudo est un mot interdit. <br/>";
$loginOk = false;
}

if( vulgaire($pass) ) {
$errorMsg[] = "* Votre mot de passe est un mot interdit. <br/>";
$loginOk = false;
}

if( vulgaire($email) ) {
$errorMsg[] = "* Votre email est un mot interdit. <br/>";
$loginOk = false;
}

if( testtaille($pseudo,3) ) {
$errorMsg[] = "* Votre pseudo doit avoir plus de 3 lettres. <br/>";
$loginOk = false;
}

if ( testtaille($pass,3) ) {
$errorMsg[] = "* Votre mot de passe doit avoir plus de 3 lettres. <br/>";
$loginOk = false;
}

/* ----- ici le pseudo est ok, on se connecte pour tester son existence ------------- */

if($loginOk)
{
// Données de connection.
$dbhost="localhost";
$dblogin="root";
$dbpassword="";
$dbname="kham";//le nom de ma base de données.
$table="joueurs";
// Connection au serveur Mysql.
$connecter=mysql_connect($dbhost,$dblogin,$dbpassword);
if (!$connecter)
{
echo "Probleme de connection au serveur. L'admin va vérifier ça :/ ";
}else
{
//............... Connection à la base de données ................
$okbase=mysql_selectdb($dbname);
//............ Si la base de donnée a un probleme on le dit............
if (!$okbase)
{
echo "Problème de connection à la base de données.";
}else
{
// Teste si le pseudo existe déjà dans la DB
$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 * FROM joueurs WHERE passe= '$pass'");
if(mysql_num_rows($result)==0)
{
$msg="Ce mot de passe est mauvais !";
$existe=true; // n'existe pas.
}
}
// Si le pseudo OU l'email sont mauvais...
if ($existe)
{
// Envoie du cookie
setcookie("message",$msg,time() + $temps);
header("location:accueil.html");
exit();
}else
{
/* Le pseudo ET l'email existent déjà dans la DB */
// Crée un cookie d'autologin, contenant le pseudo et le pass mais criptés.
//setcookie("message",$msg,time() + $temps);
//Redirection vers la page de jeu.
header("location:jouer.html");
exit();
}
} // Fin de la connection DB.
} // Fin de la connection serveur
mysql_close();
}else
{
/* Ici c'est que les champs contiennent des erreurs, donc réaffichage du formulaire en indiquant les messages d'erreurs.*/
$erreurs=implode($errorMsg) ;
setcookie("message",$erreurs,time() + $temps);
header("location:accueil.html");
exit();
}
}
/* --------------------- Fin du traitement ------------------ */
?>

Je fais remarquer que la sécurité dans ces pages n'est pas encore appliquée, je le ferais plus tard après avoir un code qui fonctionne bien Wink

Edit :
Je rajoute ça ici car dans mon post ça disparait à moitié sous le code :/ :
Citation :(au fait, moi quand je clique une fois sur l'icone pour insérer du code formaté, cela m'affiche [code=php] puis le curseur se met automatiquement en fin du code, je clique donc une nouvelle fois sur l'icone pour fermer la balise code et ça remet [code=php], donc chaque fois je corrige manuellement la balise de fermeture Wink )

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 Wink