5

我正在尝试检查我的表单中是否存在数据如果数据不存在,我想将其分配给 O。我该怎么做。

<cfif not isDefined("FORM.Age")>
 cfset FORM.Age = "0"
<cfif>
4

4 回答 4

18

通常认为最佳实践是避免 isDefined。这是因为 isDefined 将搜索所有范围,直到找到匹配的变量。所以使用 structKeyExists 效率更高,例如:

<cfif NOT structKeyExists(form, "age")>
   <cfset form.age = 0>
</cfif>

此外,实现此目的的另一种方法是使用 cfparam,并将 0 指定为默认值:

<cfparam name="form.age" default="0">
于 2013-11-08T04:46:45.643 回答
7

您快到了:

<cfif not isDefined("FORM.Age")>
<cfset Form.Age = 0>
</cfif>
于 2013-11-08T04:41:49.640 回答
3

从技术上讲,一旦您将cfsetin 标签<>. 假设遗漏只是一个错字,您是否正在尝试将它与文本字段一起使用?

提交时始终存在文本字段。该值可能是一个空字符串,但该字段本身仍然存在,因此IsDefined将始终返回 true。如果是这种情况,您需要检查字段长度或值。然后根据您的标准做一些事情,如果它是空的。例如:

 <!--- value is an empty string --->
 <cfif NOT len(FORM.age)>
     do something 
 </cfif>

 ... OR 

 <!--- value is an empty string or white space only --->
 <cfif NOT len(trim(FORM.age))>
     do something 
 </cfif>

 ... OR 

 <!--- convert non-numeric values to zero (0) ---> 
 <cfset FORM.Age = val(FORM.Age)>
于 2013-11-08T13:08:22.123 回答
0

实际上,您需要确保两件事。首先,确保通过提交正确的表单到达此页面。接下来,确保您有一个用于 form.age 变量的数值。以下是您可能希望如何编码的示例:

<cfif StructKeyExists(form, "age") and cgi.http_referrer is what it should be>
    <cfif IsNumeric(form.age) and form.age gt 0>
        <cfset AgeSubmitted = int(form.age)>
    <cfelse>
        <cfset AgeSubmitted = 0>
    </cfif>
    ...more code to process form
<cfelse>
    ...code for when page was not arrived at properly
</cfif>
于 2013-11-08T13:17:08.997 回答