2015-07-21 137 views
1

我正在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(结果总是一个我以前提交)

所以也许不可能在提交表单之前验证服务器端? 在发送表单以将数据添加到数据库之前,我想确保一切都很好。为了安全起见,我想做这个服务器端。

任何人都可以提出更好的方法吗?

谢谢你的帮助!

+0

您可以使用ajax轻松完成此操作。为什么不ajax? –

+0

嗡嗡声你觉得如果我用阿贾克斯一切都会同步惠特没有延迟?让我试试吧! :D thx的提示...如果你想你可以给我一个例子...非常感谢 – Kazimar

+0

在客户端,你可以更进一步,不包括提交按钮,直到数据通过(不是空白,而不是db)。 –

回答

-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中并不是一个好习惯。其次它不会在alert中接受##符号。

+0

这不会有什么不同,因为查询的结果在输入值和提交表单(这是他们试图避免的)之后*仍然是未知的。实现这一点的唯一方法 - 不用提交表单 - 就是用ajax向服务器发送第二个请求。 – Leigh

相关问题