10
votes

Dans Coldfusion, comment puis-je déterminer si une variable de chaîne de requête existe?

Dans ColdFusion, comment puis-je déterminer si une variable existe dans le querystring sans lancer une erreur tenter de le vérifier?


0 commentaires

3 Réponses :


31
votes

Il y a deux options.

Le premier consiste à utiliser CFPARAM à Définir une valeur par défaut, par exemple: xxx

ceci garantit que vous pouvez toujours faire référence à url.varname

la seconde consiste à utiliser ISDEFINÉE ou StructyeXIST Pour tester la présence de la variable: xxx

ou xxx


8 commentaires

Un moyen de plus pour CF9: ISNULL (URL.VARNAMAME)


Une astuce soignée avec cfparam est juste d'utiliser Name = "Varname" plutôt que Name = "Url.Varname" - alors il validera que Varname existe comme une URL Var ou un formulaire Var. Rend la commutation entre aller et poster facilement.


@Kevink, c'est un chemin dangereux pour descendre. Si la variable n'est pas définie dans l'URL ou les champs de formulaire, CFPARAM le créera dans la portée des variables. Il existe des effets secondaires importants mais nuancés, et vous devez vraiment être conscient de ce qui se passe réellement afin de garantir la fiabilité de votre demande.


@ADAM C'est exactement ce que je m'attends à ce qu'une variable non définie d'agir, et cela semble parfaitement cohérent (lorsque le Var n'était pas en réalité dans l'URL ou la portée de la forme) Comment s'est-il mordu dans le passé?


@Kevink Si vous prévoyez la variable de la portée de l'URL, paramètre de la portée de l'URL. Cela garantit que la valeur ne peut pas être injectée d'une autre portée. Il est également possible qu'il puisse déjà être une variables.Varname dans le code qui obtient soudainement Param'd à une autre valeur puisque vous avez laissé la portée du CFPARAM.


@Kevink Qu'est-ce que @iknowkungfoo a dit exactement raison. Vous devez utiliser: de sorte que la variable soit mise dans la portée où vous vous attendez à ce que ce soit. Ensuite, votre code de traitement utilise url.foo , pas seulement foo .


Prenez-en une autre, si vous voulez que la variable soit insensible: : Cela garantira que FOO existe à la fois dans l'URL et dans les champs de formulaire, et vous pouvez simplement faire référence à la variable «Form.foo», mais vous sera assuré que vous pouvez frapper la page directement avec les paramètres URL.


C'est en fait un très bon code, car il vérifie si la variable existe ou non si elle compare alors la valeur.



1
votes

J'ai utilisé cette approche dans de nombreux endroits.

en haut de la page: xxx

plus tard dans la page ou la balise personnalisée, vérifiez la valeur de la valeur de La variable de demande.Someval, sans crainte de ne pas s'écraser, car elle a une valeur par défaut. xxx


1 commentaires

Cela a fonctionné pour moi, surtout que je souhaite que ma page ait un comportement par défaut des moments où il n'y a pas de valeurs de querystring.



0
votes

dans code>, vous pouvez

param url.varname;  // throws error if it does not exist

param url.varname = ""; // sets value it was not already set


0 commentaires