我在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中,有时可能无法访问。其次,它将不接受##符号在警报。