Php避免了表单的重复提交

Php避免了表单的重复提交

php中很多最常用的防止重复提交的方法是数据库限制,当然也有一些可以直接在客户端限制。具体来说,php中防止重复提交的例子有哪些?

以下情况会导致重复提交表格:

点击提交按钮两次。

单击刷新按钮。

使用浏览器的后退按钮重复前面的操作,导致表单重复提交。

使用浏览器历史记录重复提交表单。

来自浏览器的重复HTTP请求。

网页被恶意刷新。

以下是几种解决方案:

一:点击js设置按钮,会变灰。

& ltform name=form1 method=?帖子?行动=?/?target = _ blank & gt

& ltp & gt

& lt输入类型=?文字?name=?T1?尺寸=?20?& gt

& lt输入类型=?按钮?值=?提交?onclick=?JavaScript:{ this . disabled = true;document . form 1 . submit();}?& gt

& lt/p & gt;

& lt/form & gt;

点击按钮后变成灰色,无法点击。如果用户需要再次提交表单,他将在提交之前刷新页面并再次填写数据。

第二:使用会话

在会话中放置一个特殊的标志。当请求表单页面时,会生成一个特殊的字符串,它存储在会话中,并放在表单的隐藏字段中。接受处理表单数据时,检查标识字符串是否存在,立即将其从会话中删除,然后正常处理数据。

如果发现没有有效的。表单提交中的标志字符串,表示表单已经提交,本次提交被忽略。

这为您的web应用程序提供了更高级的XSRF保护。

当加载提交的页面时,会生成一个随机数。

$code = mt_rand(0,1000000);

存储在表单的隐藏输入框中:

& lt输入类型=?隐藏?name=?代码?值=?& gt

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

& lt?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

session_start()。

if(isset($_POST[?代码?])) {

if($_POST[?代码?] == $_SESSION[?代码?]){

//反复提交表单。

}否则{

$_SESSION[?代码?] =$_POST[?代码?];//存储代码

}

}?& gt

第三:使用饼干

原理类似于session,但是cookie一旦在用户的浏览器中禁用了cookie,这个功能就失效了。

if(isset($_POST[?提交?])){

setcookie(?tempcookie?,?,时间()+30);

标题(?地点:?。$ _ SERVER[PHP _ SELF]);exit();

}

if(isset($_COOKIE[?tempcookie?])){

setcookie(?tempcookie?,?,0);回声?你已经提交了表格?;

}

第四,利用header函数跳转。

一旦用户点击提交按钮,他将在处理完数据后跳转到其他页面。

if (isset($_POST[?提交?])) {

标题(?位置:success.php?);//处理完数据后,转到其他页面。

}

五:利用数据库添加约束。

直接在数据库中添加唯一约束或创建唯一索引,一旦用户重复提交就直接抛出警告或提示,或者只处理第一次提交的数据,是最直接有效的方法,这就要求前期的数据库设计和架构要综合考虑。

六:发布/重定向/获取模式

提交后执行页面重定向,也就是所谓的Post-Redirect-Get (PRG)模式。简而言之,当用户提交表单时,您执行客户端重定向并转到提交成功信息页面。

if (isset($_POST[?行动?])& amp;& amp$_POST[?行动?] == ?已提交?) {

//处理数据,比如插入数据后立即转到其他页面。

标题(?位置:submits _ success.php?);

}

这样可以避免用户按F5导致的重复提交,也不会给出浏览器表单重复提交的警告,还可以消除根据浏览器前后按导致的相同问题。