Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > Prototype & Script.aculo.us
Prototype & Script.aculo.us Forum d'entraide sur les frameworks Prototype et Script.aculo.us
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/07/2008, 18h38   #1
Nouveau Membre du Club
 
Inscription : mai 2005
Messages : 201
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 201
Points : 29
Points : 29
Par défaut [Prototype] Valider un formulaire avant de lancer connexion

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

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 :
Code :
1
2
3
4
5
6
7
8
<form action="<?php echo $this->baseUrl ?>/auth/login" method="post" onsubmit="return verif_login(this);">

        <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 :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
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. Bilan: le formulaire part toujours même sans etre valide car pas de retour du false...

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 !
amarcil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2008, 18h57   #2
Nouveau Membre du Club
 
Inscription : février 2004
Messages : 107
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 107
Points : 28
Points : 28
Hello,

Il me semble qu'il suffit de passer ton appel ajax en synchrone. C'est a dire dans ton cas d'ajouter le parametre "asynchronous:false" . Ensuite pour récupérer le résultat true ou false, il faut déclarer une variable "globale" est la retourner.

Donc pour ta méthode ca donnerait:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
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
            {
 
                var retourAjax = false;
                //fonction qui vérifie presence login ds la BD
                var url = chemin+'/auth/verifautorisation';
                new Ajax.Request(
                url,
                {
                      method: 'post',
                      asynchronous:false,
                      postBody: 'login='+login+'&password='+password,
                      onComplete: function(originalRequest){
                          reponse = originalRequest.responseText;
 
                          if(reponse== "nok")
                          {
                            alert("inconnu");
 
                            retourAjax = false;
                          }
                          else if(reponse=="pbpass")
                          {
                             alert("pb de pass");
 
                            retourAjax = false;
                          }
                          else if(reponse=="ok")
                          {
                            alert("valide");
                            retourAjax = true;
 
                          }
                      }
 
                });
 
             return retourAjax;
            }//fin else
        }
BouB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2008, 20h21   #3
Nouveau Membre du Club
 
Inscription : mai 2005
Messages : 201
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 201
Points : 29
Points : 29
merci beaucoup c'est exactement et purement ce qu'il me fallait !

Merci pour cette réponse rapide et sérieuse
amarcil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h35.


 
 
 
 
Partenaires

Hébergement Web