Tout s'écrit dans ma BDD.....

Vlandy Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
Bonjour,

mon problème est simple lors de mon formulaire d'inscription si un utilisateur oublie de remplir un champ( exemple login,pass,email,sexe,pays) et qu'il appuit sur "s'inscrire" il obtient un message d'erreur et ne peut pas s'inscrire sur le site tant qu'il n'a pas remplis le champ manquant...jusque la tout est normal sauf QUE même avec ces erreurs si il appuit sur "s'inscrire" ben ma BDD enregistre quand meme son pseudo,email,pass ect... alors qu'elle ne devrait pas....je comprend pas? je veux que tout s'enregistre dans ma BDD que SI le membre a tout remplis, pas avant!!!

voici mon code:

if(isset($_POST['submit'] ))
	{
	$pseudo = mysql_real_escape_string(htmlentities(trim($_POST['pseudo'])));
	$email = mysql_real_escape_string(htmlentities(trim($_POST['email'])));
	$password = mysql_real_escape_string(htmlentities(trim($_POST['password'])));
	$repeatpassword = mysql_real_escape_string(htmlentities(trim($_POST['repeatpassword'])));
	$sexe = mysql_real_escape_string(htmlspecialchars(trim($_POST['sexe'])));
	
	
	
	if(empty($pseudo))
	{
	
	$erreurpseudo = "Indiquez votre nom";
	}
	if(empty($password))
	{
	
	$erreurpassword = "Indiquez votre pass";
	}
	if($password != $repeatpassword)
	{
	
	$erreurpassword = "pas le meme pass";
	}
	if(!filter_var($email,FILTER_VALIDATE_EMAIL))
	{
	
	$erreuremail = "Adresse email pas correct";
	}
		
}
	

	
	  try{
  $bdd = new PDO('mysql:host=localhost;dbname=bddtest', 'root', '') or die(print_r($bdd->errorInfo()));
  $bdd->exec('SET NAMES utf8');
  }
  
  catch(Exeption $e){
  die('Erreur:'.$e->getMessage());
  }


 $req = $bdd->prepare('INSERT INTO membres (pseudo,password,email,sexe) VALUES (:pseudo,:password,:email,:sexe)');
    $req->execute(array(
      'pseudo'=>$pseudo,
      'password'=>sha1($password),
      'email'=>$email,
	'sexe'=>$sexe
   ));
   
  }
   
 ?> 


je vous remercie d'avance pour votre aide

11 réponses

  1. Utilisateur anonyme
     
    C'est normal que cela entre des champs vide car au moment de l'instanciation :

    $pseudo = mysql_real_escape_string(htmlentities(trim($_POST['pseudo'])));
    $email = mysql_real_escape_string(htmlentities(trim($_POST['email'])));
    $password = mysql_real_escape_string(htmlentities(trim($_POST['password'])));
    $repeatpassword = mysql_real_escape_string(htmlentities(trim($_POST['repeatpassword'])));
    $sexe = mysql_real_escape_string(htmlspecialchars(trim($_POST['sexe'])));

    Si aucun champs n'a été entré tes différentes variables ($pseudo ...) seront vides.
    Ensuite tu vérifies si les champs sont vides :

    if(empty($pseudo))
    {

    $erreurpseudo = "Indiquez votre nom";
    }
    ...

    Seulement tu instancie une nouvelle variable , ici : $erreurpseudo
    Je ne vois à quoi servent ces variables dans le code car elles ne sont pas utilisées.

    Et juste après cela tu fait ton INSERT en base du coup les variables de départ ($pseudo...) n'ont pas bougé depuis l'instanciation par $_POST si elles ont été instanciées vides elles seront insérées vides.

    En changeant un peu la logique tu peux essayer qqch comme ça :

    if(isset($_POST['submit'] ))
    {

    if(!empty($pseudo))
    {
    $pseudo = mysql_real_escape_string(htmlentities(trim($_POST['pseudo'])));
    }else{
    //Soit on redirige directement vers le formulaire
    header('Location:formulaire.php');

    //Soit on définie un code erreur pour prévenir l'utilisateur sur quel champ il a fait une erreur
    }
    //...Ainsi de suite pour les différents champs

    }
    0
  2. Vlandy Messages postés 19 Date d'inscription   Statut Membre Dernière intervention  
     
    salut kyser soze et merci de ta réponse

    En fait si, la variable $erreurpseudo a une utilité car je l'utilise aussi un peu plus bas dans mon code ici

    <label for="pseudo" >Username :</label>
          <input type="text" name="pseudo" value='<?php echo isset ($pseudo) ? $pseudo : ' ' ; ?>' ><br/>
    	<div class="error"> <?php if(isset($erreurpseudo)) echo $erreurpseudo;?> </div>
          


    ou pour $erreuremail

    <label for="email">Email :</label>
          <input type="text" name="email"value='<?php echo isset ($email) ? $email : ' ' ; ?>' >  <br/>
        <div class="error"> <?php if(isset($erreuremail)) echo $erreuremail;?> </div>
    


    je procède de cette façon car je veux que les erreurs ce place sous les champs correspondant et non tout en haut du formulaire par exemple...

    Sinon pour le reste j'ai pas vraiment compris(je débute en php) je ne vois ce que j'ai oublier , j'ai fais le code de manière a si il n'y a aucune erreur tout dois rentrer dans ma bdd, si y a une erreur rien ne dois rentrer
    0
  3. Alain_42 Messages postés 5413 Statut Membre 904
     
    tu passes par une variable qui mémorise si tous les champs sont ok:
    <?php
    if(isset($_POST['submit'] ))
    {
    	//variable de travail
    		$tous_champs_ok=true;
    	//	
    	if(!empty($pseudo))
    	{
    		$pseudo = mysql_real_escape_string(htmlentities(trim($_POST['pseudo'])));
    	}else{
    		$tous_champs_ok=false; 
    	
    
    		// + un code erreur pour prévenir l'utilisateur sur quel champ il a fait une erreur
    	}
    	//...Ainsi de suite pour les différents champs
    	
    	if($tous_champs_ok){ //sous ententu ==true
    		//la tu enregistres dans ta BDD
    	}
    }
    0
  4. Vlandy Messages postés 19 Date d'inscription   Statut Membre Dernière intervention  
     
    Salut Alain merci tu as vu juste, j'avais oublié de mettre les variable ok=true ou false . alors quand il y a une erreur plus rien rentre dans ma BDD c'est une bonne chose mais maintenant même si il n'y a plus d'erreur, plus rien ne rentre non plus

    voici mon nouveau code:

    <?php
    	if(isset($_POST['submit'] ))
    	{
    	
    		$tous_champs_ok=true;
    	
    	if(!empty($pseudo))
    	{
    		$pseudo = mysql_real_escape_string(htmlentities(trim($_POST['pseudo'])));
    	
    	}else{
    	
    		$tous_champs_ok=false; 
    		
    	$erreurpseudo = "Indiquez votre nom";
         }
    
    		if(!empty($email))
    	{
    		$email = mysql_real_escape_string(htmlentities(trim($_POST['email'])));
    	
    	}else{
    	
    		$tous_champs_ok=false; 
    		
    	$erreuremail = "Adresse pas correct";
         
    	 }
    	
    		if(!empty($password))
    	{
    		$password = mysql_real_escape_string(htmlentities(trim($_POST['password'])));
    	
    	}else{
    	
    		$tous_champs_ok=false; 
    		
    	$erreurpassword = "Indiquez votre pass";
         
    	 }
    	
    	if($tous_champs_ok){ 
    	
    	 try{
      $bdd = new PDO('mysql:host=localhost;dbname=bddtest', 'root', '') or die(print_r($bdd->errorInfo()));
      $bdd->exec('SET NAMES utf8');
      }
      
      catch(Exeption $e){
      die('Erreur:'.$e->getMessage());
      }
    
    
     $req = $bdd->prepare('INSERT INTO membres (pseudo,password,email,sexe) VALUES (:pseudo,:password,:email,:sexe)');
        $req->execute(array(
          'pseudo'=>$pseudo,
          'password'=>sha1($password),
          'email'=>$email,
    	'sexe'=>$sexe
       ));
    	
    	}
    }
    
    
    ?>
    
    
    
    
    
    <form action="" method="post">
          
    	  
    	  
    	  
          <label for="pseudo" >Username :</label>
          <input type="text" name="pseudo" value='<?php echo isset ($pseudo) ? $pseudo : ' ' ; ?>' ><br/>
    	<div class="error"> <?php if(isset($erreurpseudo)) echo $erreurpseudo;?> </div>
          
    	 
         
    	  <label for="email">Email :</label>
          <input type="text" name="email"value='<?php echo isset ($email) ? $email : ' ' ; ?>' >  <br/>
        <div class="error"> <?php if(isset($erreuremail)) echo $erreuremail;?> </div>
    
    	
    	
    		<label for="password">Password :</label>
          <input type="password" name="password" >  <br/>
    	<div class="error"> <?php if(isset($erreurpassword)) echo $erreurpassword;?> </div>


    aurais je fait une erreur?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Alain_42 Messages postés 5413 Statut Membre 904
     
    mets un petit echo juste avant:
    if($tous_champs_ok){

    echo 'Etat de la variable tous_champs_ok: '.$tous_champs_ok;

    ça va te répondre si
    true =>1
    false=>0
    0
  7. Vlandy Messages postés 19 Date d'inscription   Statut Membre Dernière intervention  
     
    alors si j'écris echo if($tous_champs_ok){ j'ai ce message d'erreur : Parse error: syntax error, unexpected T_IF in C:\wamp\www\Site5\new.php on line 51

    et si je mets echo 'Etat de la variable tous_champs_ok: '.$tous_champs_ok;

    j'obtiens :
    Notice: Undefined variable: pseudo in C:\wamp\www\Site5\new.php on line 66
    Notice: Undefined variable: password in C:\wamp\www\Site5\new.php on line 67
    Notice: Undefined variable: email in C:\wamp\www\Site5\new.php on line 68
    Notice: Undefined variable: sexe in C:\wamp\www\Site5\new.php on line 71

    ce qui correspond dans mon code a :

    $req = $bdd->prepare('INSERT INTO membres (pseudo,password,email,sexe) VALUES (:pseudo,:password,:email,:sexe)');
    $req->execute(array(
    'pseudo'=>$pseudo,
    'password'=>sha1($password),
    'email'=>$email,
    'sexe'=>$sexe
    0
  8. Alain_42 Messages postés 5413 Statut Membre 904
     
    il faut mettre comme ça:

    ......
    $erreurpassword = "Indiquez votre pass";
         
    	 }
    
    	echo  'Etat de la variable tous_champs_ok: '.$tous_champs_ok;
    
    	if($tous_champs_ok){ 
    	
    	 try{
    ..........
    
    
    
    0
  9. Vlandy Messages postés 19 Date d'inscription   Statut Membre Dernière intervention  
     
    Ah pardon j'avais mal compris donc je n'est plus d'erreur mais je n'est pas de réponse non plus, sur mon formulaire "Etat de la variable tous_champs_ok:" reste vide

    
    <?php
    	if(isset($_POST['submit'] ))
    	{
    	
    	$tous_champs_ok = true;
    	
    	if(!empty($pseudo))
    	{
    	$pseudo = mysql_real_escape_string(htmlentities(trim($_POST['pseudo'])));
    	
    	}else{
    	$tous_champs_ok = false;	
    	$erreurpseudo = "Indiquez votre nom";
         }
    
    	if(!empty($email))
    	{
    	$email = mysql_real_escape_string(htmlentities(trim($_POST['email'])));
    	
    	}else{
    	$tous_champs_ok = false;
    	$erreuremail = "Adresse pas correct";
         
    	 }
    	
    	if(!empty($password))
    	{
    	$password = mysql_real_escape_string(htmlentities(trim($_POST['password'])));
    	
    	}else{
    	$tous_champs_ok = false;
    	$erreurpassword = "Indiquez votre pass";
         
    	}
    	
    	
    	
    }	
    	
    	
    	
    	
    echo  'Etat de la variable tous_champs_ok: '.$tous_champs_ok;
    
    	if($tous_champs_ok){ 
     
    try{
      $bdd = new PDO('mysql:host=localhost;dbname=bddtest', 'root', '') or die(print_r($bdd->errorInfo()));
      $bdd->exec('SET NAMES utf8');
      }
      
      catch(Exeption $e){
      die('Erreur:'.$e->getMessage());
      }
      
      
        
        $req = $bdd->prepare('INSERT INTO membres (pseudo,password,email,sexe) VALUES (:pseudo,:password,:email,:sexe)');
        $req->execute(array(
          'pseudo'=>$pseudo,
          'password'=>sha1($password),
          'email'=>$email,
    	'sexe'=>$sexe
    	  
    	  ));
    	
    	
    
    }	
    	
    
    ?>
    
    
    
    
    
    <form action="" method="post">
          
    	  
    	  
    	  
          <label for="pseudo" >Username :</label>
          <input type="text" name="pseudo" value='<?php echo isset ($pseudo) ? $pseudo : ' ' ; ?>' ><br/>
    	<div class="error"> <?php if(isset($erreurpseudo)) echo $erreurpseudo;?> </div>
          
    	 
         
    	  <label for="email">Email :</label>
          <input type="text" name="email"value='<?php echo isset ($email) ? $email : ' ' ; ?>' >  <br/>
        <div class="error"> <?php if(isset($erreuremail)) echo $erreuremail;?> </div>
    
    	
    	
    		<label for="password">Password :</label>
          <input type="password" name="password" >  <br/>
    	<div class="error"> <?php if(isset($erreurpassword)) echo $erreurpassword;?> </div>
    
    	  
    	<div class="deplacesub">
    		<input type="submit" name="submit" value="Envoyer" />
    		</div>
    	
    	</form>
       
    
    0
  10. Alain_42 Messages postés 5413 Statut Membre 904
     
    bon j'ai trouvé il faut tester empty sur les $_POST et pas sur $pseudo etc car ces variables ne sont pas encore chargées par les valeurs reçues

    de plus la } fermante du if isset $_POST['submit'] n'est pas au bon endroit
    <?php
    	if(isset($_POST['submit'] ))
    	{
    	
    	$tous_champs_ok = true;
    	//il faut tester sur les $_POST['....']
    	if(!empty($_POST['pseudo']))
    	{
    	$pseudo = mysql_real_escape_string(htmlentities(trim($_POST['pseudo'])));
    	
    	}else{
    	$tous_champs_ok = false;	
    	$erreurpseudo = "Indiquez votre nom";
         }
    
    	if(!empty($_POST['email']))
    	{
    	$email = mysql_real_escape_string(htmlentities(trim($_POST['email'])));
    	
    	}else{
    	$tous_champs_ok = false;
    	$erreuremail = "Adresse pas correct";
         
    	 }
    	
    	if(!empty($_POST['password']))
    	{
    	$password = mysql_real_escape_string(htmlentities(trim($_POST['password'])));
    	
    	}else{
    	$tous_champs_ok = false;
    	$erreurpassword = "Indiquez votre pass";
         
    	}
    	
    
    	///TEST
    echo  'Etat de la variable tous_champs_ok: '.$tous_champs_ok;
    	/////
    	
    	if($tous_champs_ok){ 
    	///TEST
    	echo "pret a enregistrer";
    	///
    try{
      $bdd = new PDO('mysql:host=localhost;dbname=bddtest', 'root', '') or die(print_r($bdd->errorInfo()));
      $bdd->exec('SET NAMES utf8');
      }
      
      catch(Exeption $e){
      die('Erreur:'.$e->getMessage());
      }
      
      
        
        $req = $bdd->prepare('INSERT INTO membres (pseudo,password,email,sexe) VALUES (:pseudo,:password,:email,:sexe)');
        $req->execute(array(
          'pseudo'=>$pseudo,
          'password'=>sha1($password),
          'email'=>$email,
    	'sexe'=>$sexe
    	  
    	  ));
    	
    	
    
    }	
    	} //il faut cette accolade de fin de if(isset($_POST['submit'])) ICI
    
    ?>
    
    
    
    
    
    <form action="" method="post">
          
    	  
    	  
    	  
          <label for="pseudo" >Username :</label>
          <input type="text" name="pseudo" value='<?php echo isset ($pseudo) ? $pseudo : ' ' ; ?>' ><br/>
    	<div class="error"> <?php if(isset($erreurpseudo)) echo $erreurpseudo;?> </div>
          
    	 
         
    	  <label for="email">Email :</label>
          <input type="text" name="email"value='<?php echo isset ($email) ? $email : ' ' ; ?>' >  <br/>
        <div class="error"> <?php if(isset($erreuremail)) echo $erreuremail;?> </div>
    
    	
    	
    		<label for="password">Password :</label>
          <input type="password" name="password" >  <br/>
    	<div class="error"> <?php if(isset($erreurpassword)) echo $erreurpassword;?> </div>
    
    	  
    	<div class="deplacesub">
    		<input type="submit" name="submit" value="Envoyer" />
    		</div>
    	
    	</form>
       
    0
  11. Vlandy Messages postés 19 Date d'inscription   Statut Membre Dernière intervention  
     
    Wow enfin tout fonctionne parfaitement !! les données sont bien inscrite dans ma BDD et je n'est plus d'erreur!!! merci beaucoup de m'avoir donné de votre temps pour résoudre ce fastidieux problème. :))

    passez une très bonne soirée
    0