8791 sujets

Développement web côté serveur, CMS

Bonjour à tous.

J'aimerais vous soumettre mon script d'inscription qui présente des dysfonctionnements inconnus o_O

<?php  //Avant toute chose, je vérifie ici que tous les champs sont bien remplis
if (!empty($_POST['pseudo'])
		AND !empty($_POST['password'])
		AND !empty($_POST['conf_pass'])
		AND !empty($_POST['email'])
		AND !empty($_POST['conf_mail'])
		AND !empty($_POST['age'])
		AND !empty($_POST['passion'])
		AND !empty($_POST['sexe'])
		AND !empty($_POST['reglement'])
	)
{
  // Si tous les champs sont remplis, je vérifie maintenant leur contenu. Si une condition est vrai, une variable ($pseudo, $email, $password...) est crée
	if (strlen($_POST['pseudo']) > 3)
		{
			$pseudo = $_POST['pseudo'];
		}
	else
		{
			echo "Votre pseudonyme est trop court !";
		}
		
	if (strlen($_POST['password']) > 3 AND $_POST['password'] == $_POST['conf_pass'])
		{
			$password = $_POST['password'];
		}
	else
		{
			echo "Votre mot de passe est invalide !";
		}
		
	if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['email']))
		{
			$email = $_POST['email'];
		}
	else
		{
			echo "Votre adresse e-mail est invalide !";
		}
	
	if ($_POST['age'] > 5)
		{
			$age = $_POST['age'];
		}
	else
		{
			echo "Vous avez moins de 5 ans ?? INCROYABLE !";
		}
	
	if (!empty($_POST['passion']))
		{
			$passion = $_POST['passion'];
		}
	else
		{
			echo "Merci de renseigner au moins une passion.";
		}
	
	if (!empty($_POST['sexe']))
		{
			$sexe = $_POST['sexe'];
		}
	else
		{
			echo "Merci d'indiquer votre sexe !";
		}
	
	if (!empty($_POST['reglement']))
		{
			$reglement = $_POST['reglement'];
		}
	else
		{
			echo "Vous devez accepter le règlement pour vous inscrire !";
		}

if (!empty($pseudo)  // Je vérifie ici que les variables $pseudo, $password, $email... crées plus haut existent avant d'établir une connexion à la BDD et enregistrer définitivement les informations de l'utilisateur
	AND !empty($password)
	AND !empty($email)
	AND !empty($age)
	AND !empty($passion)
	AND !empty($sexe)
	AND !empty($reglement)
	)
	{
		require("connect_bdd.php");

		$req = $bdd->prepare('INSERT INTO membres VALUES(\'\', [langue]seudo, [langue]assword, :email, :age, [langue]assions, :sexe)');
		$req->execute (array(		
						'pseudo'=> $pseudo,
						'password'=> $password,
						'email'=> $email,
						'age'=> $age,
						'passions'=> $passion,
						'sexe'=> $sexe
					));
	
		$req->closeCursor();
		header("Location: ../index.php");	
	}
}
?>


Avec ce code, non seulement les différents messages d'erreurs ne s'affichent pas en fonction des circonstances, mais les conditions de vérification du pseudo, password, email... ne sont pas prises en compte.
Alors, pouvez vous m'indiquer à quel niveau je me suis planté dans ce code ? ou plutôt me proposer une méthode plus sobre pour parvenir au même résultat ?

Merci d'avance pour vos réponses Smiley smile
Modifié par Wingate (21 May 2011 - 15:45)
C'est normal.
Tu as un problème avec tes conditions.

Tu vérifies deux fois la même chose (si le champ est vide ou pas)

J'ai un peu changé ton code, j'ai ajouté les issets en haut, nécessaires avant même d'utiliser les empty, j'ai ajouté un is_numeric à ton champ "age", et j'ai changé ton expression régulière d'email en un simple filtre en PHP.

Je suis arrivé à ça: http://pastebin.com/nXEQhHxX

Et comme écrit tout en bas en commentaire, tu n'as qu'a ajouté des elseif pour chaque champ si il est vide et afficher un message d'erreur personnalisé.

Bon courage!
Technologix a écrit :
j'ai ajouté les issets en haut, nécessaires avant même d'utiliser les empty


La première chose que fait empty() c'est un appel interne à isset()... donc en gros la moitié de ton code ne sert à rien...
Modifié par jb_gfx (21 May 2011 - 16:41)
@Technologix: J'ai un message d'erreur à la ligne 12 de ton pastebin:

Parse error: syntax error, unexpected T_DOUBLE_ARROW in C:\wamp\www\site\includes\inscription.php on line 97


Je profite pour rajouter le code de mon formulaire au cas où:

<form action="inscription.php" method="post">
	<fieldset>
            <legend>Informations d'Enregistrement au Site</legend>
			<p style="color: red; font-size: 45px;">
				</p>
                    <label for="pseudo">Pseudo*</label>
                    <input type="text" id="pseudo" name="pseudo"><br /><br />

                    <label for="password">Mot de passe*</label>
                    <input type="password" id="password" name="password"><br />
                    <label for="conf_pass">Confirmez*</label>
                    <input type="password" id="conf_pass" name="conf_pass"><br /><br />

                    <label for="email">Adresse mail*</label>
                    <input type="text" id="email" name="email"><br />
					<label for="conf_mail">confirmez*</label>
                    <input type="text" id="conf_mail" name="conf_mail"><br /><br />
					
					<label for="pseudo">Age</label>
                    <input type="text" id="age" name="age"><br /><br />
					
					<label for="passion" title="Séparez par des virgules">Vos passions:</label>
                    <input type="text" id="passion" name="passion"><br /><br />
					
					<label for="civilite" >Régime</label>
					Homme <input type="radio" name="sexe" value="homme" id="homme" /> 
                    Femme <input type="radio" name="sexe" value="femme" id="femme" /> <br /><br />

                    <label for="reglement">J'ai lu et accepté le <a href="#">règlement du site</a></label>
                    <input type="checkbox" name="reglement">
					<input type="submit" value="Valider" >
</fieldset>
</form>


Merci encore !
jb_gfx a écrit :


La première chose que fait empty() c'est un appel interne à isset()... donc en gros la moitié de ton code ne sert à rien...


Si tu ne mets pas isset au début, si l'utilisateur rentre dans la page, les empty seront verifiés, et donc tous les messages d'erreurs seront affichés Smiley smile

Wingate a écrit :
@Technologix: J'ai un message d'erreur à la ligne 12 de ton pastebin:

Parse error: syntax error, unexpected T_DOUBLE_ARROW in C:\wamp\www\site\includes\inscription.php on line 97


Merci encore !


A quoi correspond la ligne 97 s'il te plait?
Tu devrais relire mon commentaire et essayer de le comprendre (et aussi revoir les fonctions de base de PHP)...
Modifié par jb_gfx (21 May 2011 - 21:33)