将表单的值保留在页面上

Keeping the values of form on page

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

这是我试过的:

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

大部分代码都是不必要的。要为不存在的变量定义默认值(不同于为空),只需使用 cfparam。一定要指定变量作用域,避免因作用域冲突导致意外结果:

    <cfparam name="form.tx_name" default="">
    <cfparam name="form.id_age1" default="">

要预先 select <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> 标签中。

我知道这更像是评论,但作为答案更容易阅读。

输入的代码不安全。它受到 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