ColdFusion isDefined

15,499

Solution 1

Generally the best practice is considered to be to avoid isDefined. This is because isDefined will search all scopes until it finds a matching variable. So it's more efficient to use structKeyExists, eg:

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

Also, another way to achieve this is to use cfparam, and specify 0 as the default:

<cfparam name="form.age" default="0">

Solution 2

You're almost there:

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

Solution 3

Technically what you have is fine once you enclose the cfset in tags < and >. Assuming that omission is just a typo, could it be you are trying to use it with a text field?

Text fields always exist on submission. The value may be an empty string, but the field itself still exists, so IsDefined will always return true. If that is the case, you need to examine the field length or value instead. Then do something if it is empty according to your criteria. For example:

 <!--- 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)>
Share:
15,499
user2967577
Author by

user2967577

Updated on September 15, 2022

Comments

  • user2967577
    user2967577 over 1 year

    I am trying to check to see if data exist in my form If data does not exist I want to assign it to O. How can I do this.

    <cfif not isDefined("FORM.Age")>
     cfset FORM.Age = "0"
    <cfif>
    
  • Leigh
    Leigh over 10 years
    Not all scopes, but it does search most of them when dealing with unscoped variables. That can lead to unexpected results in certain cases. Generally structKeyExists is better because it is more precise.