ColdFusion está definido

estou a tentar verificar se existem dados na minha forma, se os dados não existem, quero atribuí-los ao O. Como posso fazer isto.

<cfif not isDefined("FORM.Age")>
 cfset FORM.Age = "0"
<cfif>
Author: Leigh, 2013-11-08

4 answers

De um modo geral, considera-se que as melhores práticas evitam a definição. Isto porque isDefined irá procurar em todos os âmbitos até encontrar uma variável correspondente. Então é mais eficiente usar os structKeyExists, por exemplo:

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

Também, outra maneira de conseguir isso é usar o cfpara, e especificar 0 como padrão:

<cfparam name="form.age" default="0">
 17
Author: Andrew Myers, 2013-11-08 04:46:45
Estás quase lá.
<cfif not isDefined("FORM.Age")>
<cfset Form.Age = 0>
</cfif>
 6
Author: user2967613, 2013-11-08 04:41:49

Tecnicamente, o que tens está bem assim que envolveres o cfset em etiquetas < e >. Supondo que a omissão é apenas uma gralha, poderia ser que você está tentando usá-lo com um campo de texto?

Os campos de texto existem sempre no envio. O valor pode ser uma cadeia vazia, mas o campo em si ainda existe, por isso IsDefined irá sempre retornar verdadeiro. Se for esse o caso, você precisa examinar o comprimento do campo ou o valor em vez disso. Então faça alguma coisa se estiver vazia de acordo com seus critérios. Para exemplo:

 <!--- 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)>
 3
Author: Leigh, 2013-11-08 13:28:45
Na verdade, há duas coisas que queres garantir. Em primeiro lugar, certifique-se de que esta página foi alcançada através da apresentação do formulário adequado. Em seguida, certifique-se de ter um valor numérico para o formulário.variável etária. Aqui está um exemplo de como você pode querer codificar isto:
<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>
 0
Author: Dan Bracuk, 2014-05-15 16:06:32