Tout s'écrit dans ma BDD.....
Vlandy
Messages postés
20
Statut
Membre
-
Utilisateur anonyme -
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:
je vous remercie d'avance pour votre aide
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
A voir également:
- Tout s'écrit dans ma BDD.....
- Mon clavier n'ecrit plus ✓ - Forum Clavier
- Mon clavier n écrit plus et les lettres m envoient ailleurs ✓ - Forum Clavier
- Ajout snap sans rien d'écrit - Forum Snapchat
- Teams écrit à l'envers - Forum Windows 7
- Sms envoyé de mon telephone sans l'avoir écrit - Forum Téléphones & tablettes Android
11 réponses
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
}
$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
}
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
ou pour $erreuremail
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
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
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
}
}
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:
aurais je fait une erreur?
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?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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
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{
..........
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>
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
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>