php教程

php避免重复提交内容的办法,点击两次提交两次怎么办?

php教程 51源码 2023-08-30 人阅读

最近发现我的网站的网站提交功能,会出现填写完成输入信息以后,点击提交的时候在等待处理数据的时候再点击一次提交,就会把相同的数据重复保存到数据库。虽然我在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表的唯一键或主键来防止数据库中的重复记录


在数据库中设置相应字段为唯一键或主键,以防止重复记录的插入。当重复的数据被提交时,将会触发数据库错误,可以通过捕获该错误来处理重复提交的情况。不过这一步需要确定之前该字段无重复值!


php避免重复提交内容的办法,点击两次提交两次怎么办?-第1张图片-51<a href=https://www.251code.com/code/ target=_blank class=infotextkey>源码</a>网


三、使用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 {
    // 验证失败,可能是重复提交
    // 给出提示或做其他处理
}


通过以上方法之一,可以有效地防止连续点击提交按钮导致的重复提交问题。


版权声明:文章搜集于网络,如有侵权请联系本站,转载请说明出处:https://www.51yma.cn/jiaocheng/php/1284.html
文章来源:文煞PHP笔记网-https://www.wensha.info/post/1302.html