2014-09-27 44 views
2

我是ColdFusion的新手。我正在尝试做一些表单字段验证。但是,如果form.nameform.address字段为空,我的CFIF似乎不工作。ColdFusion CFIF

这里是我的代码:

  <cfif IsDefined("form.name")> 
      <cfif IsDefined("form.address")> 
       Your shipping address is:<br> 
       <cfoutput> 
       #form.name#<br> 
       #form.address#<br> 
       #form.state#<br> 
       #form.shipping#<br> 
       #form.brochure#<br> 
       </cfoutput> 

      <cfelse> 
       You did not enter an address. 
      </cfif> 
     <cfelse> 
       You did not enter a name. 
     </cfif> 

回答

15

如果存在字段您只能检查。文本输入字段将始终存在于提交的表单变量中,即使它们为空。您还需要检查字段值是不是空字符串。此外,您应该考虑使用StructKeyExists()而不是IsDefined(),因为它更精确,在某些情况下性能更好。所以,你可以尝试:

<cfif StructKeyExists(form, "name") AND Len(Trim(form.name))>

这将检查“名”的表单字段的形式到达的范围,并在该变量的值比其他的空间至少一个字符。

+0

由于Carl写了使用** StructKeyExists **而不是IsDefined,只要你100%确定你在结构中寻找变量(幸运的是变量范围是结构)。第一个函数仅在所提到的范围内查找特定的键,而IsDefined将在所有范围内查找它。 – PatNowak 2015-07-21 17:57:17

0

您也可以考虑使用Javascript或jQuery检查空白字段或缺少输入,在用户离开页面之前通知用户有礼貌。

+0

是的。但是,问题是关于服务器端验证(而不是客户端)。所以上述是真正的评论,而不是一个答案。 (我意识到你不能[留下评论](http://stackoverflow.com/help/privileges/comment),只是FYI)。 – Leigh 2015-02-12 20:42:45

0

一个类似的替代卡尔的回答是

<cfif StructKeyExists(form, "name") AND Trim(form.name) NEQ ''>

0

我认为,如果你提交一个表单设置字段必须存在,因此检查,看看他们是否有不必要的。

<cfif (form.name IS "") OR (form.address IS "")> 
    We need your name and address to ship your item(s). 
<cfelse> 
    Your shipping address is:<br> 
      <cfoutput> 
      #form.name#<br> 
      #form.address#<br> 
      #form.state#<br> 
      #form.shipping#<br> 
      #form.brochure#<br> 
      </cfoutput> 
    </cfif> 

小问题,但我从来没有使用的形式。数据库写入以外的变量的一部分。

+0

这是非常慢我的朋友,我建议,当你想比较字符串使用LEN()或CompareNoCase(),当你有两个字符串进行比较。 CompareNoCase使用HEGEX进行比较,速度如此之快! 我的最爱 – 2017-05-21 17:55:08