IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP Discussion :

Tester si une variable est "undefined"


Sujet :

ASP

  1. #1
    Membre habitué Avatar de Aquellito
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    337
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 337
    Points : 150
    Points
    150
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    if (maVar != undefined)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (maVar != 'undefined')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (typeof(maVar) != "undefined")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (typeof(maVar) != 'undefined')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    if (Session("maVar") != undefined)
    Merci d'avance,
    Axel

  2. #2
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    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).

  3. #3
    Membre habitué Avatar de Aquellito
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    337
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 337
    Points : 150
    Points
    150
    Par défaut
    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...

  4. #4
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    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 ?

  5. #5
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    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

    __________________

  6. #6
    Membre habitué Avatar de Aquellito
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    337
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 337
    Points : 150
    Points
    150
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
    		}
    	}

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Points : 496
    Points
    496
    Par défaut
    Donc ce n'est pas du javascript mais du JScript

  8. #8
    Membre habitué Avatar de Aquellito
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    337
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 337
    Points : 150
    Points
    150
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@LANGUAGE="JScript" CODEPAGE="1252"%>
    Bref on s'éloigne là Et ça ne résout pas le problème de cette fameuse valeur UNDEFINED...

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  10. #10
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    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

    __________________

  11. #11
    Membre habitué Avatar de Aquellito
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    337
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 337
    Points : 150
    Points
    150
    Par défaut
    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).

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    var id_produit = String(Request.Form("id_produit_"+p));
    Ensuite je fais mon test comme ceci et ça marche nikel... va savoir !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

    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à

  12. #12
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

    __________________

  13. #13
    Membre habitué Avatar de Aquellito
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    337
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 337
    Points : 150
    Points
    150
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  14. #14
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Points : 62
    Points
    62
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !
    DigiTools
    Tools and resources to benefit from the digital

  15. #15
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    undefined != ""

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

    __________________

  16. #16
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Points : 62
    Points
    62
    Par défaut
    J'ai trouvé le test qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    actid = new String(Request("actid"));
    if(actid != "undefined")
    {
    ...
    }
    DigiTools
    Tools and resources to benefit from the digital

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tester qu'une variables est une puissance de x
    Par rikau2 dans le forum C++
    Réponses: 10
    Dernier message: 21/07/2007, 09h13
  2. Réponses: 3
    Dernier message: 11/10/2006, 17h18
  3. Tester si une variable est vide
    Par christel1982 dans le forum ASP
    Réponses: 13
    Dernier message: 13/09/2006, 11h01
  4. comment tester si une variable est de type indifined
    Par amelhog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/08/2005, 09h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo