防止php表单提交刷新自动重复提交
表单重复提交肯定不是我们所需要的了,我们最多的办法就是直接使用php查询数据库进行处理了,今天我整理了不需要查询数据库就可以防止用户重复提交的三种方法.
js 阻止重复提交
第一个是将告诉浏览器禁用submit按钮的表单被提交之后,第二个是将更改按钮的文本来给用户一些知道发生了什么,这是代码添加到你的表单标记:onsubmit="document.getElementById('myButton').disabled=true;document.getElementById('myButton').value='Submitting, please wait...';"你的表单标记将类似于,或jquery做法.
$(document).ready(function(){ $(input:submit).click(){ setTimeout(function(){obj.disabled=true;},100) }; });
PHP程序员就是这样实现防止用户多表单提交的,这种方法应用于大多数的浏览器(IE +,FireFox、Opera、…).
Session阻止重复提交
由于表单变量的内容由$_POST[‘name’]引用,也许在处理完表单后,直接将$_POST[‘name’]销毁(unset())即可,其实不然可能由于页面默认对表单内容进行了缓存,所以,即使销毁了$_POST[‘name’],刷新后,$_POST[‘name’]还是会被赋值,一 样有效.
可利用Session解决,首先给Session赋个值,比如400,第一次提交成功后改变Session的值,当第二次提交时去检查这个Session的值,如果不是400,就不再处理表单中的数据,可设置Session的有效时间?
<?php if (isset($_POST['action']) && $_POST['action'] == 'submitted') { session_start(); isset($_SESSION['num']) or die ("no session"); if ($_SESSION['num']==400){ echo '<a href="'.$_SERVER[PHP_SELF] .'">Please try again</a>'; $_SESSION['num']=500; } else { echo "However you have submitted"; } } else { session_start() or die("session is not started"); $_SESSION['num']= 400; <form action="<?php echo $_SERVER['PHP_SELF']; " method="POST"> Name: <input type="text" name="personal[name]"><br> Email: <input type="text" name="personal[email]"><br> Beer: <br> <select multiple name="beer[]"> <option value="warthog">Warthog</option> <option value="guinness">Guinness</option> <option value="stuttgarter">Stuttgarter Schwabenbr</option> </select><br> <input type="hidden" name="action" value="submitted"> <input type="submit" name="submit" value="submit me!"> </form> <?php }
cookie阻止重复提交
引入cookie机制来解决,这个方法不建议用,原因后面会写到,提交页面代码如下a.php代码如下:
<form id="form1" name="form1" method="post" action="b.php"> <p>说明 <input type="text" name="titile" /> </p> <p> <input type="submit" name="Submit" value="提交" /> </p> </form> <?php setcookie("onlypost", 't'); //设置cookie,可以带上时间值。像有些论坛防止灌水就可以将你的一些基本信息存放到里面。
处理页面b.php代码如下:
<?php if($_COOKIE['onlypost'] == 't'){ printr($COOKIE); //处理提交的内容 如果验证成功则处理 print "ok"; setcookie("onlypost", 'f'); //改变cooike值删除也可以了 }
利用header函数跳转
一旦用户点击提交按钮,处理完数据后跳到其他页面:
if (isset($_POST['submit'])) { header('location:success.php');//处理数据后,转向到其他页面 }
利用数据库来添加约束
直接在数据库里添加唯一约束或创建唯一索引,一旦发现用户重复提交了,直接抛出警告或者提示,或者只处理第一次提交的数据,这是最直接有效的方法,要求前期的数据库设计和架构要考虑周全.
本文地址:http://www.phprm.com/develop/fs9227.html
转载随意,但请附上文章地址:-)