1

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

表格1

<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>
4

3 回答 3

1

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

于 2014-05-18T01:52:44.337 回答
1

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

表单字段的服务器端验证至少有三种方法。按照所需页数的顺序,我们将从 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 提交。

我最不喜欢会话变量,因为它们可能会被意外更改。我更喜欢新表单而不是 url 变量,但这只是我。

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

于 2014-05-18T12:31:27.267 回答
0

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

表格1.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 的一些工作

于 2014-05-18T05:49:51.320 回答