Coldfusion服务器端表单验证 - 如何将以一种形式输入的数据显示为另一种形式

时间:2014-05-18 00:01:00

标签: coldfusion cfform cflocation

我有两种形式。在form1中,必须输入名称和地址。如果缺少其中一个条目,则在执行服务器端验证后会显示错误消息。如果没有错误,则在form1中输入的结果应显示在form2中。成功验证后我执行了CFLOCATION,但是在form1中输入的数据不会传递给form2。我在表单(2)中得到消息txtName和txtAddress未定义。 服务器端验证成功后,如何将数据从第一个屏幕传递到另一个屏幕?任何建议都非常感谢。请在下面找到我的代码

Form1中

<cfif isDefined("form.btnSubmit")>
    <cfif len(trim(#form.txtName#)) GT 0  and len(trim(#form.txtAddress#)) GT 0>>
         <cflocation url="form2.cfm" addtoken="true">
    <cfelse>
        <H3>Name and address must be entered</H2>
    </cfif>
</cfif>

<cfform action="form1.cfm" method="post">
    User ID:<cfinput type="Text" name="txtName"><br>
    Phone: <cfinput type="Text" name="txtAddress"><br>
    <cfinput type="submit" name="btnSubmit" value="Validate"><br>
</cfform>

窗体2

<H2>You made the following entries </H2>
<p> Name: <cfoutput>#form.txtName#</cfoutput></p>
<p> Address: <cfoutput>#form.txtAddress#</cfoutput></p>

3 个答案:

答案 0 :(得分:1)

cfloction不提交表单,只是将用户重定向到新页面。如果您希望第一个表单提交的数据显示在第二个表单上,请将您的第二个表单添加到您当前有cflocation的页面,然后在那里进行验证。如果存在所需数据,则使用数据填充第二个表单。否则,您可以将它们发回第一个表格。

答案 1 :(得分:1)

这个答案是对这个评论的回应,&#34;上面描述的方法,在form2中进行验证,这是进行服务器端验证的最佳实践吗?&#34;

表单字段的服务器端验证至少有三种方法。按照所需页数的顺序,我们将从1页方法开始。所有代码都在一页上。它是这样的:

 if (a form was submitted)
 validation code goes here

 if (you had good data)
 code to process form fields goes here
 else
 code for problems with form fields goes here

 else // no form submitted
 code to produce form goes here.

对于2页方法,PageWithForm.cfm提交给FormProcess.cfm。 FormProcess.cfm上的代码几乎与上面描述的完全相同。唯一的区别是

 code to produce form goes here

变为

 code for no form submitted goes here.

3页方法有PageWithForm.cfm,FormValidate.cfm和FormProcess.cfm。这似乎是你正在尝试的。问题是,FormValidate.cfm如何将值传递给FormProcess.cfm。至少有3种方法。

  1. 使它们成为会话变量。
  2. 将它们设为url变量并使用cflocation
  3. 在FormValidate.cfm中创建另一个表单,将原始值传输到隐藏字段并使用javascript提交。
  4. 我最喜欢会话变量,因为它们可能会意外更改。我更喜欢新形式的url变量,但那只是我。

    我描述的所有方法都有效。有时最好的一个取决于手头的情况,有时它根本不重要。我很少使用单页方法。我通常会使用两页方法。但那只是我。

答案 2 :(得分:0)

我认为你要问的是更接近这个:

<强> form1.cfm

<cfparam name="url.message" default="">

<cfif url.message EQ 1>
    <H3>Name and address must be entered</H3>
</cfif>

<cfform action="form2.cfm" method="post">
   User ID:<cfinput type="Text" name="txtName"><br>
   Phone: <cfinput type="Text" name="txtAddress"><br>
   <cfinput type="submit" value="Validate"><br>
</cfform>

<强> form2.cfm

<cfif len(trim(form.txtName)) EQ 0  and len(trim(form.txtAddress)) EQ 0>
     <cflocation url="form1.cfm?message=1" addtoken="false">
</cfif>


<H2>You made the following entries </H2>
<p> Name: <cfoutput>#form.txtName#</cfoutput></p>
<p> Address: <cfoutput>#form.txtAddress#</cfoutput></p>

检查必填字段

在这个时代,有(至少)5种主要方法

  1. 使用jQuery库强制执行必填字段
  2. 编写自定义Javascript以验证必填字段
  3. 使用HTML 5属性强制执行必填字段
  4. 使用<cfform>强制执行必填字段
  5. 让响应页面处理必填字段
  6. 每种方法都有权衡。你的问题似乎是方法5,但它也包括方法4的一些工作