Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Ajax-DSL] Bug de vérification de pseudo

A priori pas assez rapide

    31 décembre 2008 à 13:55:27

    Salut à tous,
    Aujourd'hui je me suis dit : tiens, et si j'ajoutais une vérification de disponibilité de pseudo à mon formulaire d'inscription. Et Pour ne pas trop me compliquer la vie et aussi m'exercer un peu avec cette technique, j'ai décidé de le faire en DSL.
    Et là malheurà moi :lol: Un bug apparaît : en effet, j'ai mis un bouton dans le formulaire pour vérifier la disponibilité du pseudo (histoire de ne pas trop stresser le serveur). Et il semblerait qu'il faille appuyer 2 fois sur ce fameux bouton pour savoir si le pseudo est dispo.
    Je pense que ça vient d'un problème de rapidité au niveau de la requête et du renvoi de données.

    Mon code est récupéré du tuto de thunderseb, j'apprends le dsl :)

    Sans plus attendre, voici le code ^^:
    Le js
    var sMessage;
    function sendData(page, req){ // la page qu'on appelle et la requete.
    	var bal=document.createElement('script'); // je crée ma balise etc
    	bal.src='/ajax_reqFiles/'+page+'.php?'+req;
    	bal.type='text/javascript';
    	document.body.appendChild(bal);
    }
    
    function vPseudo(pseudo){ // le pseudo entré par le visiteur
    	var div=document.getElementById('pseudoErr'); // le div ou est affiché le message
    	var error='Votre pseudo est déjà utilisé.'; // le message d'erreur
    	sendData('insc_vPseudo','p='+encodeURIComponent(pseudo)); // envoie des données à la page
    	if(sMessage == true)
    		div.innerHTML=error;
    	else if(r == false && div.innerHTML==error)
    		div.innerHTML='';
    }
    

    <?php
    header('Content-type: text/javascript; charset=utf-8');
    $c=connexion('superrouviere');
    $pseudo=mysql_real_escape_string(stripslashes($_GET['p']));
    $sql=mysql_query("SELECT pseudo FROM membres WHERE pseudo='".$pseudo."'");
    if(!$sql or mysql_num_rows($sql) == 0 or !mysql_num_rows($sql)){
    	?>sMessage=false;<?php
    }
    else{
    	?>sMessage=true;<?php
    }
    ?>
    

    Et le bouton :
    <input type="button" onclick="vPseudo(document.getElementById('pseudo').value);" value="Vérifier la disponibilité de mon pseudo" />
    


    Merci par avance pour votre aide et
    bon bout d'an
    • Partager sur Facebook
    • Partager sur Twitter
      31 décembre 2008 à 14:12:17

      Ce n'est pas ça, c'est parce que tu n'appelles pas de fonction retour. Ta variable change au bon moment mais aucune fonction ne s'exécute à ce moment pour le montrer à l'utilisateur.
      La ligne if(sMessage == true) n'attends pas le retour de sendData pour s'exécuter (rappel, le DSL est asynchrone).
      • Partager sur Facebook
      • Partager sur Twitter
        31 décembre 2008 à 14:31:09

        Ouais merci, j'y avais pas pensé (tete en l'air parfois), je vais mettre les conditions dans une fonction de callback :)

        • Partager sur Facebook
        • Partager sur Twitter

        [Ajax-DSL] Bug de vérification de pseudo

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown