如何真正解决表单重复提交问题php代码

过去一切时代的精华尽在书中。以下是小编为大家搜索整理的如何真正解决表单重复提交问题php代码,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!

以前用的js表单防止重复提交方法

代码如下

var checkSubmitFlg = false;

function checkSubmit() {

if (!checkSubmitFlg) {

// 第一次提交

checkSubmitFlg = true;

return true;

} else {

//重复提交

alert("Submit again!");

return false;

}

}

//以下三种方式分别调用

这样如果我直接做一个表单,然后提交给/test,上面代理就是一个摆设了,那我们要如何解决此问题

如果您已经知道如何解决的话那么这篇文章可能不适合你的口味,paperen这里也打算从基础开始讨论,所以希望一步看到解决方案的您也可能不太适合,所以请注意。So~开始吧 ~

paperen想您一定知道表单是什么吧,form元素就是表单,一般网页需要输入的地方必定使用了表单元素,也很常见,一般的代码如下:

代码如下

method="post">

随便输入点什么www.45it.com

重点其实是form与input元素,p元素只是paperen私自加上去的,对后续的说明没有任何影响,其实很简单,所谓input就是输入了,你可以完全将input 元素理解为是用作用户输入,只是某些属性的(type)不能作为输入而已(这里就是submit),而form元素你完全可以将它理解为是一个袋子,将所有用户输入数据到装在它里面之后用 来提交回服务端处理,但对于form元素值得注意的是method属性,一般来说有get与post两种方法,其实不要想得太复杂(因为深入的不需要太理解,对于后续的内容没有太多关系,如 有兴趣不妨可以使用浏览器的调试工具查看请求头部信息与发送信息,例如firebug),表现出来就是,使用get提交表单的话所有的input元素的值将会在地址栏处出现,而post则不会, 例如使用get提交此表单后的浏览器地址栏

代码如下

http://localhost/mytest/token/form.php?data=test&submit=%E6%8F%90%E4%BA%A4

post则在 地址栏看不到了,使用fiebug可以看到如下信息

可以简单认为get是显式传送数据的,而 post则是隐式传送数据的,但还有一个很大区别的是post支持更多更大的数据传送。

Next,当表单代码写好了,那么让我们来进行服务器脚本的编写(这里就是PHP)。很简单 ~

代码如下

if ( isset( $_POST['submit'] ) ) {

//表单提交处理

$data = isset( $_POST['data'] ) ? htmlspecialchars( $_POST['data'] ) :

'';

//Insert or Update数据库

$sql = "insert into test (`string`) values ('$data')";

//do query

echo $sql;

}

?>

因为这里是post传送数据的,所以使用PHP的$_POST全局变量就能获取到表单提交的数据,所有使用post方法的表单数据提交到服务端都会被保存在这个$_POST全局变 量中,不妨可以试试print_r( $_POST )这个变量你就明白了。

首先检查一下是否在$_POST数组里面存在submit,如果存在则证明是表单提交过来的,正如asp.net中好像有个 叫ispostback的一样,只是这样没那么严谨而已,但是不要紧之后会解决这个问题的。

之后接收输入框的数据,就是$_POST['data'],别忘了使用htmlspecialchars对这个进 行一下html过滤,因为防止输入了html标签或javascript造成问题(貌似叫做XSS漏洞)。最后就是拼接到sql语句中送入数据库跑了(只是这里paperen并没有很详细使用一些操作数据库的 函数例如mysql_query,有兴趣自己完成它)。恭喜,到了这里你已经顺利地完成了一个数据录入的功能了,但是有个地方你总得改善吧,插入数据后总得给操作者一个提示吧~~至少提示 我操作失败还是成功。所以整个代码paperen写成以下样子。

代码如下

if ( isset( $_POST['submit'] ) ) {

//表单提交处理

$data = isset(

$_POST['data'] ) ? htmlspecialchars( $_POST['data'] ) : '';

//connect

mysql_connect( 'localhost', 'root', 'root' );

//select db

mysql_select_db( 'test' );

//设置字符集防止乱码

mysql_query( 'set names "utf8"' );

//SQL

$sql = "insert

into `token` (string) values ('$data')";

//query

mysql_query( $sql );

$insert_id = mysql_insert_id();

if (

$insert_id ) {

$state = 1;

} else {

$state = 0;

}

}

?>

&& $state ) { //数据插入成功 ?>

插入成功 返回

作 ?>

随便输入点什么

name="data" id="test" />

html的声明与head还有body都省略了,对比于一开始的代码其实主要是实现了真正插入数据库动作与给出 了操作反馈(通过$state变量),不妨自己拷贝代码然后试试(当然请根据自己实际情况修改数据库操作部分的代码)。代码正常,逻辑没问题,但是有个问题,就是在显示插入成功后再刷新页 面又会执行了表单处理动作,又插了一遍数据!这就是所谓的重复插入问题。在放出解决方案之前您可以自己思考一下该如何解决。

你会不会认为是接收数据与显示处理结果都是 这个页面所以才会导致这个问题?也对,也可以这么认为,使用一些调试工具你会发现,浏览器还对post的数据进行了保留,故在提交完表单后再刷新的话该post数据会重新提交了一遍。

如果有办法将浏览器的这个临时保存的post数据清空掉不就解决问题了,但服务端是没法 做到这点的,因为这是浏览器自身的事情,要么我们就重定向了不然再刷新还是会重复提交数据。

到目前为止也许你已经了解到重复提交的意思与问题的恶劣所在,如果 你不是选用重定向的`办法那么就得另外想一个办法了,所以令牌解决办法就是这么过来的。

php mysql 重复提交数据_如何真正解决表单重复提交问题php代码相关推荐

  1. asp.net接受表单验证格式后再提交数据_如何解析 el-form-renderer 表单渲染器1.14.0...

    DEEPEXI 大前端 常人道,一入开发深似海,技术学习无止境.在新技术层出不穷的前端开发领域,有一群身怀绝技的开发,他们在钻研前沿技术的同时,也不忘分享他们的成果,回馈社区.下面,就由小水滴带大家看 ...

  2. 简单介绍redis分布式锁解决表单重复提交的问题

    在系统中,有些接口如果重复提交,可能会造成脏数据或者其他的严重的问题,所以我们一般会对与数据库有交互的接口进行重复处理.本文就详细的介绍一下redis分布式锁解决表单重复提交,感兴趣的可以了解一下 假 ...

  3. Html 中表单提交的一些知识总结——防止表单自动提交,以及submit和button提交表单的区别...

    转自:http://jackaudrey.blog.163.com/blog/static/1314217882010590041833/ 在页面中有多个input type="text&q ...

  4. uniapp 表单提交图片跟其他填写数据_记录第一次实现表单数据提交到数据库

    经过几周的Web前端学习我初步对.html文件.php文件有了一定的了解.首先我们来复习一下学过的知识.HTML页面实际上就是静态的网页页面,我们可以用html+css(层叠样式表)来创作出具有不同格 ...

  5. 在excel中如何筛选重复数据_如何将Excel表中重复数据筛选出来?

    在使用Excel表格时,当Excel表格数据在数量庞大的情况下,输入重复数据在所难免.但为确保表格最终统计分析结果的准确性,需要快速筛选出重复的数据,进行删除标记等多重处理.人工手动校对数据即浪费时间 ...

  6. 插入的表单控制下拉框怎么设置_想要告别表单重复填写?这一个功能就够了

    「表单填写关联」这个功能,小伙伴们有没有用过?在一些日常工作中,很多小伙伴习惯使用表单来提升工作效率,在使用过程中,经常会遇到一些问题,例如,不同的表单,相同的信息,需要重复填写,一次两次还好,可是像 ...

  7. ajax提交成功清空表单,Ajax提交数据后,清空form表单

    按钮不同,页面相同,还需要显示的数据不同,这里会由于页面的缓存问题,导致,每次点开这个页面显示的数据相同. 这不是我们想要的.这就需要清楚表单数据了. 如下: $('#myform')[0].rese ...

  8. mysql滚动查询数据_在一个超大的表中如何实现类似滑动订单的查询

    额,不知道标题是否合理,情况是这样的,我想实现一个类似滑动订单的查询,就是查看每分钟一共收到了多少请求.该表比较大 select count(*) from gwserverperfdatas; '1 ...

  9. 防止用户将表单重复提交的方法汇总

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

最新文章

  1. 五子棋html游戏代码与算法介绍
  2. 设计MM32-LINK自动复位器,上电复位
  3. 算法----删除链表中的节点(Java)
  4. java+queue+se_「013期」JavaSE面试题(十三):多线程(3)
  5. python打开360浏览器_python selenium使用360浏览器出现新皮肤设置怎么办?
  6. 什么时候才能都及格呢?
  7. window.addeventlistener 不能调用方法_Java入门第十四课:如何定义”方法“
  8. 聊聊Elasticsearch的Iterables
  9. C++递归或非递归实现n的阶乘
  10. 售价17999元起,华为Mate X2发布;程序员10万“买”了个北京户口;赏金猎人获苹果5000美元奖励 | 极客头条...
  11. 分享一个vue项目“脚手架”项目的实现步骤
  12. mysql 优化 整体思路
  13. qt开发linux性能测试工具,基于Qt的ARM-Linux系统测试工具
  14. OpenV2X开源社区亮相全球边缘计算大会
  15. 计算机基础和Linux安装
  16. kappa系数简介---一致性与分类准确度指标
  17. docker安装及加速器
  18. 你真的知道如何使用Target.Count吗?
  19. 值得入手的键盘——Keychron K8 Pro
  20. Java 操作 ElasticSearch

热门文章

  1. STM32使用片内FLASH制作小U盘(STM32+FLASH+MSC)
  2. 基于互联网的招聘信息统计与分析(作业)
  3. Java 输出数组中指定元素的下标
  4. sonarlint sonarqube 使用
  5. 神经网络1_neuron network原理_python sklearn建模乳腺癌细胞分类器(推荐AAA)
  6. 【将金令】稳健,方为上策
  7. Android+阿里云数据库,实现安卓云数据库
  8. 共享打印机连接报错709
  9. html 换行特殊符号,html中的换行符号
  10. java实现大段中文转拼音首字母、拼音全拼