保持表格的价值在页面上

时间:2017-02-23 03:57:12

标签: coldfusion coldfusion-11

我想在提交表单后保留用户在表单上选择的值。

这就是我的尝试:

<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。我做错了什么?

2 个答案:

答案 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注入。请参阅:

<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