Php防止重复提交问题总结
2011-11-17 17:54
204 查看
用户表单提交时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,解决方式从客户端和服务端解决此问题,设法避免同一表单的重复提交。
方案一:
使用客户端脚本
<form method="post" name="register" action="test.php" >
....................
<input name="cont" value="提交" type="button" onclick="document.register.cont.value='正在提交 ,请等待...';document.cont.disabled=true;document.the_form.submit();">
</form>
当用户点击提交时,按钮变成灰色不可用状态
另一种实现方案
<script>
var submitcount = 0;
function submitOnce(from)
{
if(submitcount == 0)
{
submitcount++;
return false;
}
else
{
alert("正在操作,请不要重复提交");
return false;
}
}
</script>
<form ...... onSubmit="return submitOnce(this);".....>
方案二:
使用Cookie记录表单提交的状态,根据其状态可以检查是否已经提交表单
<?php
if(isset($_POST['go']) &&!isset($_COOKIE['.....']))
{
setcookie("tempcookie",'',time()+30);
header("Location:".$_SERVER[PHP_SELF]);
exit;
}
if(isset($_COOKIE['.....']))
{
setcookie('....','',0);
echo "你已经提交过表单"
}
?>
方案三:
使用session处理
<?php
session_start();
$code = mt_mand(0,1000000);
$_SESSION['code'] = $code;
?>
将$code放到页面的隐藏域里同
<input type="hidden" name="flag" value="<?php $code;?>"/>
接收页面进行判断
<?php
session_start();
if(isset($_POST['flag']))
{
if($_POST['flag'] == $_SESSION['code'])
{
//处理表单问题
}
else
{
echo "请不要刷新本页面或重复提交表单";
}
}
?>
方案四
使用header函数跳转
<?php
if(......)
{
header('location:submit_success.php');
}
方案一:
使用客户端脚本
<form method="post" name="register" action="test.php" >
....................
<input name="cont" value="提交" type="button" onclick="document.register.cont.value='正在提交 ,请等待...';document.cont.disabled=true;document.the_form.submit();">
</form>
当用户点击提交时,按钮变成灰色不可用状态
另一种实现方案
<script>
var submitcount = 0;
function submitOnce(from)
{
if(submitcount == 0)
{
submitcount++;
return false;
}
else
{
alert("正在操作,请不要重复提交");
return false;
}
}
</script>
<form ...... onSubmit="return submitOnce(this);".....>
方案二:
使用Cookie记录表单提交的状态,根据其状态可以检查是否已经提交表单
<?php
if(isset($_POST['go']) &&!isset($_COOKIE['.....']))
{
setcookie("tempcookie",'',time()+30);
header("Location:".$_SERVER[PHP_SELF]);
exit;
}
if(isset($_COOKIE['.....']))
{
setcookie('....','',0);
echo "你已经提交过表单"
}
?>
方案三:
使用session处理
<?php
session_start();
$code = mt_mand(0,1000000);
$_SESSION['code'] = $code;
?>
将$code放到页面的隐藏域里同
<input type="hidden" name="flag" value="<?php $code;?>"/>
接收页面进行判断
<?php
session_start();
if(isset($_POST['flag']))
{
if($_POST['flag'] == $_SESSION['code'])
{
//处理表单问题
}
else
{
echo "请不要刷新本页面或重复提交表单";
}
}
?>
方案四
使用header函数跳转
<?php
if(......)
{
header('location:submit_success.php');
}
相关文章推荐
- php防止重复提交问题总结
- php防止重复提交问题总结
- 总结: 重复提交、重复刷新、防止后退的问题以及处理方式
- php防止重复提交问题
- 总结: 重复提交、重复刷新、防止后退的问题以及处理方式
- [表单] -- 防止表单重复提交问题总结
- 总结 重复提交、重复刷新、防止后退的问题以及处理方式
- php乱七八糟的问题-防止重复提交
- PHP页面防止重复提交方法总结
- php防止重复提交问题
- 总结: 重复提交、重复刷新、防止后退的问题以及处理方式
- 总结: 重复提交、重复刷新、防止后退的问题以及处理方式 (来自CSDN)
- php表单加入Token防止重复提交的方法分析
- 解析php防止form重复提交的方法
- 重复提交、重复刷新、防止后退的问题以及处理方
- php页面防重复提交方法总结
- 分享防止重复提交表单【php】
- php 防止表单重复提交两种实现方法
- Java Web学习总结13:使用Session防止表单重复提交
- 防止php重复提交表单更安全的方法