搜索
首页php教程php手册探讨PHP表单重复提交的预防法则
探讨PHP表单重复提交的预防法则Jun 13, 2016 am 11:08 AM
php单击变为可用按钮探讨提交灰色状态用户表单重复预防

当用户单击“提交”按钮后,该按钮将变为灰色不可用状态。

上面的例子中使用OnClick事件检测用户的提交状态,如果单击了“提交”按钮,该按钮立即置为失效状态,用户不能单击按钮再次提交。

还有一个方法,也是利用JavaScript的功能,但是使用的是OnSubmit()方法,如果已经提交过一次表单,将立即弹出对话框,代码如下:

<ol class="dp-xml">
<li class="alt"><span><span class="tag"><span> </span><span class="tag-name">input</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"hidden"</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"originator"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"=$code?>"</span><span class="tag">></span><span> </span></span></span></li>
<li><span>在接收页面的PHP代码如下:  </span></li>
<li class="alt"><span class="tag"><span> ?phpsession_start();if(isset($_POST['originator'])) {  </span></span></li>
<li><span>if($_POST['originator'] == $_SESSION['code']){// 处理该表单的语句,省略  </span></li>
<li class="alt"><span>}else{  </span></li>
<li><span>echo ‘请不要刷新本页面或重复提交表单!’;  </span></li>
<li class="alt"><span>}  </span></li>
<li>
<span>}</span><span class="tag">?></span><span> </span>
</li>
</ol>


在上例中,如果用户已经单击“提交”按钮,该脚本会自动记录当前的状态,并将submitcount变量自加
1,当用户试图再次提交时,脚本判断submitcount变量值非零,提示用户已经提交,从而避免重复提交表单。

2.使用Cookie处理
使用Cookie记录表单提交的状态,根据其状态可以检查是否已经提交表单,请见下面的代码:

<ol class="dp-xml">
<li class="alt"><span><span class="tag"><span> ?php  </span></span></span></li>
<li><span>if(isset($_POST['go'])){setcookie("tempcookie","",time()+30);  </span></li>
<li class="alt"><span>header("Location:".$_SERVER[PHP_SELF]);exit();  </span></li>
<li><span>} if(isset($_COOKIE["tempcookie"])){  </span></li>
<li class="alt"><span>setcookie("tempcookie","",0);echo "您已经提交过表单";  </span></li>
<li>
<span>}</span><span class="tag">?></span><span> </span>
</li>
</ol>

如果客户端禁止了Cookie,该方法将不起任何作用,这点请注意。

3.使用Session处理
利用PHP的Session功能,也能避免PHP表单重复提交。Session保存在服务器端,在PHP运行过程中可以改变Session变量,下次访问这个变量时,得到的是新赋的值,所以,可以用一个Session变量记录表单提交的值,如果不匹配,则认为是用户在重复提交,请见如下代码:

<ol class="dp-xml">
<li class="alt"><span><span class="tag"><span> ?php  </span></span></span></li>
<li><span>session_start();//根据当前SESSION生成随机数  </span></li>
<li class="alt">
<span>$</span><span class="attribute">code</span><span> = </span><span class="attribute-value">mt_rand</span><span>(0,1000000);  </span>
</li>
<li><span>$_SESSION['code'] = $code;  </span></li>
<li class="alt">
<span class="tag">?></span><span> </span>
</li>
</ol>

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

<ol class="dp-xml"><li class="alt"><span><span class="tag"><span> </span><span class="tag-name">input</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"hidden"</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"originator"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">""</span><span class="tag">></span><span> </span></span></span></li></ol>


在接收页面的PHP代码如下:
 

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

4.使用header函数转向
除了上面的PHP表单重复提交的预防方法之外,还有一个更简单的方法,那就是当用户提交表单,服务器端处理后立即转向其他的页面,代码如下所示。

<ol class="dp-xml">
<li class="alt"><span><span>if (isset($_POST['action']) <br>&& $_POST['action'] == 'submitted') {  </span></span></li>
<li><span>//处理数据,如插入数据后,立即转向到其他页面  </span></li>
<li class="alt"><span>header('location:submits_success.php');  </span></li>
<li><span>}  </span></li>
</ol>

以上就是PHP表单重复提交的几个预防方法的介绍。


声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
php怎么设置implode没有分隔符php怎么设置implode没有分隔符Apr 18, 2022 pm 05:39 PM

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

深入探讨:Django框架是什么?深入探讨:Django框架是什么?Jan 19, 2024 am 09:23 AM

Django框架是一种用于Web应用程序的Python框架,它提供了一个简单而强大的方式来创建Web应用程序。事实上,Django已经成为当前最受欢迎的PythonWeb开发框架之一,也成为很多公司的首选,包括Instagram和Pinterest。本文将深入探讨Django框架是什么,包括基础概念和重要组件,以及具体代码示例。Django基础概念Djan

深入探讨Laravel中的Head请求方法深入探讨Laravel中的Head请求方法Mar 06, 2024 pm 03:36 PM

作为一个流行的PHP框架,Laravel提供了许多便捷的请求方法来处理不同类型的HTTP请求。其中,Head请求方法是一个比较特殊且常被忽视的方法。在本文中,我们将深入探讨Laravel中Head请求方法的作用、用法和示例代码。什么是Head请求方法?Head请求方法是HTTP协议中定义的一种请求方法,在发送Head请求时,服务器将仅返回请求头信息,而不会返

深入探讨Go语言对C语言的兼容程度深入探讨Go语言对C语言的兼容程度Mar 07, 2024 pm 02:45 PM

Go语言是一门由Google开发的编程语言,具有高效、简洁、并发性强等特点。它在语法结构、包管理、高级特性等方面都有很大的优势,因此备受程序员青睐。然而,在实际开发中,很多项目会涉及到与传统的编程语言C进行交互,因此Go语言与C语言的兼容性就显得尤为重要。首先,我们来谈谈Go语言与C语言的兼容性。在Go语言中,可以通过CGo将Go语言与C语言进行交互。CGo

深入探讨:Go语言中的单线程特性深入探讨:Go语言中的单线程特性Mar 15, 2024 pm 02:09 PM

Go语言作为一种现代化的编程语言,以其简洁高效的特性在近年来受到越来越多开发者的喜爱和青睐。其中一个让人独特的地方就是其单线程特性。在传统的多线程编程语言中,开发者通常需要手动管理线程之间的同步和互斥,而在Go语言中,借助其独特的协程(Goroutine)和通信机制(channel),可以方便且高效地实现并发编程。一、Goroutine与单线程:Go语言中的

深入探讨:Golang是否适合编写驱动程序?深入探讨:Golang是否适合编写驱动程序?Mar 20, 2024 am 10:09 AM

Golang是一种由谷歌开发的编程语言,其出色的性能和并发特性使其在各种领域中得到了广泛的应用,包括网络编程、大数据处理等。然而,对于一些需要直接操作硬件的领域,比如驱动程序开发,人们可能会开始思考:Golang是否适合用于编写驱动程序呢?本文将深入探讨这个问题,并通过具体的代码示例来展示Golang在驱动程序开发中的应用。首先,让我们来了解一下什么是驱动程

深入探讨Linux中常见的特殊字符深入探讨Linux中常见的特殊字符Mar 14, 2024 pm 02:54 PM

Linux操作系统作为一种常用的开源操作系统,具有强大的可定制性和灵活性。在使用Linux系统时,我们经常会遇到各种特殊字符的处理。这些特殊字符在命令行中具有特殊的含义,能够实现很多高级功能。本文将深入探讨Linux中常见的特殊字符,并结合具体的代码示例来详细介绍它们的用法。通配符:通配符是用来匹配文件名的特殊字符,常见的通配符包括*、?、[]等。下面是几种

Golang的本质是脚本语言还是编译语言?探讨Golang的本质是脚本语言还是编译语言?探讨Mar 19, 2024 pm 03:12 PM

Golang的本质是脚本语言还是编译语言?探讨Golang,也被称为Go语言,是一种由Google开发的静态类型编程语言。自诞生以来,Golang一直备受开发者关注,其优秀的并发性能、简洁的语法和跨平台特性使其在各个领域得到广泛应用。然而,关于Golang到底是脚本语言还是编译语言,却一直存在着争议。脚本语言和编译语言在运行时的不同方式给人们留下了深刻的印象

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)