11548 sujets

JavaScript, DOM et API Web HTML5

salut a tous.

Alors voila, je désire vérifier dans ma base de donnée si le login existe et si le mot de passe est correct avant d'autoriser effectivement le joueur à se connecter. Pour ce faire, merci AJAX et prototype.

Donc l'action en étapes :
le joueur tape ses id : si tout ok dans la vérification JS , le formulaire doit partir, sinon bah... il recommence Smiley smile

Soucis :

Il faut imbriquer des fonctions et sous fonctions pour parvenir a faire ça, sauf que JS ne veux pas me récupérer mes paramètres d'une fonction à l'autre, et surtout dans le temps imparti: il exécute tout n'importe comment en parallèle.

Bref, comment faire ?

Le formulaire :

<form action="<?php echo $this->baseUrl ?>/auth/login" method="post" [B]onsubmit="return verif_login(this);">[/B]

        <span>Pseudo :</span>
        <span><input type="text" name="login" id="login" value="" maxlength="20"/></span>
        <span>Passe :</span>
        <span><input type="password" name="password" id="password" value="" maxlength="20"/></span>
        <span><input type="submit" name="seConnecter" value="Connexion" /></span>


le JS :

function verif_login()
        {
            
            var login = $F('login');
            var password = $F('password');
            var chemin = $F('chemin');

            if(login == "" || password =="" )
            {
                Ext.MessageBox.alert('Connexion', "Veuillez remplir les 2 champs.");
                return false;
            }
            else
            {
                
                
                //fonction qui vérifie presence login ds la BD
                var url = chemin+'/auth/verifautorisation';
                new Ajax.Request(
                url,
                {
                      method: 'post',
                      postBody: 'login='+login+'&password='+password,
                      onComplete: function(originalRequest){
                          reponse = originalRequest.responseText;
                          
                          if(reponse== "nok")
                          {
                            alert("inconnu");
                            
                            return false;
                          }
                          else if(reponse=="pbpass")
                          {
                             alert("pb de pass");
                             
                            return false;
                          }
                          else if(reponse=="ok")
                          {
                            alert("valide");
                            return true;

                          }
                      }
                      
                });

            }//fin else
        }


Donc le soucis c'est que le true ou false n'est pas visible de la fonction locale puisque le return se fait dans la sous fonction qui récupère le résultat de la requete asynchrone. [I]Bilan: le formulaire part toujours même sans etre valide car pas de retour du false...[/I]

J'ai essayé pleins de méthodes, mais la je bloque !

Merci de m'aider a faire cette vérification asynchrone du pass et login :cry:!
Modifié par xlight (17 Jul 2008 - 18:53)
Bonjour xlight,

Javascript n'interprète pas "tout n'importe comment".
Tu lui demandes de faire une requête asynchrone et c'est ce qu'il fait.
La requête se fait donc en arrière plan.

Ici la seule chose que tu as à faire c'est de rendre ta requête synchrone, de manière à ce que le return de ta fonction ne se fasse pas avant la requête.
Bien sûr ça limite l'intérêt d'AJAX puisque c'est bloquant.

Pour cela tu peux donc passer la propriété asynchronous: false.

Je te conseille d'utiliser empty() sur tes string au lieu de faire str == ""
Il faut aussi penser à encoder les paramètres que tu passes en POST, afin d'éviter les injections. Pour cela il faut utiliser encodeURIComponent().

HTH,
merci pour ces infos, en effet c'était bien ça.

merci beaucoup !
Modifié par xlight (18 Jul 2008 - 11:30)