Coldfusion服务器端表单验证—如何将一个表单中输入的数据显示到另一个表单中



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

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>

Form2

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

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

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

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

 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。将值传递给FormProcess.cfm。至少有3种方法

    设置为会话变量。
  1. 将它们设置为url变量,并使用cflocation
  2. 在FormValidate中创建另一个表单。cfm,将原始值转移到隐藏字段,并与javascript一起提交。

我最不喜欢会话变量,因为它们可以被意外地改变。我更喜欢url变量的新形式,但这只是我。

我描述的所有方法都有效。有时最好的选择取决于手头的情况,有时根本不重要。我很少使用一页方法。我通常使用两页方法。

我想你想问的更接近于这个:

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. 让响应页处理所需字段

每种方法都有权衡。你的问题似乎是方法5,但它也包括方法4的一些工作

相关内容

  • 没有找到相关文章

最新更新