JeuWeb - Crée ton jeu par navigateur
Problème pour script de login - 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 : Problème pour script de login (/showthread.php?tid=312)

Pages : 1 2


Problème pour script de login - Chewbacca - 23-10-2006

Bonjour.
J'ai un problème avec un script d'inscription. Le voici :
Mon script fait en tout 3 pages. A la première, le forumlaire, à la deuxième un récapitulatif et à la troisième l'inscription dans la BDD.
D'abord, la page du formulaire. Là, pas de problème, c'est du xHTML pur et dur :
Code PHP :
<?php 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
   <title>SW L'épopée</title>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   <link rel="stylesheet" media="screen" type="text/css" title="Design" href="configure.css" />
   </head>
   <body>
<p>Pour vous inscrire, renseignez les champs suivants:</p>
<form action="confirmation.php" method="post">
Pseudo :
<input type="text" name="pseudo"></br>
Mot de passe :
<input type="password" name="motdepasse"></br>
Adresse e-mail:
<input type="text" name="e-mail"></br>
Race :
<select name="race">
<option value="Choisissez votre race...">Choisissez votre race ...</option>
    <option value="Humain">Humain</option>
    <option value="Wookie">Wookie</option>
    <option value="Twi'
lek">Twi'lek</option>
</select>
<input type="
submit" value="valider">
</form>


</body>


Ensuite viennent les problèmes, avec la deuxième page :

Code PHP :
<?php
//On définit les variables
session_start();
$pseudo=$_POST['pseudo'];$_SESSION['pseudo']=$pseudo;
$mdp=$_POST['motdepasse'];$_SESSION['mdp']=$mdp;
$email=$_POST['e-mail'];$_SESSION['e-mail']=$email;
$race=$_POST['race'];$_SESSION['race']=$race;
//Connexion à la base
mysql_connect("xxx","xxx","xxx");
mysql_select_db("xxx");
$reponse=mysql_query("SELECT * FROM Membres WHERE Nom='$pseudo'")or die (mysql_error());
$donnees=mysql_fetch_array($reponse);
//Si une information est nulle, on demande de tout remplir
if (empty ($_POST['pseudo']) OR empty ($_POST['motdepasse']) OR empty($_POST['e-mail']) OR empty($_POST['race']))
{
echo
"Merci de remplir tous les champs";
}
else
{
if(empty(
$reponse))//On regarde si le pseudo existe déja.
{
$pseudos_identiques=0;
}
else
{
$pseudos_identiques=1;
}
if (
preg_match("#^[\w-]{5,15}$#", $_POST['motdepasse']))//Ensuite, on vérifie que le mot de passe a une bonne syntaxe.
{
$verify_pass="oui";
}
else
{
$verify_pass="non";
}
if(
preg_match("#^[a-zA-Z' -]{4,15}$#", $_POST['pseudo']))//Puis c'est au tour du pseudo
{
$verify_pseudo="oui";
}
else
{
$verify_pseudo="non";
}
if (
preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['e-mail']))//Et enfin c'est l'e-mail qui y passe
{
$verify_mail="oui";
}
else
{
$verify_mail="non";
}
if(
$pseudos_identiques==1)//Si le pseudo existe déjà
{
echo
"Désolé ce pseudo est déjà utilisé";
}
elseif(
$verify_pass=="non")//Si le mot de passe n'est pas correct
{
echo
"Votre mot de passe est incorrect. Il doit faire de 5 à 15 caractères.";
}
elseif(
$verify_pseudo=="non")//Si le pseudo est incorrect
{
echo
"Votre pseudo est incorrect. Il doit compter de 4 à 15 caractères et ne peut contenir que des lettres, des ', des espaces et des -.";
}
elseif(
$verify_mail=="non")//Si le mail n'est pas valide
{
echo
"L'adresse e-mail que vous avez rentrée n'est pas valide.";
}
elseif(
$pseudos_identiques==0 AND $verify_pass=="oui" AND $verify_pseudo=="oui" AND $verify_mail=="oui")//Si tout est bon, on affiche le récapitulatif
{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>SW L'épopée-confirmation de l'inscription</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="configure.css" />
</head>
<body>
<p>Voici vos informations:</p>
Pseudo: <?php echo"$pseudo"?></br>
Mot de passe:<?php echo"$mdp"?></br>
E-mail:<?php echo"$email"?></br>
Race:<?php echo"$race"?></br>
Si ces informations sont correctes, cliquez sur ce bouton:</br>
<form action="fin_inscription.php" method="post">
<input type="submit" value="confirmer votre inscription">
<?php
}
mysql_close();
}

    


Puis la 3° page où je pense qu'il n'y a pas de problème :

Code PHP :
<?php
//On définit les variables
$_SESSION['pseudo']=$pseudo;
$_SESSION['mdp']=$mdp;
$_SESSION['e-mail']=$email;
$_SESSION['race']=$race;
//Connexion à la BDD
mysql_connect("imysql01","i4418016","5h85aa8pjiq5xxu4");
mysql_select_db("i4418016");
//On rentre les données dans la BDD
mysql_query(INSERT INTO Membres VALUES ('','$pseudo','$mdp','$email','$race') or die (mysql_error());
echo
"Merci de votre inscription. Vous pouvez dès maintenant vous connecter au jeu avec le pseudo et le mot de passe que vous avez choisi.";
mysql_close();
?>
Voilà mon problème ; Quoi que je fasse, on me dit que le pseudo existe déja, alors qu'il n'existe pas.
Si vous avez une réponse à mon problème, merci d'avance d'avoir eu le courage de lire mon message en entier  Big Grin
Vous pouvez voir ce que ça donne sur http://labibliodecoruscant.ifrance.com/inscription.php.
Encore merci d'avance


RE: Problème pour script d'inscription - Plume - 23-10-2006

Parce que tu fais if(empty($reponse))
Or $reponse contiendra à tous les coups quelque chose, ne serait-ce que FALSE pour un problème lors de l'execution de la requète.
En ne faisant qu'une requète:
Code PHP :
<?php 
$reponse
= mysql_query("SELECT COUNT(*) AS pseudo_existant FROM membres WHERE Nom = '$pseudo'");
$reponse = mysql_fetch_array($reponse);

if(
$reponse['pseudo_existant'] != 0)
{ [...] }

J'crois que je suis pas trop dans l'erreur. Mais fais attention quand même, j'ai pas été très attentif à ce que j'ai fait Smile


RE: Problème pour script d'inscription - OncleJames - 23-10-2006

Pour faciliter ton code utilise aussi :
Code PHP :
<?php 
extract
($_POST);

Au lieu de :

Code PHP :
<?php 
$pseudo
=$_POST['pseudo'];$_SESSION['pseudo']=$pseudo;
$mdp=$_POST['motdepasse'];$_SESSION['mdp']=$mdp;
$email=$_POST['e-mail'];$_SESSION['e-mail']=$email;
$race=$_POST['race'];$_SESSION['race']=$race;

Avec cette fonction tu associe directement le nom du champs du formulaire à la variable de meme nom

Code :
<input type="text" name="pseudo">

Donnera directement == > $pseudo

Sa te permet de gagner énormement de temps et les prises de tete sur les noms de variable que tu écris une par une :p


RE: Problème pour script d'inscription - Chewbacca - 23-10-2006

Merci. De toute façon, le SDZ m'a donné la réponse : en mettant
Code PHP :
<?php 
if(empty($donnees))
, ça marche! Donc sujet à clore et merci encore ;-)


RE: Problème pour script d'inscription - gtsoul - 23-10-2006

oncle james nous montre ici une formidable méthode de hack
à ne jamais utiliser bien sur


RE: [REGLE] Problème pour script d'inscription - Chewbacca - 24-10-2006

Quoi, c'est quoi qu'est dangereux? mon code ou le extract($_POST)?


RE: [REGLE] Problème pour script d'inscription - gtsoul - 24-10-2006

Extract_Post !!
Le fait d'accorder une instruction pour chaque variable à récupérer limite les intrusions.

mettons que tu inclues un fichier qui déclare et initialise des variables comme $toto = 1;
puis tu appelles extract
et tu lis $toto

si un utilisateur valide ce formulaire :
<form action="tapage.php">
<input hidden name="toto" value="2">
</form>

Il pourra intervenir sur la valeurs de variables qu'il n'aurait jamais pu modifier normalement.


RE: [REGLE] Problème pour script d'inscription - Isenduil - 24-10-2006

Toujours pas compris le danger ? Tu pourrais réexpliquer ? J'utilise ce type de fonction depuis un bon bout de temps et je la précède généralement de protections ce qui donne :

Code PHP :
<?php 
// on contrôle tout pour ne pas se faire envahir :
$_POST = array_map('strip_tags', $_POST);
$_POST = array_map('addslashes', $_POST);

// on enlève le "$_POST"
extract($_POST);

Cela pose t’il un problème dans l'utilisation des données générées ?

Merci d'avance.


RE: [REGLE] Problème pour script d'inscription - gtsoul - 24-10-2006

le danger vient du fait que tu ne sais pas combien de variables vont être affectées par cette commande.
Ton client peut potentiellement modifier n'importe quelle variable existante en créant un champ de même nom dans un formulaire.


RE: [REGLE] Problème pour script d'inscription - Isenduil - 24-10-2006

Merci ! C'est beaucoup plus clair (pour moi) (h). Et bien il va y avoir du sport au vu de nombre de scripts à modifier ^^