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



我在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>

My form:

<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提交后。

示例:

  • 输入一个已经存在的名字,然后点击提交:result = 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中,有时可能无法访问。其次,它将不接受##符号在警报。

最新更新