页面上保持形态的价值观(Keeping the values of form on page)

2019-09-26 01:43发布

我想保持在表单上的用户选择的值,一旦他们提交表单。

这是我的尝试:

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

Answer 1:

该代码的绝大部分是不必要的。 要定义不存在的(不是被空不同)变量的缺省值,只需使用cfparam 。 一定要指定变量范围,以避免由于范围冲突意外的结果:

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

要预先选择内的项目<select>列表中,必须应用selected属性相应的<option>

<select name="id_age1">
   <cfloop ...> 
      <option value="#a1#" <cfif a1 eq form.id_age1>selected</cfif>>
         #a1#
      </option>
   </cfloop>
</select>

另外,不知道这是否是故意省略了,但..这两个表单字段应嵌套在<form>标签。



Answer 2:

我知道这是更多评论,但它更容易阅读作为回答。

输入的代码是不是安全。 它是受HTML注入。 请参阅: 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



文章来源: Keeping the values of form on page