Page 1 sur 1

Inscription: Vérifier les données d'un formulaire

Posté : 21 mai 2011, 14:04
par Cephas10
Salut à 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(\'\', :pseudo, :password, :email, :age, :passions, :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 pour votre aide,
Cephas10

Re: Inscription: Vérifier les données d'un formulaire

Posté : 21 mai 2011, 15:49
par Dux
Bonjour,

tu peux légèrement simplifier, ça te permettra peut être de trouver tes erreurs plus facilement.
<?php
function protect($str) { return trim(stripslashes($str)); }

// Recup des POST
$pseudo = protect($_POST['pseudo']);
$password = protect($_POST['password']);
$conf_pass = protect($_POST['conf_pass']);
$email = protect($_POST['email']);
// et les autres....

if ($pseudo != '') {
    // Lance les vérifs
    if (strlen($pseudo)) < 4) $err[] = 'Votre pseudo est trop court';
    if ($password == '' OR $password != $conf_pass) $err[] = 'Mot de passe invalide';
    // .....

    if (!is_array($err)) {
        // Enregistre en BDD
        header('location: ....');
    } else {
        foreach($err as $aff) echo $aff.'<br />';
    }
}

?>

Re: Inscription: Vérifier les données d'un formulaire

Posté : 21 mai 2011, 15:56
par moogli
Salut,

Sans voir le formulaire on ne peut pas te dire s'il y a un soucis au niveau du nom des champs.

Ton vérifie si toutes les conditions mais en cas d'erreur tu ne fait qu'afficher un message il faut arrêter la vérification.
Deux choix tu fait tout les tests et en cas d'erreurs tu met le message dans un tableau ensuite si le nombre d'éléments dans le tableau est supérieur a zero tu affiche le message d'erreur (ou les messages) sinon tu fait la requete ( donc dans le else).

Seconde méthode des if / else imbriqué
If () {
If(){
}
else{
}
}
else {}

@+

Re: Inscription: Vérifier les données d'un formulaire

Posté : 21 mai 2011, 16:07
par Dux
Pour le débugage, tu peux afficher tes variables en début de script
print_r($_POST);

Re: Inscription: Vérifier les données d'un formulaire

Posté : 21 mai 2011, 16:54
par Cephas10
Merci pour vos réponses:

Voici le code de mon formulaire:
<form action="inscription.php" method="post">
	<fieldset>
            <legend>Formulaire d'inscription 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>					
</div>