Problème avec des données d'entrée non valides
Fermé
bourpif
Messages postés
7
Date d'inscription
samedi 16 mars 2013
Statut
Membre
Dernière intervention
14 octobre 2016
-
16 mars 2013 à 21:39
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 17 mars 2013 à 19:56
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 17 mars 2013 à 19:56
A voir également:
- Problème avec des données d'entrée non valides
- Excel validation des données liste - Guide
- Trier des données excel - Guide
- Supprimer les données de navigation - Guide
- Configuration ip non valide - Guide
- La zone de données passée à un appel système est insuffisante - Windows 11
8 réponses
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
17 mars 2013 à 11:44
17 mars 2013 à 11:44
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 ;-)
bourpif
Messages postés
7
Date d'inscription
samedi 16 mars 2013
Statut
Membre
Dernière intervention
14 octobre 2016
17 mars 2013 à 13:59
17 mars 2013 à 13:59
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.
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
17 mars 2013 à 14:44
17 mars 2013 à 14:44
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
bourpif
Messages postés
7
Date d'inscription
samedi 16 mars 2013
Statut
Membre
Dernière intervention
14 octobre 2016
17 mars 2013 à 16:40
17 mars 2013 à 16:40
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.
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
17 mars 2013 à 18:09
17 mars 2013 à 18:09
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
bourpif
Messages postés
7
Date d'inscription
samedi 16 mars 2013
Statut
Membre
Dernière intervention
14 octobre 2016
17 mars 2013 à 19:15
17 mars 2013 à 19:15
ok je vais faire comme ça merci infiniment pour l'aide c'est vraiment sympas. je vais tout reprendre a tête reposer je vais bien y arriver.
juste une dernière question le GET est pas sécuriser si j'ajoute "mysql_real_escape_sting " cela le sécurise ?
juste une dernière question le GET est pas sécuriser si j'ajoute "mysql_real_escape_sting " cela le sécurise ?
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
17 mars 2013 à 19:56
17 mars 2013 à 19:56
oui mais a mon avis il vaut mieux utiliser POST cela évite d'avoir une url avec plein de trucs écrits derrière.
17 mars 2013 à 13:21
<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