php表单提交-PHP 避免重复的表单提交解释

2023-08-21 0 10,079 百度已收录

当用户提交表单时,可能是由于网络速度的原因,或者网页是恶意的刷新后,

导致同一条记录被重复插入数据库,所以一个不可忽视的限制是避免用户重复提交表单,因为有可能是用户连续点击提交按钮或者攻击者恶意提交数据,那么我们在提交数据后就会遇到麻烦,比如更改或向数据库添加数据。

那么如何避免其中重复提交表格的现象呢?为了从多个方面限制它,让我们总结几个常见的 PHP 技巧,以避免重复提交表单。首先

,首先从后端进行限制。前端 JavaScript 在

按键点击一次后被禁用,这简直避免了多次点击交出按钮,但缺点是如果用户禁用 JavaScript 脚本,就会失败。

提到客户在下面的例子中,我们用它来处理重复提交的表单php表单提交,请看下面的代码:

当用户单击“提交”按钮时,该按钮变为白色不可用

还有一个

方式,也是借助 JavaScript 函数,但使用 OnSubmit() 方法,如果表单已经提交,会立即弹出一个对话框,代码如下:

在上面的例子中,如果用户已经点击了“提交”按钮,脚本会手动记录当前状态,并在 submitcount 变量中添加 1,当用户尝试再次提交时,脚本确定 submitcount 变量值不为零,提示用户已经提交了表单,从而防止表单重复提交。

二、饼干处理的使用

使用cookie记录表单提交的状态,根据该状态您可以检测表单是否已提交,请参阅以下代码:

请注意,如果客户严格禁止cookie,则此方法将不起作用。

第三,使用会话处理

使用PHP的会话功能还可以防止重复提交表单。Session 保存在服务器端,你可以在 PHP 运行时更改 Session 变量php表单提交,下次访问这个变量时,你会得到一个新赋值,所以你可以用 Session 变量来记录表单提交的值,如果不匹配,感觉用户在重复提交, 请参阅以下代码:

使用以下代码在页面表单中将随机数作为隐藏值传递:

“>

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

四、使用标题功能转

除了前面的方法,还有一种更简单的方法,即当用户提交表单时,服务器在处理后立即重定向到其他页面,如下所示。if (isset($_POST['action']) &

& $_POST['action'] == 'submitted') {

过程数据,

例如插入数据后立即,并立即转到其他页面

标头(“位置:submits_success.php”);

这样,即使用户使用刷新键,也不会导致表单重复提交,因为新页面已经被重定向,页面脚本早就忽略了任何提交的数据。

HTTP/1.1 协议规定的 HTTP 请求方法包括 OPTIONS、POST、PUT、DELETE、TRACE 和 CONNECT。其中,POST一般用于向服务器提交数据,本文主要讨论几种形式的POST提交数据。

我们知道HTTP协议是在TCP/IP协议之上构建的应用层规范,作为ASCII码传输。该规范将 HTTP 请求分为三个部分:状态行、请求标头和消息正文。类似于以下内容:

  

该协议规定,POST提交的数据必须放在实体正文中,但合同没有具体说明数据必须使用哪种编码形式。事实上,开发人员可以自己决定消息正文的格式,只要发送的最后一个 HTTP 请求满足之前的格式即可。

但是,当发送数据时,只有在服务器成功解析时才有意义。通用服务器端语言(如 PHP 和 Python)及其框架具有用于手动解析常见数据格式的内置函数。服务器通常使用标头中的 Content-Type 字段来了解请求中的消息正文的编码方法,然后分析主题。因此,当涉及到POST提交数据方案时,它包括两部分:内容类型和消息正文编码方法。这就要从他们开始了。

php表单提交-PHP 避免重复的表单提交解释

application/x-www-form-urlencoded

这可能是向 POST 提交数据的最常见方式。浏览器的原生表单,如果未设置 enctype 属性,最终将在 application/x-www-form-urlencoded 中提交数据。该请求类似于以下内容(本文省略了无关的诉状标头):

POST http://www.example.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3

首先,内容类型被指定为 application/x-www-form-urlencoded;其次,按照key1=val1&key2=val2的方法对提交的数据进行编码,key和val都进行URL转码。大多数服务器端语言都很好地支持这些方法。例如,在PHP_POST中['sub']可以获取一个子数组。

php表单提交-PHP 避免重复的表单提交解释

很多时候,我们在 Ajax 中提交数据时会使用这些方法。例如,在 JQuery 和 QWrap 的 Ajax 中,Content-Type 的默认值是“application/x-www-form-urlencoded;字符集=UTF-8”。

多部分/表单数据

这是 POST 数据提交的另一种常见形式。当我们使用表单上传文件时,我们必须使表单的嵌入等于此值。让我们直接看一个认罪的例子:

POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

这个反例有点复杂。首先,生成一个边界用于拆分不同的数组,为了防止与正文内容重复,边界又长又复杂。然后内容类型表示数据以多部分/表单数据编码,以及此请求的边界是什么。消息正文根据数组的数量分为几个结构相似的部分,每个部分以 –bound 开头,然后是内容描述信息,然后是回车符,最后是数组内容(文本或二进制)。如果要传输文件,还要包括文件名和文件类型信息。消息正文以 –boundary– 结尾。有关多部分/表单数据的详细定义,请访问 RFC1867。

这种方法通常用于上传文件,并且被主要的服务器端语言很好地支持。

两种方法

的 POST 数据是浏览器原生支持的,原生表单表单现阶段仅支持这两种方法。但是随着越来越多的网站,尤其是WebApp,使用Ajax进行数据交互,我们可以定义新的数据传输方法php表单提交,使开发更加方便。

应用程序/JSON

application/jsonphp表单提交,内容类型,作为响应标头,你当然熟悉它。事实上,现在越来越多的人使用它作为请求标头来告诉服务器消息正文是序列化的 JSON 字符串。由于JSON规范的流行,除了较低版本的IE之外,所有主流浏览器原生都支持JSON.stringify,并且服务器端语言也有处理JSON的函数,所以使用JSON不会有问题。

JSON 格式支持比通配符对复杂得多的结构化数据也很有用。我记得几年前我在做一个项目的时候,需要提交的数据非常深入,我序列化了数据JSON并稍后提交。但是,当时我将JSON字符串作为val,仍然将其放在通配符对中,并将其作为x-www-form-urlencoded提交。

Google的AngularJS中的Ajax功能默认为传递JSON字符串。例如,以下代码:

var data = {'title':'test', 'sub' : [1,2,3]};
$http.post(url, data).success(function(result) {
    ...
});

最终发出的请求是:

POST http://www.example.com HTTP/1.1
Content-Type: application/json;charset=utf-8
{"title":"test","sub":[1,2,3]}

该解决方案可以轻松提交复杂的结构化数据,特别适用于 RESTful 套接字。主要的包捕获工具,如Chrome自己的开发者工具,Firebug和Fiddler将以树形结构显示JSON数据,这非常友好。但是,也有一些服务器端语言还不支持这些方法,例如 PHP,这使得很难通过 $_POST 对象获取上一个请求的内容。此时,您需要自己执行此操作:当请求标头中的内容类型为 application/json 时,从 php://input 获取原始输入流,然后json_decode到对象中。一些PHP框架已经开始这样做。

当然,AngularJS也可以配置为使用x-www-form-urlencoded提交数据。如有必要,您可以参考本文。

文本/XML

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php表单提交-PHP 避免重复的表单提交解释 https://www.wkzy.net/game/131724.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务