在ColdFusion中,如何确定查询字符串变量是否存在?

Geo*_*ton 10 coldfusion

在ColdFusion中,如何确定查询字符串中是否存在变量而不会尝试检查错误?

Ant*_*ony 31

有两种选择.

第一种是使用cfparam来定义默认值,例如:

<cfparam name="url.varname" type="string" default="" />
Run Code Online (Sandbox Code Playgroud)

这可以确保您始终可以引用url.varname

第二种是使用isDefinedstructKeyExists来测试变量的存在:

<cfif isDefined("url.varname") and url.varname eq 42> do something </cfif>
Run Code Online (Sandbox Code Playgroud)

要么

<cfif structKeyExists(url, "varname") and url.varname eq 42> do something </cfif>
Run Code Online (Sandbox Code Playgroud)

  • @kevink,这是一条危险的道路.如果未在URL或FORM作用域中定义变量,则CFParam将在VARIABLES作用域中创建它.这有很多但是细微差别的副作用,你真的需要知道实际发生了什么,以确保你的应用程序的可靠性. (7认同)
  • @kevink如果您期望来自URL范围的变量,请将其置于URL范围.这可确保无法从另一个范围注入该值.由于你离开了cfparam的范围,因此代码中可能已经存在一个变量.varname,它可能已经突然变为另一个值. (4认同)
  • CF9的另一种方式:isNull(url.varname) (2认同)
  • cfparam 的一个巧妙技巧就是使用 name="varname" 而不是 name="url.varname" - 然后它将验证 varname 是否作为 url var 或表单 var 存在。使 GET 和 POST 之间的切换变得容易。 (2认同)
  • @kevink @iKnowKungFoo说的是完全正确的.您应该使用:`<cfparam name ="url.foo"default ="bar"/>`以便将变量放入您期望的范围.然后,您的处理代码使用`url.foo`,而不仅仅是`foo`. (2认同)