最近发现我的网站的网站提交功能,会出现填写完成输入信息以后,点击提交的时候在等待处理数据的时候再点击一次提交,就会把相同的数据重复保存到数据库。虽然我在PHP里进行了判断是否重复的问题,依然没有用。我想应该是在php处理数据提交到数据库的时候的一个BUG,当然经过我修改PHP代码解决了这个问题。那么朋友们有没有遇到这样的情况,你是如何解决的呢?我这里分享一个除了修改php代码以外、其他的修改方法。
一、使用前端JavaScript来禁用重复点击
顾名思义,使用前端JavaScript来禁用重复点击就是在用户点击提交按钮后,禁用该按钮,以防止再次点击。可以通过在点击事件之后添加disabled属性来实现。例如:
<!-- HTML -->
<form method="post" action="">
<!-- 表单内容 -->
<input type="submit" value="提交" onclick="disableButton(this)">
</form>
<!-- JavaScript -->
<script>
function disableButton(button) {
button.disabled = true;
}
</script>这样,当用户点击提交按钮后,按钮会被禁用,防止重复点击。这样大部分可以解决重复点击的问题,但是如果浏览器禁用了js代码呢?所以下面介绍别的方法。
二、定义MYSQL表的唯一键或主键来防止数据库中的重复记录
在数据库中设置相应字段为唯一键或主键,以防止重复记录的插入。当重复的数据被提交时,将会触发数据库错误,可以通过捕获该错误来处理重复提交的情况。不过这一步需要确定之前该字段无重复值!

三、使用Token来防止重复提交
生成一个唯一的Token,将其存储在会话(session)或隐藏字段中,并在每次请求时进行比对。如果Token已经被使用过,则不处理该请求。以下是一个使用Token防止重复提交的例子:
// 生成Token
$token = uniqid();
// 将Token存储在会话或隐藏字段中
$_SESSION['token'] = $token;
// 在表单中添加隐藏字段
echo '<input type="hidden" name="token" value="' . $token . '">';
// 处理表单提交时的逻辑
if ($_POST['token'] === $_SESSION['token']) {
// 进行数据库插入等操作
// 清除Token
unset($_SESSION['token']);
} else {
// 验证失败,可能是重复提交
// 给出提示或做其他处理
}通过以上方法之一,可以有效地防止连续点击提交按钮导致的重复提交问题。
