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

Vlandy Messages postés 20 Statut Membre -  
 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

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
Vlandy Messages postés 20 Statut Membre
 
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
Alain_42 Messages postés 5413 Statut Membre 894
 
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
Vlandy Messages postés 20 Statut Membre
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5413 Statut Membre 894
 
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
Vlandy Messages postés 20 Statut Membre
 
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
Alain_42 Messages postés 5413 Statut Membre 894
 
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
Vlandy Messages postés 20 Statut Membre
 
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
Alain_42 Messages postés 5413 Statut Membre 894
 
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
Vlandy Messages postés 20 Statut Membre
 
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
Utilisateur anonyme
 
Résolu please
0