我想在提交表单后保留用户在表单上选择的值。
这就是我的尝试:
<cfset tx_name = "">
<cfset id_age1 = "">
<cfif isDefined("form.tx_name")>
<cfset tx_name = form.tx_name>
<cfif isDefined("a1")>
<cfset id_age1 = form.a1>
</cfif>
</cfif>
<cfoutput>
<input type="text" name="tx_name" value="#tx_name#">
<select name="id_age1">
<cfloop from="1" to="20" index="a1">
<option value="#a1#">#a1#</option>
</cfloop>
</select>
</cfoutput>
我收到tx_name
的预期结果,但id_age1
未显示正确的结果。它只是重置为1
。我做错了什么?
答案 0 :(得分:4)
大部分代码都是不必要的。要为不存在的变量(不是空的)定义默认值,只需使用cfparam。请务必指定变量范围,以避免因范围冲突而导致意外结果:
<cfparam name="form.tx_name" default="">
<cfparam name="form.id_age1" default="">
要预先选择<select>
列表中的项目,您必须apply the selected
attribute to the appropriate <option>
:
<select name="id_age1">
<cfloop ...>
<option value="#a1#" <cfif a1 eq form.id_age1>selected</cfif>>
#a1#
</option>
</cfloop>
</select>
另外,不确定是否故意省略,但是......两个表单字段应嵌套在<form>
标记内。
答案 1 :(得分:2)
我知道这更像是一个评论,但更容易阅读作为答案。
输入上的代码不安全。它受HTML注入。请参阅:html-injections
<cfparam name="form.tx_name" default="">
...
<input type="text" name="tx_name" value="#EncodeForHTMLAttribute(tx_name)#" />
ColdFusion有一系列功能来解决这个问题。请参阅:http://blogs.adobe.com/security/2014/05/coldfusion-11-enhances-the-security-foundation-of-coldfusion-10.html