在表单页面设置一个隐藏域,尽量让隐藏域的值不重复,例如在表单页面form.php中设置隐藏域hashCode,并让hashCode的值为当前的时间戳:
在表单处理页面form_action.php接收隐藏域hashCode的值,判断是否存在$_SESSION['ACTION']或者$_SESSION['ACTION']的值是否等于表单提交的hashCode的值,如果相等为重复提交数据。
session_start();
$hashCode =trim($_POST['hashCode']);
if(!isset($_SESSION['ACTION'])||$_SESSION['ACTION']!=$hashCode){
//新提交数据,入库操作
$_SESSION['ACTION'] =$hashCode;//标记操作完成
}else{
echo '请勿重复提交数据';
exit();
}
?>
表单页面是一个文件,数据库插入是一个文件,分开来做,不然肯定会每刷新一次就执行一次,都不需要按提交按钮
将name字段设定为unique,这样,重复的name将不能插入数据库,但会爆出一个错误,可以将其$db->exec("insert into reg(name,pwd,email) values('$name','$pwd','$email')") or exit("用户名重复!!!");