前两天在百度知道看到一个有关表单验证的问题,提问的网友想知道:
...录入完张三的信息后,再录入张三的名字时会提示已经录入过该人的信息了,弹出信息框的形式提示...
这里的验证需要通过数据库的查询来验证,因此需要另一个PHP文件来执行。并且执行的结果要以弹出信息框的方式出现,因此要用到Javscript。通常的解法应该是使用ajax,具体思路如下:(我采用jQuery提供的ajax方法,这样代码会比较简单)
1. 需要验证的文本框 - HTML代码:
<input name="xm" type="text" id="xm" size="30" />
2. 使用jQuery的ajax方法调用check.php文件并且把结果:
$("#xm").onChange(function(){
var name = $(this).val();
$.ajax({
type: "GET",
url: "check.php",
data: "name="+name,
success: function(repeat){
if(repeat)
alert( "重复!" );
}
});
});
3. check.php - 检测输入的名字是否已经存在于数据库,如果是返回1,如果不是返回0
<?php
$xm=$_REQUEST['xm'];
$sql="select count(*) from jinengchaxun where xm='$xm'";
mysql_connect(..自己一定写正确哦..);
$res=mysql_query($sql);
list($cnt)=mysql_fetch_row($res);
mysql_free_result($res);
mysql_close();
return ($cnt>0) ? 1 : 0;
?>
注意:我没有测试过这种方法,有兴趣的可以试一下。
另外一种方法用到iframe,是另外一个网友提供的:
/**一、编写一个checkxinxi.php来检测指定的名字是否存在,内容如下:*/
<?php
$xm=$_REQUEST['xm'];
$sql="select count(*) from jinengchaxun where xm='$xm'";
mysql_connect(..自己一定写正确哦..);
$res=mysql_query($sql);
list($cnt)=mysql_fetch_row($res);
mysql_free_result($res);
mysql_close();
echo <<<END
<script type=text/javascript>
if ($cnt>0) {
alert('重复提示:已经录入过 $xm 了!');
parent.document.getElementById('chk_rst').innerHTML='重复';
}else parent.document.getElementById('chk_rst').innerHTML='新人';
</script>
END;
?>
/**二、addxinxi.php进行如下修改既可:*/
<input name="xm" type="text" id="xm" size="30" />
//修改为:
<input name="xm" type="text" id="xm" size="30"
onchange="chk_frm.location.href='chkxinxi.php?xm='+this.value;" />
<span id=chk_rst></span>
<iframe name=chk_frm style='display:none'></iframe>
我把原答案里的parent.chk_rst.innerHTML 改成 parent.document.getElementById('chk_rst').innerHTML,因为Firefox不识别parent.chk_rst。
个人感觉,使用iFrame比较简单, 但是iFrame其实是把一个页面隐藏在另外一个页面里,所以执行的时候它需要刷新整个页面。而ajax可以异步更新,所以相对要平滑许多,而且使用jQuery后ajax的书写也变得简单了,所以还是建议使用ajax。
方法二的演示
标签: Ajax, Jquery, PHP, 百度知道