Coldfusion服务器端验证有时需要有时不依赖于单选按钮

时间:2015-03-03 21:05:28

标签: coldfusion

我正在努力更好地理解服务器端验证。我一直在使用JavaScript编写了许多客户端验证,但没有意识到用户是否只是将JavaScript关闭整个应用程序并不验证任何字段。这就是我正在为ColdFusion Server端验证做的事情。

我想知道的是你如何打开和关闭制作一个字段是否需要根据让我们说一个单选按钮是或否。假设您有一个单选按钮,如果选择是,则需要另一个输入,但如果选择否,则需要另一个字段。我只是想知道如何使用_cf格式切换打开和关闭。您是否只是在隐藏字段上创建if语句来执行此操作?

我一直在研究它并且正在寻找关于人们如何实现这样的事情的一些意见,因为它似乎你可以通过客户端做到这么多但是它们都没有意义因为它们可以关闭它

<table>
<tr>
    <td>Date:</td>
    <td><input type="text" name="date" size="20"></td>
    <strong class="delete me and add my line number to the highlight in my pre tag">
    <input type="hidden" name="date_cfformrequired" value="You must enter a date.">
    <input type="hidden" name="date_cfformdate" value="The date you entered is not a valid date."></strong>
</tr>
<tr>
    <td>Distance:</td>
    <td><input type="text" name="distance" size="20"></td>
    <strong class="delete me and add my line number to the highlight in my pre tag">
    <input type="hidden" name="distance_cfformrequired" value="You must enter a distance.">
    <input type="hidden" name="distance_cfformfloat" value="The distance you entered is not a valid number."></strong>
</tr>
<tr>
    <td>Time:</td>
    <td><input type="text" name="time" size="20"></td>
    <strong class="delete me and add my line number to the highlight in my pre tag">
    <input type="hidden" name="time_cfformrequired" value="You must enter a time.">
    <input type="hidden" name="time_cfformregex" value="^\d{1,3}:\d{0,2}$"></strong>
</tr>
<tr>
    <td>Comments:</td>
    <td><input type="text" name="comments" size="50"></td>
    <strong class="delete me and add my line number to the highlight in my pre tag">
    <input type="hidden" name="comments_cfformrequired" value="You must enter a comment.">
    <input type="hidden" name="comments_cfformmaxlength" value="50"></strong>
</tr>
<tr>
    <td colspan="2" align="right">
        <input type="submit" name="Add Entry">
    </td>
</tr>
</table>

1 个答案:

答案 0 :(得分:3)

您对客户端和服务器端验证之间差异的理解是正确的。考虑客户端验证可以归结为功能。而不是用户输入信息,提交表单,然后被告知某些内容不正确,Javascript验证可以指导他们,但因为它可以被禁用,所以依赖它是不好的。

服务器端验证总是按照规定进行。

代码非常简单

举例来说 - HTML

Name:
<input type="text" name="myname">

Were you referred by a current user?
<input type="radio" name="Referred" value="0" checked> No
<input type="radio" name="Referred" value="1"> Yes

Who referred you?
<input type="text" name="ref_user">

表单处理

<cfset Err = {Messages = []}> // creates a struct named Err with an array names Messages.

<cfif len(trim(form.myname)) eq 0>
  <cfset ArrayAppend(Err.Messages,"Please enter your name!">
</cfif>

<cfif form.Referred eq 1 and len(trim(form.ref_user)) eq 0>
  <cfset ArrayAppend(Err.Messages,"You said someone referred you, who was it?">
</cfif>

<cfif ArrayLen(err.messages) eq 0>
  ...no errors, we can do form processing...
</cfif>

然后,输出错误时(如果存在)

<cfif ArrayLen(err.messages) gt 0>
    Sorry, an error occurred.<br>
    <cfoutput>
    <cfloop array="#err.messages#" index="cError">
      - #cError#.<br>
    </cfloop>
    </cfoutput>
</cfif>

在最后一个代码段的第一行,您会在该行的末尾看到gt 0。这不是必要的,大多数人都会放弃它。您似乎熟悉javascript,cf的工作方式与您可能会说的相同

if (Err.Messages.length) {
  ... show
}

在cf中,您可以执行类似的<cfif ArrayLen(Err.Messages)>

请记住cfparam您的变量或检查它们在表单处理中是否存在,如此..

<cfif not StructKeyExists(form, "Referred") or (form.Referred eq 1 and len(trim(form.ref_user)) eq 0)>
  <cfset ArrayAppend(Err.Messages,"You said someone referred you, who was it?">
</cfif>