Aller au contenu

[Résolu] Boucle infinie avec if :s Flash/AS2.0


volgur

Messages recommandés

Bonjour tout le monde,

Voila j'ai un énorme soucis puisque je ne comprends absolument pas comment j'obtiens une boucle infinie lors de l'exécution de mon programme, sachant que cela vient d'un simple if.

Voici le code en question :

stop();
fenetre.annuler._visible=true;
fenetre.ok._visible=true;

//Fonction d'authentification

function authentification(){

var envoie=new LoadVars();
var retour=new LoadVars();

envoie.login=fenetre.login.text;
envoie.passwd=fenetre.passwd.text;

envoie.sendAndLoad("authentification.asp", retour, "POST");
retour.onLoad=function(succes) {
	fenetre._visible=false;
	if(succes==true){
                   if(retour.rep=="OK") { //Authentification réussie
			fenetre.login.text="";
			fenetre.passwd.text="";
			aok._visible=true;
		}else{ //Authentification refusée pour cause de mauvais login/password
			anok._visible=true;
		}
	}else{
		//Erreur de serveur ASP
	}
}
}
fenetre.ok.onRelease=function(){
authentification();
}

Sachant que le if qui fait tout foiré c'est celui-ci

if(succes==true){

Si je le vire, le programme ne bloque plus, mais la condition

if(retour.rep=="OK") { //Authentification réussie

n'est jamais validée...

Si quelqu'un voit d'où vient le problème, merci de m'aider.

Bonne journée

Lien vers le commentaire
Partager sur d’autres sites

je ne connais pas AS2

déjà tu ne peux pas avoir une boucle infini avec un if, if n'étant pas une boucle...

si ça :

if(succes==true){

ne marche pas

c'est à mon avis à cause de ça :

retour.onLoad=function(succes) {

que je ne comprend pas

et si ça :

if(retour.rep=="OK") { //Authentification réussie

n'est jamais validé c'est une erreur dans l'asp on dirait

ou alors c'est que le programme n'y va jamais, et donc c'est à cause du problème cité au-dessus

mais comme je te dit je connais pas l' AS2

Lien vers le commentaire
Partager sur d’autres sites

Je suis d'accord avec toi, étant un if, ça ne peut normalement pas faire de boucle infinie. J'ai juste employé le terme pour dire que le programme bloquait, enfin j'ai jamais vu ça avec un if/else quoi

Pour ma part je suis débutant en AS2, mais la fonction

retour.onLoad=function(succes) permet (normalement) de tester si la variable (ici la variable que renvoie le serveur c'est rep) a bien été récupéré (succes==true) ou pas. Donc en fait quand je test si

if(succes==true) c'est uniquement pour savoir si la variable a été récupéré ou pas. Si elle l'est, elle devrait m'afficher un message, et si elle l'était pas, elle devrait m'en afficher un autre.

Or là, rien du tout. Le programme se bloque totalement, et je ne sais absolument pas pourquoi

Lien vers le commentaire
Partager sur d’autres sites

Essaye déjà en faisant ton sendAndLoad après avoir défini ta fonction qui gère l'évènement onLoad.

Et essaye de voir le code HTTP que tu as recu, peut etre que c est carrément la page qu'il n'arrive pas à trouver

retour.onHTTPStatus = function(status) {
trace(status);
}
envoie.sendAndLoad("authentification.asp", retour, "POST");

Lien vers le commentaire
Partager sur d’autres sites

retour.onData = function(src) {trace(src);};

Ca a affiché le code source de ma page asp, mais j'ai pas compris l'utilité. La page ASP c'est moi qui l'ai crée également, donc le code source je le connais.

Par contre, et désolé de passer pour une bille encore, mais je comprends pas quand tu demandes si la page est bien appelée. Enfin je comprends mais je sais pas comment vérifier

Lien vers le commentaire
Partager sur d’autres sites

C était pour savoir si sendAndLoad allait bien chercher ta page, car Flash peut être tatillon sur l'adresse, mais si il t'affiche la source, c'est qu'il va bien chercher la page.

Maintenant, faut chercher pourquoi il ne te fait pas le onLoad, mais avant ...

tu cherches à faire un "retour.rep=="OK"", c'est quoi "rep" dans ta page asp, comment ta page ASP renvoit elle ce "OK" ?

Lien vers le commentaire
Partager sur d’autres sites

Ben dnas ma page ASP, je récupère via un Request.Form("login") (et pareil pour passwd) ce que l'utilisateur à taper.

login=Request.Form("login")

Ensuite je teste voir si ça correspond

if login="monLogin" and passwd="monPassword" then

rep="OK"

else

rep="ERREUR"

Puis je renvoie rep au client

Response.Write(rep)

Lien vers le commentaire
Partager sur d’autres sites

Bon, c est pour ça '^^

Faut que tu passes par onData, et que tu parses la page obtenu pour obtenir le résultat. Du côté client, Flash, rep il sait pas ce que sait, il recoit juste du texte, la page asp que tu fais.

A toi de "lire" cette page pour savoir ce que tu as retourné, moi je faisait comme ça (mais pas en asp).

essaye donc ceci plutôt :

envoie.login=fenetre.login.text;
envoie.passwd=fenetre.passwd.text;

retour.onData = function(src) {
fenetre._visible=false;
if(src.indexOf("OK") != -1) { //Authentification réussie
	fenetre.login.text="";
	fenetre.passwd.text="";
	aok._visible=true;
}else{ //Authentification refusée pour cause de mauvais login/password
	anok._visible=true;
}
}

envoie.sendAndLoad("authentification.asp", retour, "POST");

Donc, tout bêtement, tu regardes si il y a écrit "OK" dans ta page (vu que tu renvoies "OK" ou "Erreur").

Lien vers le commentaire
Partager sur d’autres sites

je m'auto réponds parce que j'ais oublié un point ^^

j'avais un peu zappé que c'était bien toi qui faisait la page ASP.

je connais pas trop l'asp, mais c'est bien & pour concaténer ?

Bon, donc, au lieu de faire "Response.Write(rep)", tu dois faire "Response.Write("rep=" & rep)", pour que ton loadvar interprète correctement la page, et que ton code de ton premier post fonctionne

Lien vers le commentaire
Partager sur d’autres sites

Avant tout merci pour ton aide :)

Pour te répondre (woot pour une fois que c'est moi qui donne une réponse :transpi:) effectivement en ASP pour concaténer tu as + et &, les utilisations diffèrent, et j'avoue ne pas mettre attardé sur les différentes subtilités entre les 2 méthodes.

Pour en revenir à ton code, le fait de mettre Response.Write("rep="&rep) avec mon 1er script ne le fait pas plus fonctionner malheureusement :(

Néanmoins l'autre code que tu m'as donné, avec le onData, fonctionne presque.

En effet, si lors du test je laisse

if(src.indexOf("OK")!=-1)

Peut importe ce que je rentre, il me valide l'authentification :(

Et inversement si je mets == 1, il me la refuse tout le temps

Vais voir si je peux pas trouver un équilibre entre les 2 ^^

Merci en tout cas pour ton aide précieuse

Lien vers le commentaire
Partager sur d’autres sites

Voila j'arrive à faire correctement les 2 tests, don c'est un bon point, puisqu'avant les 2 tests entraînaient un blocage du programme. Mais toujours le soucis du peu importe ce que je tape, il ne valide jamais la condition.

Voila ce que ça donne :

function authentification() {
var envoie = new LoadVars();
var retour = new LoadVars();
envoie.login = fenetre.login.text;
envoie.passwd = fenetre.passwd.text;
envoie.sendAndLoad("authentification.asp", retour, "POST");
retour.onLoad = function(succes) {
	fenetre._visible = false;
	if ((succes==false)&&(retour.rep==1)) {
		 //Authentification réussie
		fenetre.login.text = "";
		fenetre.passwd.text = "";
		aok._visible = true;
	} else {
		// Mauvais login/password
	        anok._visible = true;
	}
};
}

PS: j'ai remis le envoie.sendAndLoad avant le retour.onLoad, car sinon ça fonctionnait encore moins

Lien vers le commentaire
Partager sur d’autres sites

Je viens de faire des tests de mon côté, et voici mes conclusions ^^

Le fait de mettre uniquement le nom du fichier le fait LIRE par Flash.

Il est donc normal que ça ne marche pas, pour la simple raison que ton code ASP n'est pas EXÉCUTÉ mais LU.

Il faut que tu mettes l'adresse complète de ton fichier, qui passe par ton serveur ASP, sinon Flash ne recevra jamais la bonne page, et recevra toujours le code source ASP.

C'est pour ça que mon code ne marchais pas, avec onData, parce que "OK", il y est dans ton code SOURCE '^^

Et soit bien en accord entre ton code ASP et ton code Flash, je suppose que tu as changé ton code ASP pour

if login="monLogin" and passwd="monPassword" then
rep=1
else
rep=0

?

Donc, la question, as tu bien un serveur web local qui tourne pour tes pages ASP ? est il configuré correctement ?

Lien vers le commentaire
Partager sur d’autres sites

Oui j'ai changé mon code ASP avec des nombres, je ne sais plus ce que je voulais tester d'ailleurs...

Mais oui le serveur ASP, puisque j'ai déjà fait un script en réponse à un formulaire de Flash pour un envoie automatique d'email, donc normalement il fonctionne :)

Donc, j'ai remplacé

envoie.sendAndLoad("authentification.asp", retour, "POST"); par

envoie.sendAndLoad("http://www.monsite.fr/monchemin/authentification.asp", retour, "POST");

Mais ça ne fonctionne pas plus :( peu importe ce que je tape, le if est toujours pas validé apparemment

Lien vers le commentaire
Partager sur d’autres sites

Et avec mon code sur le onData, et l'adresse complète, tu obtiens quoi en trace ? Ton code source ?

PS: Normal que ca marche pas plus, ton code est érroné, j'ai oublié, je l'avais précisé dans mon précédent post, mais je me suis édité; Tu as mis un succes==false ca devrait être :

retour.onLoad = function(succes) {
fenetre._visible = false;
if (succes&&(retour.rep==1)) {
	//Authentification réussie
	fenetre.login.text = "";
	fenetre.passwd.text = "";
	aok._visible = true;
} else {
	// Mauvais login/password
	anok._visible = true;
}
};

Lien vers le commentaire
Partager sur d’autres sites

Woot ça marche ! *expression au moment de l'exécution*

*prends du recule*

^^ Merci d'abord.

Ensuite pour te répondre, le trace(src) a renvoyé le code source de la page ASP, comme la dernière fois, et en plus je viens de me rendre compte que le chemin spécifié n'est même pas http//www.monsite.fr/blabla mais juste authentification.asp

J'avoue que maintenant je comprends pas pourquoi ça marche :(

Je vais essayer de comprendre par moi-même.

Une dernière question tout de même. Niveau sécurité c'est pas un peu limite ? Je crois que le peu que j'ai compris, c'est que Flash lit un texte envoyé par le serveur, et s'il y a "OK" dedans, il valide ?

En tout cas un gros merci :) je vais pouvoir m'attaquer au plus gros de mon travail maintenant ^^

Lien vers le commentaire
Partager sur d’autres sites

En fait, Flash va agir comme un navigateur internet.

Donc, il recoit le "code" de la page.

Toi, sur une page internet, ce code est interprété par ton navigateur, mais tu peux voir le code source. Flash ne voit que le code source, l'interprétation de celui-ci, c'est à toi de le faire.

Mais pour éviter de devoir faire trop de chose en Flahs, ils ont prévu une syntaxe spéciale pour faire les pages, pour que Flash remplisse lui-même ton object LoadVars, sans que ce soit à toi de le faire, à coup de regex (enfin, un truc approchant, y a pas regex en flash ^^).

Tout ça pour dire que, si ta page est :

r1=toto&r2=12&r3=true

ton objet LoadVars (retour dans ton cas) aura les membres r1, r2 et r3, qui vaudront respectivement "toto",12,true.

Le truc, c'est que effectivement, tu peux, avec n'importe quel navigateur (ou autre programme), accéder à ta page, et pour peu qu'on envoie les bonnes infos en POST, et bien on recevra la même page de confirmation que Flash a reçu. Pour la simple raison que Flash "navigue" sur ton site, comme tout autre navigateur.

En espérant t'avoir éclairci :roll:

Lien vers le commentaire
Partager sur d’autres sites

Ouais dis comme ça c'est un peu dur de comprendre ^^ mais je pense que c'est bon oui

Par contre, soucis, mais c'est plus Flash là, j'ai changé mon script ASP pour qu'il récupère les logs non plus en dur mais depuis un fichier texte tout bête, et maintenant Flash valide le test, peu importe ce qu'on rentre :(

Retour au point de départ ?

lol j'espère pas, vais retoucher mon ASP, en tout cas merci pour ton aide :)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...