与服务器端和客户端验证冲突

时间:2015-07-21 05:07:39

标签: javascript validation coldfusion server-side coldfusion-11

我在ColdFusion 11环境中工作。我想创建一个表单,在提交时,验证我输入的值是否已经在数据库中。我认为我混淆了服务器端和客户端,这就是问题的原因。

查询:

<cfquery name="FindIdMailExist" datasource="#application.zips_database#" username="#application.zips_username#" password="#application.zips_password#">
    SELECT *
    FROM users
    WHERE user_name = '#userName#'
</cfquery>

我的javascript(客户端)+一些CF代码(服务器端):

   <script>
    function CheckSub()
    {
        alert("submited");
        return true;
    }
    function checkName(formObject, formField, fieldValue)
    {
        <cfoutput>
        alert('#FindIdMailExist.RecordCount#');
        </cfoutput>

        return true;
    }
  <script>

我的表格:

<cfform  onsubmit="CheckSub()" name="form">
    <br>
<table>
  <tr><td width="120" align="right">Name:</td><td><cfinput name="userName"type="text" onvalidate="checkName" message="pas  email"></td></tr>
  <tr><td><cfinput name="Submit" type="submit" value="Register"></td></tr>

</table>

</cfform>

所以一切都运作良好,期待一件事。如果您了解代码,则会显示一条警报,其结果为1或0. 1 =是数据库已包含此名称。 0 =否,数据库尚未拥有它。问题是当我点击提交时,结果是1稍后提交。

示例:

  • 输入已存在的名称,然后点击提交:结果= 0(错误的一个)
  • 不输入任何内容:结果1(结果始终是我之前提交的结果)

那么在提交表单之前可能无法验证服务器端? 在发送表单以将数据添加到数据库之前,我想确保一切正常。为了安全起见,我想在服务器端做这个。

有人能建议更好的方法吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:-1)

尝试使用以下代码和功能: 将 FindIdMailExist.RecordCount 保留在隐藏字段中:

<cfoutput>
   <input type="hidden" name="hdnFindIdMailExist" 
        id="hdnFindIdMailExist" value="#FindIdMailExist.RecordCount#">
</cfoutput>

现在,单击“提交”时,上述字段将显示在表单中。尝试以下面的方式修改功能

function checkName(formObject, formField, fieldValue)
    {
        var testid = document.getElementById('hdnFindIdMailExist').val();
        alert(testid);
        return true;
    }

获取变量并为变量分配表单元素值并发出警报。将<cfoutput>保留在有时无法访问的javascript中并不是一个好习惯。其次它不会在警报中接受##符号。