最近发现我的网站的网站提交功能,会出现填写完成输入信息以后,点击提交的时候在等待处理数据的时候再点击一次提交,就会把相同的数据重复保存到数据库。虽然我在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 { // 验证失败,可能是重复提交 // 给出提示或做其他处理 }
通过以上方法之一,可以有效地防止连续点击提交按钮导致的重复提交问题。