Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Langages serveur > ASP
ASP Forum sur la programmation ASP. Avant de poster : Cours ASP, FAQ ASP
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 15/02/2011, 11h15   #1
Membre du Club
 
Avatar de Aquellito
 
Axel
Développeur informatique
Inscription : juin 2008
Messages : 192
Détails du profil
Informations personnelles :
Nom : Axel

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2008
Messages : 192
Points : 58
Points : 58
Par défaut Tester si une variable est "undefined"

Bonjour à tous,

Dans la catégorie 'question de débutant' : Comment vérifier l’existence d'une variable ?

J'ai suivi (je pense) les tutos à la lettre.

Code :
1
2
3
4
5
6
7
8
9
var maVar = Request.Form("maVar");
Response.Write("maVar : "+maVar);
 
if (maVar != "undefined")
{
Response.Write("maVar existe !");
}else{
Response.Write("maVar n'existe pas !");
}
Lorsque j'affiche la variable, elle a bien la valeur 'undefined'. Pourtant pour lui la variable n'a pas la valeur "undefined"...

J'ai essayé d'autres trucs comme :
Code :
if (maVar != undefined)
Code :
if (maVar != 'undefined')
Code :
if (typeof(maVar) != "undefined")
Code :
if (typeof(maVar) != 'undefined')
Code :
if (typeof(maVar) != undefined)
Rien ne marche. Le plus incompréhensible c'est que si je test l'existence d'une variable de session comme ci-dessous, là ça marche.... Je n'y comprend plus rien snif...

Code :
if (Session("maVar") != undefined)
Merci d'avance,
Axel
Aquellito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 11h23   #2
Membre Expert
 
Avatar de Loceka
 
Tlouye Ci
Inscription : mars 2004
Messages : 1 450
Détails du profil
Informations personnelles :
Nom : Tlouye Ci

Informations forums :
Inscription : mars 2004
Messages : 1 450
Points : 2 149
Points : 2 149
J'avoue que j'ai jamais compris non plus comment faire un vrai test d'existence, mais le code suivant fonctionne pour tester l'existence d'une variable :L'inconvénient évident de ce test c'est que, dans le cas où la variable a une valeur dont l'interprétation booléenne est "false" (donc false, 0, "", ...) ce test échoue aussi. De ce fait il n'y a pas (comprendre : je ne connais pas) de moyen de distinguer la non existence d'une variable d'une valeur booléenne à false (sauf à faire le test avec === pour le false mais c'est relativement lourd).
Loceka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 11h37   #3
Membre du Club
 
Avatar de Aquellito
 
Axel
Développeur informatique
Inscription : juin 2008
Messages : 192
Détails du profil
Informations personnelles :
Nom : Axel

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2008
Messages : 192
Points : 58
Points : 58
Mouais, c'est louche de galérer autant pour un truc aussi simple...

J'ai testé if (maVar) { ... } mais ça ne marche pas non plus. Cela pourrait-il venir du fait que mon script se trouve côté serveur ? Ya pas de raison mais bon...

Je vais tester la dernière solution, le booléen...
Aquellito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 11h42   #4
Membre Expert
 
Avatar de Loceka
 
Tlouye Ci
Inscription : mars 2004
Messages : 1 450
Détails du profil
Informations personnelles :
Nom : Tlouye Ci

Informations forums :
Inscription : mars 2004
Messages : 1 450
Points : 2 149
Points : 2 149
Qu'est-ce que tu entends pas "côté serveur" ?

Fais voir le code de ta page (particulièrement les imports) + celui des 2 scripts ?
Loceka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 12h38   #5
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 073
Points : 4 073
Code javascript :
1
2
3
4
var v;
if (v === undefined) alert(v);// affiche "undefined"
v = 1;
if (v != undefined) alert(v);// affiche "1"
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 12h52   #6
Membre du Club
 
Avatar de Aquellito
 
Axel
Développeur informatique
Inscription : juin 2008
Messages : 192
Détails du profil
Informations personnelles :
Nom : Axel

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2008
Messages : 192
Points : 58
Points : 58
Côté serveur veut dire que c'est de l'ASP et non un script côté Client.

Ci-dessous la partie de ma page qui pose problème.
J'ai un formulaire avec X champs (de 1 à 20). Dans un premier temps je test si la variable id_produit_1 existe. Si oui, j'insère le produit dans la base. Si non, je test le champ id_produit_2. Ainsi de suite jusqu'à id_produit_20 :

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
for (p = 1 ; p < 21 ; p++)
	{
 
		var id_produit = Request.Form("id_produit_"+p);
		if (typeof(id_produit) != "undefined")
		{
			req = "SELECT * FROM produits WHERE (id="+id_produit+")";
			RS.Open(req,conn_indus,3,1);
			if (!RS.EOF)
			{
				var nom_produit = RS("nom_produit").value;
				var no_formule = RS("code_produit").value;
			}
			RS.Close;
 
			var tonnage = parseInt(Request.Form("tonnage_"+p));
			var commande = Request.Form("commande_"+p);
			var heure_demarrage = String(Request.Form("heure_demarrage_"+p)).replace(/'/g,"''");
			var demarrage = Request.Form("demarrage_"+p);
 
			req = "INSERT INTO produits (id_plann,tonnage,heure_demarrage,demarrage,commande,no_formule,nom_produit,id_centrale,id_agence) VALUES ("+id_plann+","+tonnage+
			",'"+heure_demarrage+"','"+demarrage+"','"+commande+"','"+no_formule+"','"+nom_produit+"',"+id_centrale+","+id_agence+")";
			conn_tonnage.Execute(req);
		}
	}
Aquellito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 13h20   #7
Membre expérimenté
 
Duke Jikel
Inscription : mai 2010
Messages : 339
Détails du profil
Informations personnelles :
Nom : Duke Jikel

Informations forums :
Inscription : mai 2010
Messages : 339
Points : 546
Points : 546
Donc ce n'est pas du javascript mais du JScript
dukej est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 13h35   #8
Membre du Club
 
Avatar de Aquellito
 
Axel
Développeur informatique
Inscription : juin 2008
Messages : 192
Détails du profil
Informations personnelles :
Nom : Axel

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2008
Messages : 192
Points : 58
Points : 58
Oui il paraît ^^ mais pour moi c'est la même syntaxe (à quelques nuances près).
D’ailleurs l’entête d'un page JScript se fait généralement comme suit:
Code :
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="1252"%>
Si c'est déclaré comme ci-dessous, c'est la même chose mais les logiciels type 'Dreamweaver' ne colorise pas les balises comme il faut.
Code :
<%@LANGUAGE="JScript" CODEPAGE="1252"%>
Bref on s'éloigne là Et ça ne résout pas le problème de cette fameuse valeur UNDEFINED...
Aquellito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 14h03   #9
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 805
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 805
Points : 35 810
Points : 35 810
En JavaScript, invoquer une variable non définie renvoie une erreur (reference error), l'astuce, c'est qu'une propriété non déclarée renvoie undefined et qu'une variable globale est considérée comme une propriété de l'objet window.
Donc
renvoie une erreur
renvoie undefined.

Conclusion, si tu veux tester si une variable est déclarée, il faut passer par
Code :
if(window.toto===undefined){alert('La variable toto n\'est pas déclarée')}
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 14h04   #10
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 073
Points : 4 073
Citation:
Envoyé par Aquellito Voir le message
Bref on s'éloigne là Et ça ne résout pas le problème de cette fameuse valeur UNDEFINED...
T'as testé dans une console le code que je t'ai proposé ? ^^

Sinon, à part ça, ça serait pas mal de connaître exactement ce que renvoie Request.Form() quand on lui passe un identifiant ne correspondant à aucune donnée envoyée... peut-être pas "undefined" ?

Et sinon ça n'a rien à voir mais :
Si c'est un appel de méthode, il manque les parenthèses, si c'est une référence à la méthode, elle tombe dans le vide... Non ? ^^
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 14h18   #11
Membre du Club
 
Avatar de Aquellito
 
Axel
Développeur informatique
Inscription : juin 2008
Messages : 192
Détails du profil
Informations personnelles :
Nom : Axel

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2008
Messages : 192
Points : 58
Points : 58
l'objet window n'est valable que côté client je pense (en tout cas il me dit qu'il ne connait pas cet objet).

Citation:
T'as testé dans une console le code que je t'ai proposé ? ^^
Oui et dans ce cas ça marche

J'ai réussi à résoudre mon problème mais bon je suis un peu frustré de ne pas faire une méthode "standard"...

Lorsque je récupérais mes variables, je faisait comme ceci :
Code :
var id_produit = Request.Form("id_produit_"+p);
En convertissant cette fameuse valeur 'undefined' en chaine de caractère (je pensais que c'en était déjà une mais bon).
Code :
var id_produit = String(Request.Form("id_produit_"+p));
Ensuite je fais mon test comme ceci et ça marche nikel... va savoir !!
Code :
if (id_produit != "undefined")
PS : pour ce qui est du RS.Close sans parenthèses, j’avoue que tu me poses une colle. En tout cas c'est bien une méthode mais sans paramètres à envoyer alors les parenthèses ne sont pas forcément utiles je crois. Je vais me renseigner.

Citation:
Sinon, à part ça, ça serait pas mal de connaître exactement ce que renvoie Request.Form() quand on lui passe un identifiant ne correspondant à aucune donnée envoyée... peut-être pas "undefined" ?
J'ai pas tout compris là
Aquellito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 15h52   #12
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 073
Points : 4 073
Oui, tu avais en fait confondu "undefined" et undefined ^^
C'est le paradoxe : une chaine (objet de type String) dont la valeur est "undefined" n'est pas du tout undefined puisqu'elle a un type et une valeur

Citation:
Envoyé par Aquellito Voir le message
PS : pour ce qui est du RS.Close sans parenthèses, j’avoue que tu me poses une colle. En tout cas c'est bien une méthode mais sans paramètres à envoyer alors les parenthèses ne sont pas forcément utiles je crois. Je vais me renseigner.
Fais ce test pour voir la différence
Code javascript :
1
2
3
4
var fonc = function() { return "coucou"; };
alert(fonc());// affiche "coucou"
alert(fonc);// affiche le corps de la fonction "fonc"
// (car alert attend une chaine donc toString() est appliqué à fonc qui est un objet de type Function)
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 16h28   #13
Membre du Club
 
Avatar de Aquellito
 
Axel
Développeur informatique
Inscription : juin 2008
Messages : 192
Détails du profil
Informations personnelles :
Nom : Axel

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2008
Messages : 192
Points : 58
Points : 58
Citation:
Oui, tu avais en fait confondu "undefined" et undefined ^^
Et oui c'est ça, en fait c'était la valeur id_produit_x qui avait la valeur undefined et non id_produit...

En effet ça change tout lol. la var fonct à la valeur function() { return "coucou"; }

Mais là ce n'est pas un objet function mais un objet Server :
Code :
RS = Server.CreateObject("ADODB.RecordSet");
.
Mais bon tu as raison avec les parenthèses, c'est un peu plus ISO comme on dit

Bon aller je vais mettre tout ça en résolu.
Merci à tous pour votre aide
Axel
Aquellito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 09h22   #14
Candidat au titre de Membre du Club
 
Inscription : mars 2004
Messages : 42
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2004
Messages : 42
Points : 10
Points : 10
Bonjour à tous,

Je relance ce topic car j'ai le même souci qu'a rencontré Aquellito, mais je n'ai pas compris la solution proposée

Le fichier est de type .asp

Mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<%@ LANGUAGE=JScript Codepage=28591 %>
<!-- #include file="../core/common/IE_SYS_constants.asp" -->
<%
Response.CodePage = 28591;
 
if(Request.QueryString("actid") != "")
{
	response.write('actid est ok');
	actid = Request.QueryString("actid");
}
else
{
	response.write('actid est vide');
	actid = "4545";
}
%>
Dans mon cas, je passe le paramètre "actid" en cliquant sur un lien de la page courante, qui fait appel à elle-même.

Pourquoi valide-t-il toujours le "if" même quand le paramètre actid n'est pas donné dans l'url ?

Merci !
gazza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 09h35   #15
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 073
Points : 4 073
Citation:
Envoyé par gazza Voir le message
Pourquoi valide-t-il toujours le "if" même quand le paramètre actid n'est pas donné dans l'url ?
Justement tu viens de le dire : si Request.QueryString("actid") ne trouve pas l'élément désigné, je suppose (à toi de le vérifier ^^) que l'expression renvoie undefined.

Or,
Code javascript :
undefined != ""
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 10h25   #16
Candidat au titre de Membre du Club
 
Inscription : mars 2004
Messages : 42
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2004
Messages : 42
Points : 10
Points : 10
J'ai trouvé le test qui fonctionne :

Code :
1
2
3
4
5
actid = new String(Request("actid"));
if(actid != "undefined")
{
...
}
gazza 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 10h53.


 
 
 
 
Partenaires

Hébergement Web