Verification de pseudo d'un formulaire (AJAX)

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Verification de pseudo d'un formulaire (AJAX)

par guilt92 » 29 févr. 2008, 13:10

L'erreur à mon avis était que tu faisais une requete sql qui pouvais être vide (si le pseudo n'existait pas) et ensuite tu lui demandais de comparer $data["pseudo"] à quelque chose... Mais si la requete ne renvoie aucun résultat alors $data["pseudo"] est égal à null, il ne peut pas être comparé à une chaine de caractère...

par BaLiSTiK » 28 févr. 2008, 19:14

Petit détail : je ne connais pas le nombre de champs de ta table mais peut etre qu'a terme tu pourrais gagner du temps et eviter des erreurs en comptant simplement le nombre de résultat de la requete au lieu de faire un mysql_fetch_array() et de comparer des champs qui sont censés déjà etre pareils...

tu peux utiliser mysql_num_rows() qui compte le nombre de résultat de la requete
  //On comptes les entrées 
  $sql = mysql_query("SELECT pseudo FROM table  WHERE pseudo='".$login."'"); 
  $nb_result = mysql_num_rows($sql);
   
  if($nb_result) //il y a au moins 1 résultat : le pseudo est utilisé
      echo 0; //utilise 
   
 else echo 1; // libre 
A la base c etait un mysql_fetch_assoc, mais je ne savais ps vraiment ou était l'erreur donc pour ça que j'ai changé la requete SQL.Je vais rééssayer comme ça pour voir.

par guilt92 » 28 févr. 2008, 17:21

Petit détail : je ne connais pas le nombre de champs de ta table mais peut etre qu'a terme tu pourrais gagner du temps et eviter des erreurs en comptant simplement le nombre de résultat de la requete au lieu de faire un mysql_fetch_array() et de comparer des champs qui sont censés déjà etre pareils...

tu peux utiliser mysql_num_rows() qui compte le nombre de résultat de la requete
  //On comptes les entrées 
  $sql = mysql_query("SELECT pseudo FROM table  WHERE pseudo='".$login."'"); 
  $nb_result = mysql_num_rows($sql);
   
  if($nb_result) //il y a au moins 1 résultat : le pseudo est utilisé
      echo 0; //utilise 
   
 else echo 1; // libre 

par BaLiSTiK » 27 févr. 2008, 23:35

Tu devrais essayer onChange
Tu trouveras icila liste de tous les événements pour une balise input
Oké je prends note, je l essaierai mais après que mon truc fonctionne ^^. Apparemment ça viendrait du bout de code PHP car il me renvoie toujours "1" quelque soit le pseudo passé en paramètre.

J ai vérifie et re-verifié chaque parcelle de mon code. J ai vérifie que la variable login était bien prise dans le code JS, OUI, j ai vérifie si la requête marchait dans PHPMyAdmin, Oui, ça me retourne 1 si pseudo existe et 0 si non.
Mais j ai l'impression que c est le renvoie de la requête qui poserait probleme, j ai fais un
print_r($data)
et ça me retourne bien ce que j avais testé dans PHPMyAdmin,c e qui m'intrique c est les $data[nbused]. J'ai peut que le soucis viennent de là car je ne voit pas trop ce que ça fais.
Ou alors le soucis vient de

Code : Tout sélectionner

var result = File('CheckLogin.php?login='+escape(login));

EDIT : en modifiant le fichier PHP j ai réussi à le faire fonctionner !! quelle galère je vous raconte pas.
code PHP :
<?php
include 'fonction.php';

//Tu met le code pour te connecter à ta bdd et compagnie
if(isset($_GET['login']))
{
  //On sécurise l'entrée
  //$login = mysql_real_escape_string(htmlspecialchars($_GET['login']));
  
  $login = htmlspecialchars($_GET['login']);
  //On se connecte à mysql
  connexion(); //fonctiond e conenxion a MySQL
  
  //On comptes les entrées
  $sql = mysql_query("SELECT pseudo FROM table  WHERE pseudo='".$login."'");
  $data = mysql_fetch_array($sql);
  
  if($data["pseudo"] == $login)
  	echo 0; //utilise
  
  else echo 1; // libre

}
//On a rien à faire ici BASTA !
else echo 0;
?>

par Alkann » 27 févr. 2008, 23:26

Tu devrais essayer onChange
Tu trouveras icila liste de tous les événements pour une balise input

Verification de pseudo d'un formulaire (AJAX)

par BaLiSTiK » 27 févr. 2008, 23:01

Bonjour,

En plein recodage de mon site, je souhaite y apporter de l'AJAX (histoire que ça fasse plus actuel ^^).
Et notamment dans mes formulaire.

C est la première fois que j'inclus de l'AJAX et ne suis pas un expert du JS.
Je m'explique, j ai fais un simple formulaire d'inscription à la newsletter avec vérification des champs si ils sont vides ainsi que vérification des adresses mails si elles sont valides. Jusque là tout marche pas de soucis (youpi) ainsi que l'insertion dans la base de donnée. Jugeant ceci maintenant acquis pour moi, j'ai décidé d'y intégrer de l'AJAX pour vérifier si la personne qui opte pour un pseudo, n'est aps déja intégré. J ai cherché un exemple, j en ai trouvé un sur le site du zéro (très bon site au passage) et je l'ai implanté dans mon code. Mais là petit soucis, peu importe le pseudo envoyé, il me dit qu'il n'est pas libre...
Le code JS :

Code : Tout sélectionner

function File(fichier) { //ffi if(window.XMLHttpRequest) { xhr_object = new XMLHttpRequest(); } // IE else if(window.ActiveXObject) { xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); } else { return(false); } xhr_object.open("GET", fichier, false); xhr_object.send(null); //Le serveur nous indique qu'il est prêt if(xhr_object.readyState == 4) { return(xhr_object.responseText); }else{ return(false); } } //Au clic sur le bouton function CheckDispoLogin(obj) { var login = document.getElementById(obj).value; //On contrôle que le login demandé est disponible var result = File('CheckLogin.php?login='+escape(login)); if(result == 1) form.submit(); else alert('Désolé ce login est déjà utilisé'); }
Le formulaire :

Code : Tout sélectionner

<p>Pseudo<br /> <input type="text" id="login" name="login" size="40" style="border:#999999 1px solid; background-color:#cccccc;" /></p> <p>Adresse E-mail<br /> <input type="text" name="mail" size="40" style="border:#999999 1px solid; background-color:#CCCCCC;" /></p> <p>Retapez l'adresse E-mail<br /> <input type="text" name="mail2" size="40" style="border:#999999 1px solid; background-color:#CCCCCC;" /></p> <input type="submit" value="Inscription" style="border:#999999 1px solid;" onclick="CheckDispoLogin('login');" />&nbsp; <input type="reset" value="Effacer" style="border:#999999 1px solid;" />
Et el code PHP de vérification, qui lorsque je le teste indépendamment, me retourne toujours 1 (login libre)
<?php
include 'fonction.php';

//Tu met le code pour te connecter à ta bdd et compagnie
if(isset($_GET['login']))
{
  //On sécurise l'entrée
  $login = mysql_real_escape_string(htmlspecialchars($_GET['login']));
  //On se connecte à mysql
  //mysql_connect();
connexion();
  //On comptes les entrées
  $sql = mysql_query("SELECT COUNT(*) FROM newsletter AS nbused WHERE pseudo='".$login."'");
  $data = mysql_fetch_assoc($sql);
 
  if($data['nbused']>1)
       echo 0; //Utilisé

  else   echo 1; //Libre

}
//On a rien à faire ici BASTA !
else{
     echo 0;
}

?>
Ensuite, ce que j'aimerai,c est que l'événement soit appelé sur le <input type="text"> et non sur le bouton mais je ne sais pas quel on** mettre à la place du onClick.

En espérant avoir été clair,Merci d'avance :).
Dans el cas ou je trouverai moi même le soucis, je préviendrai, pour pas que vous n'ayez à vous creusez la tête pour rien :).