Problème avec des données d'entrée non valides
bourpif
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
Alain_42 Messages postés 5361 Date d'inscription Statut Membre Dernière intervention -
Alain_42 Messages postés 5361 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
en faite je suis débutant et j'ai souhaitez faire un formulaire d'enregistrement sur une table de ma base de donnée mais qui en plus vérifierais en temps réel si le pseudo est déjà pris. donc j'ai fait 2 page en php avec du java/ajax jusque la tout va bien sauf que lorsque j'envoi l'enregistrement j'ai comme réponse " des données d'entrée non valides".
j'ai beau chercher je ne vois pas d'ou viens le problème alors je me permet de vous demander de l'aide.
page registre.php :
et ma page registreform.php :
merci a vous
en faite je suis débutant et j'ai souhaitez faire un formulaire d'enregistrement sur une table de ma base de donnée mais qui en plus vérifierais en temps réel si le pseudo est déjà pris. donc j'ai fait 2 page en php avec du java/ajax jusque la tout va bien sauf que lorsque j'envoi l'enregistrement j'ai comme réponse " des données d'entrée non valides".
j'ai beau chercher je ne vois pas d'ou viens le problème alors je me permet de vous demander de l'aide.
page registre.php :
<?php session_start();session_destroy(); session_start(); if ( isset($_POST['Username']) && $_POST['Email"'] && $_POST['Password1'] && $_POST['Password2']) { if($_POST['Password1']==$_POST['Password2']) { $servername="localhost"; $username="root"; $password="****"; $conn= mysql_connect($servername,$username,$password)or die(mysql_error()); mysql_select_db("*****",$conn); $result = mysql_query("SELECT Username FROM accounts WHERE Username='".$_POST['Username']."'"); if(mysql_num_rows($result)>=1) echo '1'; else echo '2'; $sql="insert into accounts (Username,Email,Password,) values ('$_POST[Username]','$_POST[Email]','$_POST[Password]')"; $result=mysql_query($sql,$conn) or die(mysql_error()); ?> <html> <head> <title>enregistrer</title> </head> <center> <body bgcolor="black" style="color:gray"> <?php print "<h1>vous êtes enregistré avec succès</h1>"; } else print "Le mot de passe ne correspond pas"; print "<br><a href='****************'><h1> retour </h1></a>"; echo("<br><br><img src='122.jpg'></img>"); } else print"des données d'entrée non valides"; exit(); ?> </body> </center> </html>
et ma page registreform.php :
<html> <head> <script type="text/javascript"> function writediv(texte) { document.getElementById('pseudobox').innerHTML = texte; } function verifPseudo(pseudo) { if(pseudo != '') { if(pseudo.length<4) writediv('<span style="color:#cc0000"><b>'+pseudo+' :</b> ce pseudo est trop court</span>'); else if(pseudo.length>16) writediv('<span style="color:#cc0000"><b>'+pseudo+' :</b> ce pseudo est trop long</span>'); else if(texte = file('verifpseudo.php?pseudo='+escape(pseudo))) { if(texte == 1) writediv('<span style="color:#cc0000"><b>'+pseudo+' :</b> ce pseudo est deja pris</span>'); else if(texte == 2) writediv('<span style="color:#1A7917"><b>'+pseudo+' :</b> ce pseudo est libre</span>'); else writediv(texte); } } } function file(fichier) { if(window.XMLHttpRequest) // FIREFOX xhr_object = new XMLHttpRequest(); else if(window.ActiveXObject) // IE xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); else return(false); xhr_object.open("GET", fichier, false); xhr_object.send(null); if(xhr_object.readyState == 4) return(xhr_object.responseText); else return(false); } </script> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>enregistrement</title> </head> <center> <body bgcolor="black" style="color:white;"> <FORM ACTION="registre.php" METHOD=get> <h1>page d'enregistrement</h1> S'il vous plaît entrer les détails* d'inscription pour créer un compte<br><br> <table border="3"> <tr> <td>Pseudo :</td><td><form action=""> <input type="text" name="Username" onKeyUp="verifPseudo(this.value)" /> lettres/chiffres aucun symbole<br><div id="pseudobox"></div> </form><noscript><a href="http://www.editeurjavascript.com/">ajax</a></noscript> </tr> <tr> <td>Mot de passe :</td><td><input name="regpass1" type="password" size"20">20 caracteres max</input></td> </tr> <tr> <td>retaper le mot de passe :</td><td><input name="regpass2" type="password" size"20">20 caracteres max</input></td> </tr> <tr> <td>email :</td><td><input name="regemail" type="text" size"30">valide de préférence voir *</input></td> </table> <br> <input type="submit" value="envoyer"></input> <br>Créer par ******<br> <FONT size=4><b>*L</b>e mail peut me permetre de remettre le mot de passe a zéro en cas d'oublie de celui ci, renseignez le intelligemment </FONT> <br><br><br><img src="ninja.jpg"> </center> </FORM> </body> </html>
merci a vous
A voir également:
- Problème avec des données d'entrée non valides
- Fuite données maif - Guide
- Trier des données excel - Guide
- Excel validation des données liste - Guide
- Sauvegarde des données - Guide
- Supprimer les données de navigation - Guide
8 réponses
voir remarques et commentaires.
par javascript/ajax tu appeles je suppose le fichierverifpseudo.php qui est en première partie ?
Hors dans ce fichier tu attends les valeurs en POST
et ta requette ajax les envoie en GET
tu fais le test isset($_POST sur Username email passwor 1 et 2 hors ta requette ajax envoie pseudo
file('verifpseudo.php?pseudo='+escape(pseudo)
ou alors tu as un autre fichier ?
par javascript/ajax tu appeles je suppose le fichierverifpseudo.php qui est en première partie ?
Hors dans ce fichier tu attends les valeurs en POST
et ta requette ajax les envoie en GET
tu fais le test isset($_POST sur Username email passwor 1 et 2 hors ta requette ajax envoie pseudo
file('verifpseudo.php?pseudo='+escape(pseudo)
ou alors tu as un autre fichier ?
<?php //session_start();session_destroy(); session_start(); //pourquoi tu ouvre la session et la detrruit de suite ? //ci dessous il faut isset à chaque condition if ( isset($_POST['Username']) && isset($_POST['Email"']) && isset($_POST['Password1']) && isset($_POST['Password2'])) { if($_POST['Password1']==$_POST['Password2']) { $servername="localhost"; $username="root"; $password="****"; $conn= mysql_connect($servername,$username,$password)or die(mysql_error()); mysql_select_db("*****",$conn); //securité, il faut protéger ce que tu reçoit du formulaire par mysql_real_escape_string $result = mysql_query("SELECT Username FROM accounts WHERE Username='".mysql_real_escape_sting($_POST['Username'])."'"); if(mysql_num_rows($result)>=1){ //mets systématiquement des {} echo '1'; }else{ echo '2'; } //dans les requette sql mets en majuscules les INSERT SELECT FROM WHERE etc c'est plus facile à lire $sql="INSERT INTO accounts (Username,Email,Password,) VALUES ('".mysql_real_escape_sting($_POST[Username]).",'".mysql_real_escape_sting($_POST[Email])."','".mysql_real_escape_sting($_POST[Password])."')"; $result=mysql_query($sql,$conn) or die(mysql_error()); ?> <html> <head> <title>enregistrer</title> </head> <center> <body bgcolor="black" style="color:gray"> <?php print "<h1>vous êtes enregistré avec succès</h1>"; } else { //la aussi les {} //et evites de mélanger echo et print, c'est plus clair echo "Le mot de passe ne correspond pas"; echo "<br><a href='****************'><h1> retour </h1></a>"; echo("<br><br><img src='122.jpg'></img>"); } } else { echo "des données d'entrée non valides"; } //si tu mets exit le script s'arr^tes donc tu m'affichera jamais la suite c a d </body> etc... //exit(); ?> </body> </center> </html> et ma page registreform.php : <html> <head> <script type="text/javascript"> function writediv(texte) { document.getElementById('pseudobox').innerHTML = texte; } function verifPseudo(pseudo) { //même remarque concernant les {} if(pseudo != '') { if(pseudo.length<4) { writediv('<span style="color:#cc0000"><b>'+pseudo+' :</b> ce pseudo est trop court</span>'); } else if(pseudo.length>16) { writediv('<span style="color:#cc0000"><b>'+pseudo+' :</b> ce pseudo est trop long</span>'); } else if(texte = file('verifpseudo.php?pseudo='+escape(pseudo))) { if(texte == 1) { writediv('<span style="color:#cc0000"><b>'+pseudo+' :</b> ce pseudo est deja pris</span>'); } else if(texte == 2) { writediv('<span style="color:#1A7917"><b>'+pseudo+' :</b> ce pseudo est libre</span>'); } else { writediv(texte); } } } } function file(fichier) { if(window.XMLHttpRequest) // FIREFOX { xhr_object = new XMLHttpRequest(); } else if(window.ActiveXObject) // IE { xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); } else { return(false); } xhr_object.open("GET", fichier, false); xhr_object.send(null); if(xhr_object.readyState == 4) return(xhr_object.responseText); else return(false); } </script> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>enregistrement</title> </head> <center> <body bgcolor="black" style="color:white;"> <FORM ACTION="registre.php" METHOD=get> <h1>page d'enregistrement</h1> S'il vous plaît entrer les détails* d'inscription pour créer un compte<br><br> <table border="3"> <tr> <td>Pseudo :</td><td><form action=""> <!-- avec onKeyUp, cela va verifier le pseudo a chaque caractere tapé ???? --> <input type="text" name="Username" onKeyUp="verifPseudo(this.value)" /> lettres/chiffres aucun symbole<br><div id="pseudobox"></div> </form><noscript><a href="http://www.editeurjavascript.com/">ajax</a></noscript> </tr> <tr> <!--- la balise input n'a pas de fermante </input> et j'ai rajouté des id= --> <td>Mot de passe :</td><td><input name="regpass1" id="regpass1" type="password" size"20" />20 caracteres max </td> </tr> <tr> <td>retaper le mot de passe :</td><td><input name="regpass2" id="regpass2" type="password" size"20" />20 caracteres max</td> </tr> <tr> <td>email :</td><td><input name="regemail" id="regemail" type="text" size"30" />valide de préférence voir *</td> </table> <br> <input type="submit" value="envoyer"></input> <br>Créer par ******<br> <FONT size=4><b>*L</b>e mail peut me permetre de remettre le mot de passe a zéro en cas d'oublie de celui ci, renseignez le intelligemment </FONT> <br><br><br><img src="ninja.jpg"> </center> </FORM> </body> </html>
Salut,
au premier coup d'oeil, je vois une virgule en trop après Password:
$sql="INSERT INTO accounts (Username,Email,Password,) VALUES...
j'ai pas encore regardé le reste ;-)
au premier coup d'oeil, je vois une virgule en trop après Password:
$sql="INSERT INTO accounts (Username,Email,Password,) VALUES...
j'ai pas encore regardé le reste ;-)
merci pour vos réponses rapide. oui j'ai bien un fichier verifpseudo.php le voici
si je met $_post comme ici a la place de $_get la vérification ne marche plus j'ai cette erreur : Undefined index: Usermane in ******** on line 12. Voila pourquoi j'avais mis get. En faite jusque 3 lettres cela fonctionne mais au dela de 3 lettres j'ai l'erreur.
pour les " qui manquais a get dans le fichier registerform oui j'avais pas vus pourtant l'erreur était afficher en couleur oo, donc cela est régler
la virgule en trop a été retirer.
<?php mysql_connect("localhost", "root", "*****"); mysql_select_db("*****"); // VERIFICATION $result = mysql_query("SELECT Username FROM accounts WHERE Username='".$_POST["pseudo"]."'"); if(mysql_num_rows($result)>=1){ echo "1"; } else{ echo "2"; } ?>
si je met $_post comme ici a la place de $_get la vérification ne marche plus j'ai cette erreur : Undefined index: Usermane in ******** on line 12. Voila pourquoi j'avais mis get. En faite jusque 3 lettres cela fonctionne mais au dela de 3 lettres j'ai l'erreur.
pour les " qui manquais a get dans le fichier registerform oui j'avais pas vus pourtant l'erreur était afficher en couleur oo, donc cela est régler
la virgule en trop a été retirer.
bon un peu de principe:
lorsque sur le onkeyup de l'input pseudo tu appelles la fonction Ajax, ça appelle, en "arrière plan" sans recharger la page, le script php verifpseudo.php en GET
xhr_object.open("GET", fichier, false);
donc il faut que dans ce script verifpseudo.php tu récupères en GET
lorsque ensuite tu cliques sur le bouton submit "Enregistrer" ça appelle le script registre.php comme dans ce script tu récupères en POST il faut que dans la page registreform.php tu ai
et au lieu de onKeyUp = mets onBlur=
ça vérifiera le pseudo seulement quand l'internaute ira sur un autre champ
car avec ton test avec onKeyUp sur 4 caracteres
toto peut être occupé mais pas toto_5
lorsque sur le onkeyup de l'input pseudo tu appelles la fonction Ajax, ça appelle, en "arrière plan" sans recharger la page, le script php verifpseudo.php en GET
xhr_object.open("GET", fichier, false);
donc il faut que dans ce script verifpseudo.php tu récupères en GET
//et securisé $result = mysql_query("SELECT Username FROM accounts WHERE Username='".mysql_real_escape_string($_GET['pseudo'])."'");
lorsque ensuite tu cliques sur le bouton submit "Enregistrer" ça appelle le script registre.php comme dans ce script tu récupères en POST il faut que dans la page registreform.php tu ai
<form ..... method="POST">
et au lieu de onKeyUp = mets onBlur=
ça vérifiera le pseudo seulement quand l'internaute ira sur un autre champ
car avec ton test avec onKeyUp sur 4 caracteres
toto peut être occupé mais pas toto_5
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
rien a faire toujours les mêmes erreurs si je met POST a la place de GET dans verifpseudo.php il me dit "Notice: Undefined index: pseudo in C:\wamp\www\verifpseudo.php on line 1".
Ce que je ne comprend pas c'est que en faite j'avais ses pages sur mon serveur local sous XP avec appserv 2.6.0 avec apache 2.2.8 et php 6.0.0 dev et cela marchais bien en get.
Puis après l'avoir transférer sur mon ordi avec win 7 (64bits) et sous wamp 2.2 avec apache 2.2.22 et php 5.3.13 cela ne marche plus alors j'ai fait des recherches et me suis rendu compte que GET n'était pas sécuriser et qu'il fallait utiliser POST.
Du coup je sais plus si le problème est la version de (apache/php) ou le code lui même, car cela même si je fait les rectifications ( oui il y avais des erreurs sans aucun doutes) cela ne change rien il n'enregistre rien et me dit toujours que des données sont invalide.
Ce que je ne comprend pas c'est que en faite j'avais ses pages sur mon serveur local sous XP avec appserv 2.6.0 avec apache 2.2.8 et php 6.0.0 dev et cela marchais bien en get.
Puis après l'avoir transférer sur mon ordi avec win 7 (64bits) et sous wamp 2.2 avec apache 2.2.22 et php 5.3.13 cela ne marche plus alors j'ai fait des recherches et me suis rendu compte que GET n'était pas sécuriser et qu'il fallait utiliser POST.
Du coup je sais plus si le problème est la version de (apache/php) ou le code lui même, car cela même si je fait les rectifications ( oui il y avais des erreurs sans aucun doutes) cela ne change rien il n'enregistre rien et me dit toujours que des données sont invalide.
rien a faire toujours les mêmes erreurs si je met POST a la place de GET dans verifpseudo.php
Non
Comme le script verifpseudo est appelé par ajax par:
xhr_object.open("GET", fichier, false);
il faut que dans verifpseudo.php tu laisses en GET
Non
Comme le script verifpseudo est appelé par ajax par:
xhr_object.open("GET", fichier, false);
il faut que dans verifpseudo.php tu laisses en GET
<FORM ACTION="registre.php" METHOD=get>
déja il te manque les " pour l'argument method
<code<FORM ACTION="registre.php" METHOD="get">></code>
action="register.php" veut dire que tu appelles ce script lors du clic sur le bouton submit, pas avec ajax
et tu as mis en method= GET alors que tu esayes de récupérer les valeurs en POST dans le script register.php