Page 1 sur 1

Erreur page inscription

Posté : 25 mars 2011, 22:13
par prohand
Bonjour,

J'ai cette page d'inscription :
<?php
include('config.php');
?>
<head>
<title>Formulaire</title>
</head> 
<?php

$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
//On verifie que le formulaire a ete envoye
if(isset($_POST['login'], $_POST['pwd'], $_POST['passverif'], $_POST['mail'], $_POST['codepostal'], $_POST['sexe'], $_POST['ville']) and $_POST['login']!='')
{
        //On verifie si le mot de passe et celui de la verification sont identiques
        If ($_POST['pwd']==$_POST['passverif'])
        {
                //On verifie si le mot de passe a 6 caracteres ou plus
                if(strlen($_POST['pwd'])>=6)
                {
                        //On verifie si lemail est valide
                        if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',$_POST['mail']))
                        {
                                //On echape les variables pour pouvoir les mettre dans une requette SQL
                                $login = mysql_real_escape_string($_POST['login']);
                                $pwd = mysql_real_escape_string($_POST['pwd']);
                                $mail = mysql_real_escape_string($_POST['mail']);
                                $sexe = mysql_real_escape_string($_POST['sexe']);
								$codepostal = mysql_real_escape_string($_POST['codepostal']);
								$ville = mysql_real_escape_string($_POST['ville']);
								$age=$_POST['age'];
                                //On verifie sil ny a pas deja un utilisateur inscrit avec le pseudo choisis
                                $dn=$connexion->query('select login from membres where login="'.$login.'"');
								$dn->setFetchMode(PDO::FETCH_OBJ);
                                if($dn==true)
                                {
								//On recupere le nombre dutilisateurs pour donner un identifiant a lutilisateur actuel
                                        $dn2=$connexion->query('select id from membres');
										$dn2->setFetchMode(PDO::FETCH_OBJ);
                                        $id = $dn2+1;
                                        //On enregistre les informations dans la base de donnee
                                        if($connexion->query('insert into membres(id, login, pwd, mail, ville, sexe, codepostal, age) values ('.$id.', "'.$login.'", "'.$pwd.'", "'.$mail.'", "'.$ville.'", "'.$sexe.'", "'.$codepostal.'", "'.$age.'")'))
                                        {
                                                //Si ca a fonctionne, on n'affiche pas le formulaire
                                                $form = false;
?>
<div class="message">Vous avez bien &eacute;t&eacute; inscrit. Vous pouvez dor&eacute;navant vous connecter.<br />
<a href="login.php">Se connecter</a></div>
<?php
                                        }
                                        else
                                        {
                                                //Sinon on dit quil y a eu une erreur
                                                $form = true;
                                                $message = 'Une erreur est survenue lors de l\'inscription.';
                                        }
                                }
                                else
                                {
                                        //Sinon, on dit que le pseudo voulu est deja pris
                                        $form = true;
                                        $message = 'Un autre utilisateur utilise d&eacute;j&agrave; le nom d\'utilisateur que vous d&eacute;sirez utiliser.';
                                }
                        }
                        else
                        {
                                //Sinon, on dit que lemail nest pas valide
                                $form = true;
                                $message = 'L\'email que vous avez entr&eacute; n\'est pas valide.';
                        }
                }
                else
                {
                        //Sinon, on dit que le mot de passe nest pas assez long
                        $form = true;
                        $message = 'Le mot de passe que vous avez entr&eacute; contien moins de 6 caract&egrave;res.';
                }
        }
        else
        {
                //Sinon, on dit que les mots de passes ne sont pas identiques
                $form = true;
                $message = 'Les mots de passe que vous avez entr&eacute; ne sont pas identiques.';
        }
}
else
{
        $form = true;
}
if($form)
{
        //On affiche un message sil y a lieu
        if(isset($message))
        {
                echo '<div class="message">'.$message.'</div>';
        }
        //On affiche le formulaire
?>

<div class="content"><center>
    <form method="post" action="inscription.php"name="Formulaire">
        Veuillez remplir ce formulaire pour vous inscrire:<br />
        <div class="center">
		<input type="hidden" 
	name="pflicht" 
	value="login,mail">
			*Nom d'utilisateur :<input type="text" name="login" value="" /><br>
			Mot de passe : <input type="password" name="pwd" value="" /><br>
			Mot de passe ( Vérification ): <input type="password" name="passverif" value="" /><br>
			Email : <input type="text" name="mail" value="" /><br>
			Sexe:  <select name="sexe"> <OPTION VALUE="Homme">Homme</OPTION><OPTION VALUE="Femme">Femme</OPTION> /></select><br>
			<p>Age :<select name="age"><?php
                               $i=1;
                               while($i<99){
                               ?><option name="age" value="<?php echo $i; ?>" /><?php echo $i; ?></option><?php
                               $i++;
                               }
                               ?></select><br>
			Ville: <input type="text" name="ville" value="" /><br>
			Code Postal: <input type="text" name="codepostal" value="" /><br>
            <input type="submit" value="Envoyer" />
                </div>
    </form>
</center></div>
<?php
}
?>
                
        </body>
</html>
Mais quand j'inscris une personne il me retourne : Une erreur est survenue lors de l'inscription.

Et je ne vois pas d’où pourrait le problème.

Merci de votre aide.

Re: Erreur page inscription

Posté : 25 mars 2011, 22:47
par moogli
Salut,

a vu de nez requete SQL foireuse vu que c'est lié au if ligne 40

donc il faut récupérer les message d'erreur, pour ça modifie le message d'erreur
<?php
$message = 'Une erreur est survenue lors de l\'inscription.';
$err = $connexion->errorInfo();
$message .= '<p style="border: 1px solid red; text-align:center;font-size:20px;color:red;">'. $err[2].' </p>';

?>
après tu peux corriger :mrgreen:

@+

Re: Erreur page inscription

Posté : 25 mars 2011, 22:54
par prohand
Il ma mis ceci :

Code : Tout sélectionner

Duplicate entry '2' for key 'PRIMARY'

Re: Erreur page inscription

Posté : 25 mars 2011, 23:16
par moogli
c'est clair tu essai de forcer une clef primaire a une valeur existante ce qui n'est pas autorisé revoir la requête afin de laisser l'auto incrément faire le travail.

qui plus est ta façon de gérer l'auto incrément est plus que mauvaise vu que tu ne sais pas quel retour tu va avoir !

@+

Re: Erreur page inscription

Posté : 25 mars 2011, 23:35
par prohand
Problème résolu avec ce code :
<?php
include('config.php');
?>
<head>
<title>Formulaire</title>
</head> 
<?php

$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
//On verifie que le formulaire a ete envoye
if(isset($_POST['login'], $_POST['pwd'], $_POST['passverif'], $_POST['mail'], $_POST['codepostal'], $_POST['sexe'], $_POST['ville']) and $_POST['login']!='')
{
        //On verifie si le mot de passe et celui de la verification sont identiques
        If ($_POST['pwd']==$_POST['passverif'])
        {
                //On verifie si le mot de passe a 6 caracteres ou plus
                if(strlen($_POST['pwd'])>=6)
                {
                        //On verifie si lemail est valide
                        if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',$_POST['mail']))
                        {
                                //On echape les variables pour pouvoir les mettre dans une requette SQL
                                $login = ($_POST['login']);
                                $pwd = ($_POST['pwd']);
                                $mail = ($_POST['mail']);
                                $sexe = ($_POST['sexe']);
								$codepostal = ($_POST['codepostal']);
								$ville = ($_POST['ville']);
								$age=$_POST['age'];
                                //On verifie sil ny a pas deja un utilisateur inscrit avec le pseudo choisis
                                $dn=$connexion->query('select login from membres where login="'.$login.'"');
								$dn->setFetchMode(PDO::FETCH_OBJ);
                                if($dn==true)
                                {
                                        //On enregistre les informations dans la base de donnee
                                        if($connexion->query('insert into membres(login, pwd, mail, ville, sexe, codepostal, age) values ("'.$login.'", "'.$pwd.'", "'.$mail.'", "'.$ville.'", "'.$sexe.'", "'.$codepostal.'", "'.$age.'")'))
                                        {
                                                //Si ca a fonctionne, on n'affiche pas le formulaire
                                                $form = false;
?>
<div class="message">Vous avez bien &eacute;t&eacute; inscrit. Vous pouvez dor&eacute;navant vous connecter.<br />
<a href="login.php">Se connecter</a></div>
<?php
                                        }
                                        else
                                        {
                                                //Sinon on dit quil y a eu une erreur
                                                $form = true;
                                                $message = 'Une erreur est survenue lors de l\'inscription.';
												$err = $connexion->errorInfo();
$message .= '<p style="border: 1px solid red; text-align:center;font-size:20px;color:red;">'. $err[2].' </p>';

                                        }
                                }
                                else
                                {
                                        //Sinon, on dit que le pseudo voulu est deja pris
                                        $form = true;
                                        $message = 'Un autre utilisateur utilise d&eacute;j&agrave; le nom d\'utilisateur que vous d&eacute;sirez utiliser.';
                                }
                        }
                        else
                        {
                                //Sinon, on dit que lemail nest pas valide
                                $form = true;
                                $message = 'L\'email que vous avez entr&eacute; n\'est pas valide.';
                        }
                }
                else
                {
                        //Sinon, on dit que le mot de passe nest pas assez long
                        $form = true;
                        $message = 'Le mot de passe que vous avez entr&eacute; contien moins de 6 caract&egrave;res.';
                }
        }
        else
        {
                //Sinon, on dit que les mots de passes ne sont pas identiques
                $form = true;
                $message = 'Les mots de passe que vous avez entr&eacute; ne sont pas identiques.';
        }
}
else
{
        $form = true;
}
if($form)
{
        //On affiche un message sil y a lieu
        if(isset($message))
        {
                echo '<div class="message">'.$message.'</div>';
        }
        //On affiche le formulaire
?>

<div class="content"><center>
    <form method="post" action="inscription.php"name="Formulaire">
        Veuillez remplir ce formulaire pour vous inscrire:<br />
        <div class="center">
		<input type="hidden" 
	name="pflicht" 
	value="login,mail">
			*Nom d'utilisateur :<input type="text" name="login" value="" /><br>
			Mot de passe : <input type="password" name="pwd" value="" /><br>
			Mot de passe ( Vérification ): <input type="password" name="passverif" value="" /><br>
			Email : <input type="text" name="mail" value="" /><br>
			Sexe:  <select name="sexe"> <OPTION VALUE="Homme">Homme</OPTION><OPTION VALUE="Femme">Femme</OPTION> /></select><br>
			<p>Age :<select name="age"><?php
                               $i=1;
                               while($i<99){
                               ?><option name="age" value="<?php echo $i; ?>" /><?php echo $i; ?></option><?php
                               $i++;
                               }
                               ?></select><br>
			Ville: <input type="text" name="ville" value="" /><br>
			Code Postal: <input type="text" name="codepostal" value="" /><br>
            <input type="submit" value="Envoyer" />
                </div>
    </form>
</center></div>
<?php
}
?>
                
        </body>
</html>
Activation de l'auto increment dans phpmyadmin sur id qui n'était pas actif.