Vérification de doublons [Résolu]

eddie5150 34 Messages postés samedi 19 novembre 2005Date d'inscription 20 octobre 2008 Dernière intervention - 21 oct. 2007 à 22:56 - Dernière réponse : eddie5150 34 Messages postés samedi 19 novembre 2005Date d'inscription 20 octobre 2008 Dernière intervention
- 22 oct. 2007 à 17:37
Bonjour à tous,

je viens de me lancer dans AJAX, mais je ne comprends pas encore tout très bien,
aussi j'ai essayé d'effectuer une vérification automatique de mail dans un formulaire, jusque là, c'est du Javascript, tout va bien, cependant, il me faudrait également vérifier si ce mail n'est pas déjà présent dans ma BDD.

Voila comment je procede :

function verif_mail()
{
    //Différentes vérifications ....
   
    if(!verifDoublon(mail))
       alert("Doublon");
}

function verifDoublon(mail)
{
    var xhr_object = null;  
       
    if(window.XMLHttpRequest) // Firefox  
       xhr_object = new XMLHttpRequest();  
    else if(window.ActiveXObject) // Internet Explorer  
       xhr_object = new ActiveXObject("Microsoft.XMLHTTP");  
    else
    { // XMLHttpRequest non supporté par le navigateur  
       alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");  
    }   
       
    xhr_object.onreadystatechange = function()
    {  
       if(xhr_object.readyState == 4) 
       {
           if(xhr_object.status  == 200)
              if(xhr_object.responseText == '0')
                  return true;
              else
                  return false;
           else
                alert("Erreur: "+xhr_object.status);
        }
    }  
      
    xhr_object.open("POST", "requete.php", false);
    xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");     xhr_object.send("mail="+mail);
}

requete.php
if(isset($_POST["mail"]))
{
    $mysql_db = @mysql_connect("localhost", "root", "");  
    @mysql_select_db("pronosite_01");  
   
    $query  = "SELECT `email_util` FROM `utilisateur` WHERE `email_util` LIKE '".$_POST["mail"]."'";
    $result = @mysql_query($query);  
   
    echo mysql_num_rows($result);
   
    @mysql_close($mysql_db);  
}

Voila, ca ne marche pas, j'ai comme l'impression que mes return true ou false ne sont jamais appelés... Quelqu'un pourrait-il m'éclairer ?

Merci d'avance
Afficher la suite 

Votre réponse

4 réponses

cs_AlexN 719 Messages postés lundi 5 décembre 2005Date d'inscription 8 janvier 2014 Dernière intervention - 22 oct. 2007 à 15:50
+3
Utile
En mode asynchrone, l'execution du code de gestion du retour est différée.

Tu ne peux pas faire :

    if(!verifDoublon(mail))
       alert("Doublon");

Parce que l'execution retourne immédiatement après le send(). et dans ton cas la fonction ne retourne rien.
Deux solutions :
- lancer le verifDoublon et gérer la reponse dans le callback
- mettre en place un mécanisme de timeout sur la requete (une sorte de sleep) avant de decider de traiter la réponse.

Pour faire simple, si tu n'a pas besoin de mécanisme asynchrone, ne les utilises pas.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_AlexN
cs_AlexN 719 Messages postés lundi 5 décembre 2005Date d'inscription 8 janvier 2014 Dernière intervention - 22 oct. 2007 à 13:20
0
Utile
Tu utilises l'objet xmlhttprequest en mode synchrone :
xhr_object.open("POST", "requete.php", false);
La fonction de callback (onreadystatechange ) n'a pas d'utilité dans ce cas.
Il suffit de mettre le code de traitement de la réponse juste après le send()

xhr_object.send("mail="+mail); // L'éxécution du code est bloquée jusqu'au retour de la réponse (mode synchrone)
       if(xhr_object.readyState == 4) 
       {
           if(xhr_object.status  == 200)
              if(xhr_object.responseText == '0')
                  return true;
              else
                  return false;
           else
                alert("Erreur: "+xhr_object.status);
        }
return false;
Commenter la réponse de cs_AlexN
eddie5150 34 Messages postés samedi 19 novembre 2005Date d'inscription 20 octobre 2008 Dernière intervention - 22 oct. 2007 à 13:38
0
Utile
Merci pour la réponse !

Désolé mais j'ai fait une erreur en coiant mon code !! Je voulais plutot le faire en mode asynchrone : xhr_object.open("POST", "requete.php", true);

En tout cas ta propostition marche tres bien, cependant, pour exécuter en mode asynchrone, quelle serait la technique ?
Commenter la réponse de eddie5150
eddie5150 34 Messages postés samedi 19 novembre 2005Date d'inscription 20 octobre 2008 Dernière intervention - 22 oct. 2007 à 17:37
0
Utile
Ok,

merci pour ces précisions, je vais le faire en mode synchrone alors !
Commenter la réponse de eddie5150

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.