8791 sujets

Développement web côté serveur, CMS

Bonjour, je suis en train de créer un espace membre pour mon site, seulement je suis débutant en php et j'aurais besoin d'aide pour la page de vérification .

voici mon code actuel :


//On verifie le pseudo.
   
   $pseudo = htmlspecialchars($_POST['pseudo']);
   
   if(empty($_POST['pseudo']))
   {
   $_SESSION['pseudo_info'] = '<div class="reponse">Veuillez indiquer votre pseudo.</div>';
   echo $_SESSION['pseudo_info'];
   }
   else if(strlen($pseudo) < 3)
   {
   $_SESSION['pseudo_info'] = '<div class="reponse">Le pseudo '.htmlspecialchars($pseudo, ENT_QUOTES).' est trop court, Choisis en un d\'au moins 3 caractères.</div>';
   echo $_SESSION['pseudo_info'];
   }
   else if(strlen($pseudo) > 20)
   {
   $_SESSION['pseudo_info'] = '<div class="reponse">Le pseudo '.htmlspecialchars($pseudo, ENT_QUOTES).' est trop long, Choisis en un qui ne dépasse pas 20 caractères.</div>';
   echo $_SESSION['pseudo_info'];
   }
   else if(eregi('[^a-zA-Z0-9_]', $pseudo))
   {
   $_SESSION['pseudo_info'] = '<div class="reponse">Le pseudo '.htmlspecialchars($pseudo, ENT_QUOTES).' N\'est pas valide, les caractères spéciaux sont interdit.</div>';
   echo $_SESSION['pseudo_info'];
   }
   else if(mysql_query("SELECT id FROM membre WHERE membre_pseudo=".$pseudo))
   {
   $_SESSION['pseudo_info'] = '<div class="reponse">Le pseudo '.htmlspecialchars($pseudo, ENT_QUOTES).' est déjà utiliser, Choisis en un autre.</div>';
   echo $_SESSION['pseudo_info'];
   }
   
   //On verifie le mot de passe.
   
   $mdp = htmlspecialchars($_POST['mdp']);
   
   if(empty($_POST['mdp']))
   {
   $_SESSION['mdp_info'] = '<div class="reponse">Veuillez indiquer votre mot de passe.</div>';
   echo $_SESSION['mdp_info'];
   }
   else if(strlen($mdp) < 6)
   {
   $_SESSION['mdp_info'] = '<div class="reponse">Le mot de passe entré est trop court, Choisis en un d\'au moins 6 caractères.</div>';
   echo $_SESSION['mdp_info'];
   }
   else if(strlen($pseudo) > 20)
   {
   $_SESSION['mdp_info'] = '<div class="reponse">Le mot de passe entré est trop long, Choisis en un qui ne dépasse pas 20 caractères.</div>';
   echo $_SESSION['mdp_info'];
   }
   else if(eregi('[^a-zA-Z0-9_]', $mdp))
   {
   $_SESSION['mdp_info'] = '<div class="reponse">Le mot de passe entré n\'est pas valide, les caractères spéciaux sont interdit.</div>';
   echo $_SESSION['mdp_info'];
   }
   else if($_POST['mdp_verif'] != $_POST['mdp'])
   {
   $_SESSION['mdp_info'] = '<div class="reponse">Veuillez retaper correctement votre mot de passe.</div>';
   echo $_SESSION['mdp_info'];
   }
   
   //On verifie l'adresse email.
   
   $mail = $_POST['mail'];
   
   if(empty($_POST['mail']))
   {
   $_SESSION['mail_info'] = '<div class="reponse">Veuillez indiquer votre adresse email.</div>';
   echo $_SESSION['mail_info'];
   }
   else if(!preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#is', $mail))
   {
   $_SESSION['mail_info'] = '<div class="reponse">L\'adresse email '.htmlspecialchars($mail, ENT_QUOTES).' n\'est pas valide.</div>';
   echo $_SESSION['mail_info'];
   }
   else if($_POST['mail_verif'] != $_POST['mail'])
   {
   $_SESSION['mdp_info'] = '<div class="reponse">Veuillez retaper correctement votre adresse email.</div>';
   echo $_SESSION['mdp_info'];
   }
   else if(mysql_query("SELECT id FROM membre WHERE membre_mail=".$mail))
   {
   $_SESSION['mail_info'] = '<div class="reponse">L\'adresse email '.htmlspecialchars($mail, ENT_QUOTES).' est déjà utiliser, Choisis en une autre.</div>';
   echo $_SESSION['pseudo_info'];
   }
   
   //On verifie le site.
   
   if(empty($_POST['site']))
   {
		$_SESSION['site_info'] = '<div class="reponse">Veuillez indiquer votre site web.</div>';
		echo $_SESSION['site_info'];
   }
   
   //On verifie le captcha.
   
   if($_POST['captcha'] != $_SESSION['captcha'] && isset($_POST['captcha']) && isset($_SESSION['captcha']))
   {
   $_SESSION['captcha_info'] = '<div class="reponse">Vous n\'avez pas recopié correctement le code contenu dans l\'image.</div>';
   echo $_SESSION['captcha_info'];
   session_destroy();
   }
   
   //On  envoi tou a la BDD.
   
   $insertion = "INSERT INTO membres VALUES('', '$pseudo', '$mdp', '$mail', '$site')";
   if(mysql_query($insertion))
   {
   echo "Votre inscription a bien été validée, vous pouvez vous connecter dés maintenant.";
   }
   


Je pense qu'il est pas trop mal, mon seul probleme c'est a partir de //On envoi tou a la BDD
Deja le message de validation s'affiche avec les erreurs, il me valide l'inscription malgré les erreurs, et je voudrais une sorte de protection parceque lorsque l'inscription est validée, en actualisant la page les infos sont renvoyées a la BDD du coup le captcha ne sert a rien puisque on peut envoyer l'inscription autant qu'on veut en actualisant.

Merci d'avance pour votre aide.
Modifié par Pikachou (15 Feb 2010 - 20:50)
Salut,

Pikachou a écrit :
je suis débutant en php
Alors tu te trompes de forum comme cela est indiqué dans l'annonce de ce salon (tu trouveras plusieurs liens vers des forums spécialisés). Smiley cligne

Dans le désordre :
* quel est l'intérêt des $_SESSIONS ?
* tu n'as visiblement pas compris comment effectuer des requêtes.
* il vaut mieux utiliser preg_match que eregi
* etc.

Tu pourrais peut-être repartir sur de bonnes bases en allant sur http://www.phpdebutant.org/
Modifié par Heyoan (15 Feb 2010 - 21:29)
   
//On verifie le pseudo.
   
   $pseudo = htmlspecialchars($_POST['pseudo']);
   
   if(empty($_POST['pseudo']))
   {
   echo '<div class="reponse">Veuillez indiquer votre pseudo.</div>';
   }
   else if(strlen($pseudo) < 3)
   {
   echo '<div class="reponse">Le pseudo '.htmlspecialchars($pseudo, ENT_QUOTES).' est trop court, Choisis en un d\'au moins 3 caractères.</div>';
   }
   else if(strlen($pseudo) > 20)
   {
   echo '<div class="reponse">Le pseudo '.htmlspecialchars($pseudo, ENT_QUOTES).' est trop long, Choisis en un qui ne dépasse pas 20 caractères.</div>';
   }
   else if(preg_match('[^a-zA-Z0-9_]', $pseudo))
   {
   echo '<div class="reponse">Le pseudo '.htmlspecialchars($pseudo, ENT_QUOTES).' N\'est pas valide, les caractères spéciaux sont interdit.</div>';
   }
   else if(mysql_query("SELECT id FROM membre WHERE membre_pseudo=".$pseudo))
   {
   echo '<div class="reponse">Le pseudo '.htmlspecialchars($pseudo, ENT_QUOTES).' est déjà utiliser, Choisis en un autre.</div>';
   }
   else
   {
   
   //On verifie le mot de passe.
   
   $mdp = htmlspecialchars($_POST['mdp']);
   
   if(empty($_POST['mdp']))
   {
   echo '<div class="reponse">Veuillez indiquer votre mot de passe.</div>';
   }
   else if(strlen($mdp) < 6)
   {
   echo '<div class="reponse">Le mot de passe entré est trop court, Choisis en un d\'au moins 6 caractères.</div>';
   }
   else if(strlen($pseudo) > 20)
   {
   echo '<div class="reponse">Le mot de passe entré est trop long, Choisis en un qui ne dépasse pas 20 caractères.</div>';
   }
   else if(preg_match('[^a-zA-Z0-9_]', $mdp))
   {
   echo '<div class="reponse">Le mot de passe entré n\'est pas valide, les caractères spéciaux sont interdit.</div>';
   }
   else if($_POST['mdp_verif'] != $_POST['mdp'])
   {
   echo '<div class="reponse">Veuillez retaper correctement votre mot de passe.</div>';
   }
   else
   {
   
   //On verifie l'adresse email.
   
   $mail = $_POST['mail'];
   
   if(empty($_POST['mail']))
   {
   echo '<div class="reponse">Veuillez indiquer votre adresse email.</div>';
   }
   else if(!preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#is', $mail))
   {
   echo '<div class="reponse">L\'adresse email '.htmlspecialchars($mail, ENT_QUOTES).' n\'est pas valide.</div>';
   }
   else if($_POST['mail_verif'] != $_POST['mail'])
   {
   echo '<div class="reponse">Veuillez retaper correctement votre adresse email.</div>';
   }
   else if(mysql_query("SELECT id FROM membre WHERE membre_mail=".$mail))
   {
   echo '<div class="reponse">L\'adresse email '.htmlspecialchars($mail, ENT_QUOTES).' est déjà utiliser, Choisis en une autre.</div>';
   }
   else
   {
   
   //On verifie le site.
   
   if(empty($_POST['site']))
   {
   echo '<div class="reponse">Veuillez indiquer votre site web.</div>';
   }
   else
   {
   
   //On verifie le captcha.
   
   if(!empty($_POST['captcha']))
   {
   if(isset($_SESSION['captcha']) && $_POST['captcha'] == $_SESSION['captcha'])
   echo '';
   else
   echo '<div class="reponse">Le captcha n\'est pas bon.</div>';
   session_destroy(); // Pour eviter les multiposts.
   
   //On envoi tout a la BDD.
   
   mysql_query("INSERT INTO membres VALUES('', '$pseudo', '$mdp', '$mail', '$site')");
   echo 'Votre inscription a bien été validée, vous pouvez vous connecter dés maintenant.';}}}}}


Voila mon code modifié, mais je ne m'en sort vraiment pas pour la requete d'envoi a la BDD la quand je valide mon inscription je me retrouve avec

Le captcha n'est pas bon.
Votre inscription a bien été validée, vous pouvez vous connecter dés maintenant.

alors que normalement si le message d'erreur du captcha apparait, le message de validation lui ne devrait pas apparaitre :s
Tes tests conditionnels sont toujours incohérents et tu ne connais toujours pas le fonctionnements des requêtes.

Je te renvoie donc à ma précédente réponse. Merci de suivre les liens et de prendre le temps d'apprendre. Smiley murf