重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
每次进入提交的页面,给一个session,为了避免重复,session的key可以是随机的。
创新互联公司专注于嘉兴网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供嘉兴营销型网站建设,嘉兴网站制作、嘉兴网页设计、嘉兴网站官网定制、重庆小程序开发服务,打造嘉兴网络公司原创品牌,更为您提供嘉兴网站排名全网营销落地服务。
在表单填写页面
?php
session_start(); // 启用session
$time = time();
$key = 'sess_' . $time; // 根据时间生成一个随机的session key
$_SESSION[$key] = $time; // 设置session的值
?
!--{通过隐藏表单将 session 的 key传递到服务端处理}--
input type="hidden" name="session_key" value="?php echo $time;?" /
处理页面
?php
session_start(); // 启用session
$key = $_POST['session_key'];
if(!$key || $_SESSION[$key] != substr($key, 5)){
// 如果没有传 session_key 参数
// 或者 session_key 参数值截断 sess_后的数字 与 session参数值不匹配
unset($_SESSION[$key]); // 删除 session 值
// 然后考虑是否要提示错误,或者转入另一个页面
exit(); // 终止页面代码执行
}
// 下面进行数据写操作
// 数据操作完成后,删除session
unset($_SESSION[$key]);
// 后续操作
?
$########################
一个页面也是一样的,我给你的只是一个思维,
具体如何实现,你要根据自己的实际情况去处理
很多东西都不是通用的
另外,不管多少个页面,必然包含两个部分,一部分是表单填写,一部分是数据处理,这个跟多少个页面无关~~就看你是否能够理解这段代码的意义,如果不理解的话,嵌套进去也没啥用,能够理解的话,或许你能够找出更适合自己的解决方案
PHP 防止表单重复提交,使用令牌来做验证,即可解决。示例如下:
index.php:
?php
header("Content-type:text/html;charset=utf-8");
//开启session
session_start();
//如果令牌为空,则生成一个令牌
if(!isset($_SESSION['token'] ) || $_SESSION['token'] == ""){
//给当前表单生成一个令牌
$_SESSION['token'] = md5(microtime(true));
}
?
form method="get" action="deal.php"
名称: input type="text" name="names"br/
描述: input type="text" name="desc"br/
input type="text" name="token" value="?=$_SESSION['token']?"
input type="submit" value="提交"
/form
deal.php:
?php
header("Content-type:text/html;charset=utf-8");
//开启session
session_start();
//验证令牌
if($_REQUEST['token'] === $_SESSION['token']){
//表单已经提交,重新生成令牌
$_SESSION['token'] = md5(microtime(true));
echo "表单提交成功:br/";
print_r($_REQUEST);
}else{
echo "重复提交";
}
?
如果不想每条查询一次,可以提前做一个统一查询
$sql=mysql_query("select distinct Code from test ",$conn);
$sqlvalue=[];
while($row=mysql_fetch_array($sql)){
$sqlvalue[]=$row['Code'];
}
另外 ,可以在建表的时候设置unique index,来彻底避免插入重复记录,如果没过滤好插入重复记录的时候,系统会直接报错