用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题。我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交。
1.使用客户端脚本
提到客户端脚本,经常使用的是JavaScript进行常规输入验证。在下面的例子中,我们使用它处理表单的重复提交问题,请看下面的代码:

当用户单击“提交”按钮后,该按钮将变为灰色不可用状态。
上面的例子中使用OnClick事件检测用户的提交状态,如果单击了“提交”按钮,该按钮立即置为失效状态,用户不能单击按钮再次提交。
还有一个方法,也是利用JavaScript的功能,但是使用的是OnSubmit()方法,如果已经提交过一次表单,将立即弹出对话框,代码如下:

<script language="javascript">
<!--
var submitcount=0;
function submitOnce (form){if (submitcount == 0){submitcount++;return true;
} else{alert("正在操作,请不要重复提交,谢谢!");return false;
}
}
//-->
</script>
<form name="the_form" method="post" action="" onSubmit="return submitOnce(this)">
<input name="text" type="text" id="text" />
<input name="cont" value="提交" type="submit">
</form>

在上例中,如果用户已经单击“提交”按钮,该脚本会自动记录当前的状态,并将submitcount变量自加1,当用户试图再次提交时,脚本判断submitcount变量值非零,提示用户已经提交,从而避免重复提交表单。
2.使用Cookie处理
使用Cookie记录表单提交的状态,根据其状态可以检查是否已经提交表单,请见下面的代码:

<?php
if(isset($_POST['go'])){setcookie("tempcookie","",time()+30);header("Location:".$_SERVER[PHP_SELF]);exit();
}
if(isset($_COOKIE["tempcookie"])){setcookie("tempcookie","",0);echo "您已经提交过表单";
}
?>

如果客户端禁止了Cookie,该方法将不起任何作用,这点请注意。关于Cookie的详细介绍,请参阅第10章“PHP会话管理”。
3.使用Session处理
利用PHP的Session功能,也能避免重复提交表单。Session保存在服务器端,在PHP运行过程中可以改变Session变量,下次访问这个变量时,得到的是新赋的值,所以,可以用一个Session变量记录表单提交的值,如果不匹配,则认为是用户在重复提交,请见如下代码:

<?phpsession_start();//根据当前SESSION生成随机数$code = mt_rand(0,1000000);$_SESSION['code'] = $code;
?>

在页面表单上将随机数作为隐藏值进行传递,代码如下:
”>
在接收页面的PHP代码如下:

<?php
session_start();
if(isset($_POST['originator'])) {if($_POST['originator'] == $_SESSION['code']){// 处理该表单的语句,省略}else{echo ‘请不要刷新本页面或重复提交表单!';}
}
?>

4.使用header函数转向
除了上面的方法之外,还有一个更简单的方法,那就是当用户提交表单,服务器端处理后立即转向其他的页面,代码如下所示。
if (isset(_POST['action']) &&_POST['action']) && _POST[‘action’] == ‘submitted’) {
//处理数据,如插入数据后,立即转向到其他页面
header(‘location:submits_success.php’);
}
这样,即使用户使用刷新键,也不会导致表单的重复提交,因为已经转向新的页面,而这个页面脚本已经不理会任何提交的数据了。

以上转自其它页面

php表单页面防重复提交方法总结相关推荐

  1. python测试开发django-162.ajax 提交表单,防重复提交(beforeSend)

    前言 form 表单提交的时候,当快速点击提交按钮的时候,会触发多个请求过去,会导致重复添加. 前端页面 前端form表单页面,2个输入框,一个提交按钮 <form id="form& ...

  2. PHP表单TOKEN防止重复提交

    PHP表单TOKEN防止重复提交 一 简介 1. 什么是表单token? Token(人家就叫这名,记住就行)是服务端生成的一串字符串,以作客户端进行请求的一个令牌和依据. 2. 表单token用来干 ...

  3. python表单防重复提交_传统方式提交表单,防止重复提交问题?

    提交表单的时候,不是使用ajax提交,就是传统的表单提交,为防止表单重复提交,应该怎么写javascript或jquery代码呢?如果提交没成功,怎么恢复提交按钮? html如下: Email add ...

  4. mysql 防重复提交_怎样防止刷新重复提交、防后退

    怎样防止刷新重复提交.防后退 提交后禁用提交按钮 1.如果提交后,按F5刷新怎么办? 使用Session 在提交的页面也就是数据库处理之前: if session("ok")=tr ...

  5. 防止页面的重复提交,刷新

    总结: 重复提交.重复刷新.防止后退的问题以及处理方式 一.前言 你在任何一个比较专业的BBS都会看到这样的问题,即使你Google一下,也会发现有很多的人在关注和询问,但大家给出的解决方法却都是千差 ...

  6. AOP+自定义注解token令牌和参数防重复提交实战

    目录 一.哪些因素会引起重复提交? 二.重复提交会带来哪些问题? 三.订单的防重复提交你能想到几种方案? 四.自定义注解方式 4.1Java核心知识-自定义注解(先了解下什么是自定义注解) 4.1.1 ...

  7. Spring MVC表单防重复提交

    转载自 Spring MVC表单防重复提交 利用Spring MVC的过滤器及token传递验证来实现表单防重复提交. 创建注解 @Target(ElementType.METHOD) @Retent ...

  8. 【精品】防止表单重复提交 方法汇总

    背景 表单重复提交会造成数据重复,增加服务器负载,严重甚至会造成服务器宕机等情况,有效防止表单重复提交有一定的必要性. 常见的防止表单重复提交解决方案有以下几种: 一.通过一个标识来控制表单提交之后, ...

  9. python表单防重复提交_防止表单重复提交的几种策略

    表单重复提交是在多用户Web应用中最常见.带来很多麻烦的一个问题.有很多的应用场景都会遇到重复提交问题,比如: 点击提交按钮两次. 点击刷新按钮. 使用浏览器后退按钮重复之前的操作,导致重复提交表单. ...

最新文章

  1. 【Android】Mac Android adb 配置
  2. 【C++】17. map []操作符、insert()、emplace()
  3. songbirds for ubuntu 12.10
  4. 每周一个 Python 模块 | hashlib
  5. Linux中常用命令(文件与目录)
  6. android Instrumentation 转载
  7. jquery版相片墙(鼠标控制图片聚合和散开)
  8. 误报的java.sql.SQLException: Parameter number 21 is not an OUT parameter
  9. VB循环For的一点启示
  10. one大白陪你聊聊2021年总结
  11. 留存光明延续大爱 80后父母捐病儿角膜感动冰城
  12. 博文视点 on Twitter
  13. python字符串_Python的字符串和编码
  14. 2023王道C语言训练营(二叉查找树-顺序查找-折半查找)
  15. python isupper_一日一技:python中的string.isupper方法
  16. 基于系统性风险角度的基金资产配置策略分析
  17. auto.js 基于控件的操作
  18. EDK2 Build Flow
  19. 01赵玉荣-03安海莹-04郝玥-实训一
  20. 论文发表投稿流程的说明

热门文章

  1. linux i2c smbus驱动
  2. 带你了解什么是中断以及外部中断案例分析
  3. asm 10g 11g 升级降级测试
  4. GPU直通、GPU共享及GPU虚拟化比较
  5. “命令终端”的实现1-准备篇
  6. 滚动代码Marquee详解(html滚动显示文字)
  7. html滚动效果代码,javascript 实现滚动效果代码整理
  8. 摘录了个锂电\碱电的尺寸对照
  9. S32K144新建项目及调试
  10. ps压缩证件照(自己动手,丰衣足食,主打一个免费)