解决php表单重复提交实现方法


Posted in PHP onSeptember 29, 2015

重复提交是我们开发中会常碰到的一个问题,除了我们使用js来防止表单的重复提交,同时还可以使用php来防止重复提交哦。

<?php
/*
 * php中如何防止表单的重复提交
 */
session_start();
if (empty($_SESSION['ip'])) {//第一次写入操作,判断是否记录了IP地址,以此知道是否要写入数据库
  $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; //第一次写入,为后面刷新或后退的判断做个铺垫
  //...........//写入数据库操作
} else {//已经有第一次写入后的操作,也就不再写入数据库
  echo '请不要再次刷新和后退'; //写一些已经写入的提示或其它东西
}
?>

具体原理
session范围变量token来防止。
1. 开启session:
session_start();
2. 如果有表单提交

if (isset($token))

token以hidden的形式包含在form当中。

<input type="hidden" name="token" value="<?php echo $token; ?>" />

 

3. 如果是重复提交表单

if ($_SESSION["token"] != $token) { 
  // 不让重复提交,在此处理 
  // header("location:".$_SERVER['PHP_SELF']); 
} else { 
  // 正常的表单提交,在此处理 
  // echo "已提交";  
}

4. 设置token值
$token = mt_rand(0,1000000);
2$_SESSION['token'] = $token;

以上就是关于如何解决php表单重复提交实现方法,希望对大家的学习有所帮助。

PHP 相关文章推荐
PHP 和 MySQL 开发的 8 个技巧
Jan 02 PHP
PHP小程序自动提交到自助友情连接
Nov 24 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
Jun 24 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
Jun 05 PHP
php自定义session示例分享
Apr 22 PHP
php 开发中加密的几种方法总结
Mar 22 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
php框架CodeIgniter主从数据库配置方法分析
May 25 PHP
Laravel解决nesting level错误和隐藏index.php的问题
Oct 12 PHP
使用laravel根据用户类型来显示或隐藏字段
Oct 17 PHP
laravel 解决多库下的DB::transaction()事务失效问题
Oct 21 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
May 02 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
Sep 29 #PHP
php猜单词游戏
Sep 29 #PHP
PHP代码优化技巧小结
Sep 29 #PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
Sep 29 #PHP
PHP类的封装与继承详解
Sep 29 #PHP
PHP比较运算符的详细介绍
Sep 29 #PHP
php提高网站效率的技巧
Sep 29 #PHP
You might like
PHP Pear 安装及使用
2009/03/19 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
PHP 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
PHP生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
如何提高数据访问速度
2016/12/26 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
Python3实现并发检验代理池地址的方法
2016/09/18 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
Django外键(ForeignKey)操作以及related_name的作用详解
2019/07/29 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
c/c++某大公司的两道笔试题
2014/02/02 面试题
装修设计师求职信
2014/02/26 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
MYSQL数据库使用UTF-8中文编码乱码的解决办法
2021/05/26 MySQL
Java框架入门之简单介绍SpringBoot框架
2021/06/18 Java/Android
Python requests用法和django后台处理详解
2022/03/19 Python
Javascript中Microtask和Macrotask鲜为人知的知识点
2022/04/02 Javascript