2010-11-09 15 views
5

J'essaie de savoir si une variable d'URL existe, et si ce n'est pas le cas, assurez-vous qu'elle n'est pas vide.Coldfusion 8: IsDefined ('URL.variable') et n'est pas ""?

Cela ne fonctionne pas:

<cfif IsDefined('URL.affiliateId') and is not ""> 
    // 
</cfif> 
+2

Toutes les réponses ci-dessous fonctionnent, mais FYI structKeyExists() est plus efficace que isDefined(), et len() est plus efficace que NEQ "". Trim() est facultatif mais pas une mauvaise idée d'inclure cela. – Henry

+0

Je pense qu'une meilleure raison d'utiliser structKeyExists() est la précision. IsDefined() a une portée légèrement plus large, ce qui peut parfois conduire à des résultats inattendus. – Leigh

Répondre

14
<cfif structKeyExists(url, 'affiliateID') and trim(url.affiliateID) neq "">...</cfif> 
+0

bon point sur la garniture, Leigh. J'ai oublié d'inclure ça! – scrittler

+0

Ah, beaucoup mieux. (Je suis toujours étonné combien de façons vous pouvez écrire ce genre de choses ;-) – Leigh

+2

Aussi, il a été prouvé que sturctKeyExists est plus efficace que IsDefined. –

0
<cfif IsDefined('URL.affiliateId') and URL.affiliateId neq ""> 
    // 
</cfif> 
+0

Vous n'avez pas besoin des signes #. – Leigh

+1

Comme le dit: pas de #, plus si vous connaissez la portée et le nom de la variable, vous devez toujours utiliser structkeyexists() comme indiqué par scrittler –

+0

ouais je sais que #s sont nécessaires, c'est juste une de ces habitudes. – Harrison

1

Pour ignorera la plupart des espaces blancs

<cfif IsDefined('URL.affiliateId') and len(trim(URL.affiliateId))> 
    value is defined and not empty 
</cfif> 

... ou alternativement

<cfif IsDefined('URL.affiliateId') and len(trim(URL.affiliateId)) gt 0> 
    value is defined and not empty 
</cfif> 
4

Vous pouvez également simplifier un peu la logique en utilisant <cfparam> pour vous assurer que la variable d'URL existe toujours. Ensuite, plutôt que d'avoir 2 conditions, vous avez juste besoin 1.

<cfparam name="URL.affiliateId" type="string" default="" /> 

<cfif trim(URL.affiliateId) is not ""> 
    do stuff here 
</cfif>
+0

True. Si l'existence de la variable n'affecte pas négativement le code existant (je n'étais pas sûr), alors cfparam peut simplifier les choses – Leigh

0

Je vais résumer les réponses et proposer ma version:

<cfparam name="URL.affiliateId" type="string" default="" /> 

<cfif len(trim(URL.affiliateId))> 
    ...do something with the affiliate... 
</cfif> 

Vous n'avez pas besoin StructKeyExists ou isDefined et il serait mieux vaut les éviter. De plus, vous n'avez pas besoin de la partie 'plus grand que zéro' après le 'len()'.

+2

Il n'y a pas de cas d'utilisation parfaitement valables pour tout ce qui précède. D'un autre côté, la préférence personnelle est une question différente. – Leigh

+0

Oui, ils sont valides mais pas nécessaires. –

+1

Bien qu'il existe des similitudes dans le comportement, il existe également des différences. Donc, une déclaration générale selon laquelle ils ne sont pas nécessaires est inexacte. Ils ne fournissent pas tous la fonctionnalité _identical_. – Leigh