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>
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">
<cfif not isDefined("FORM.Age")>
<cfset Form.Age = 0>
</cfif>
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)>
<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>