PHP+Session防止表单重复提交的解决方法


Posted in PHP onApril 09, 2018

 index.php

当前表单页面is_submit设为0

SESSION_START(); 
$_SESSION['is_submit'] = 0;
<form id="reg" action="post.php" method="post"> 
  <p>用户名:<input type="text" class="input" name="username" id="user"></p> 
  <p>密   码:<input type="password" class="input" name="password" id="pass"></p> 
  <p>E-mail:<input type="text" class="input" name="email" id="email"></p> 
  <p><input type="submit" name="submit" class="btn" value="提交注册"/></p> 
</form>

 post.php

若是提交表单了,设当前'is_submit为1,若是刷新post.php,那么将执行else代码

SESSION_START(); 
if (isset($_POST['submit'])) { 
  if ($_SESSION['is_submit'] == '0') { 
    $_SESSION['is_submit'] = '1'; 
    echo "代码块,要做的事,代码...<a onclick='history.go(-1);' href='javascript:void(0)'>返回</a>"; 
  } else { 
    echo "请不用重复提交<a href='index.php'>PHP+SESSION防止表单重复提交</a>"; 
  } 
}

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

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

例1 代码如下

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

例1

 代码如下

<?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);
$_SESSION['token'] = $token;

总结

以上所述是小编给大家介绍的PHP+Session防止表单重复提交的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
Banner程序
Oct 09 PHP
PHP 小心urldecode引发的SQL注入漏洞
Oct 27 PHP
php中用socket模拟http中post或者get提交数据的示例代码
Aug 08 PHP
javascript some()函数用法详解
Nov 13 PHP
使用php实现从身份证中提取生日
May 09 PHP
PHP加密技术的简单实现
Sep 04 PHP
PHP使用Redis实现防止大并发下二次写入的方法
Oct 09 PHP
Laravel如何自定义command命令浅析
Mar 23 PHP
Swoole 5将移除自动添加Event::wait()特性详解
Jul 10 PHP
PHP中用Trait封装单例模式的实现
Dec 18 PHP
thinkphp5框架路由原理与用法详解
Feb 11 PHP
PHP8.0新功能之Match表达式的使用
Jul 19 PHP
PHP创建自己的Composer包方法
Apr 09 #PHP
Bootstrap+PHP实现多图上传功能实例详解
Apr 08 #PHP
PHP实现的获取文件mimes类型工具类示例
Apr 08 #PHP
PHP面向对象之里氏替换原则简单示例
Apr 08 #PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 #PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
Apr 08 #PHP
PHP实现微信红包金额拆分试玩的算法示例
Apr 07 #PHP
You might like
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
2014/01/07 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
PDO::lastInsertId讲解
2019/01/29 PHP
基于Jquery的温度计动画效果
2010/06/18 Javascript
Jquery实现简单的动画效果代码
2012/03/18 Javascript
纯JS实现五子棋游戏兼容各浏览器(附源码)
2013/04/24 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
jquery操作select常见方法大全【7种情况】
2019/05/28 jQuery
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python注释详解
2016/06/01 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
Python实现购物车购物小程序
2018/04/18 Python
解决python xlrd无法读取excel文件的问题
2018/12/25 Python
ubuntu 16.04下python版本切换的方法
2019/06/14 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
Python Numpy库常见用法入门教程
2020/01/16 Python
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
自荐书范文
2013/12/08 职场文书
留学经费担保书
2014/05/12 职场文书
就业推荐表导师评语
2014/12/31 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书
springboot读取nacos配置文件
2022/05/20 Java/Android