我在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)
尝试使用以下代码和功能: 将 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中并不是一个好习惯。其次它不会在警报中接受##符号。