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
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 :

<?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

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
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 ?

<?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>

0
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 à 13:21
en plus tu mets:
<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
0
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 ;-)
0
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
merci pour vos réponses rapide. oui j'ai bien un fichier verifpseudo.php le voici

<?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.
0
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
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
//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
0

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
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.
0
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
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
0
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
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 ?
0
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
oui mais a mon avis il vaut mieux utiliser POST cela évite d'avoir une url avec plein de trucs écrits derrière.
0