我有两个表单。在表格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种方法
- 设置为会话变量。
- 将它们设置为url变量,并使用cflocation 在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种主要的方法
- 使用jQuery库强制执行必填字段
- 编写自定义Javascript来验证所需字段
- 使用HTML 5属性强制执行必填字段
- 使用
<cfform>
强制执行必填字段 - 让响应页处理所需字段
每种方法都有权衡。你的问题似乎是方法5,但它也包括方法4的一些工作