【问题标题】:previously inserted value gets inserted automatically on page refresh先前插入的值在页面刷新时自动插入
【发布时间】:2019-01-30 15:50:18
【问题描述】:

查询可能是什么,或者通过 PHP 通过 html 表单在数据库中插入值的解决方案是什么,但每次我刷新页面时,先前插入的值都会再次插入?

if (isset($_POST["insert1"])) { 
    $inrtno = $_POST["inrouteno"];
    $instp = $_POST["instop"];

    if ($inrtno !=''||$instp !='') {
        $query = mysqli_query($datacon,"REPLACE INTO `stops`(`sn`, `routeno`, `stop`) VALUES ('NULL','$inrtno','$instp')");
        echo "<script type='text/javascript'>alert('Insertion Successful !!!')</script>";
    } else {
        echo "<p>Insertion Failed <br/> Some Fields are Blank....!!</p>";   
    }
}

【问题讨论】:

  • 大多数网络浏览器通常会在重新发布时发出警告,这可能会导致不一致。如果您的数据模型不允许重复,那么您应该在 MySQL 端设置约束。
  • 确实,即使删除它浏览器也会再次发送它。好吧,在插入帖子后将人重定向到同一页面应该可以解决它。

标签: php mysql html mysqli


【解决方案1】:

每当您刷新页面时,您都会重新提交 POST 变量,因此 PHP 仍会运行。此外,您的查询有SQL injection 的危险。考虑使用PDO

【讨论】:

    【解决方案2】:

    如前所述(根据我自己的理解),每次刷新页面时,都会再次发送请求。请注意我忘记了这一点,谢谢@ADyson。

    因此,解决方案是在插入后将用户重定向到相同的表单。

    假设这个文件是test.php,例如:

    if (isset($_POST["insert1"])) { 
        $inrtno = $_POST["inrouteno"];
        $instp = $_POST["instop"];
    
        if ($inrtno !=''||$instp !='') {
            $query = mysqli_query($datacon,"REPLACE INTO `stops`(`sn`, `routeno`, `stop`) VALUES ('NULL','$inrtno','$instp')");
            echo "<script type='text/javascript'>alert('Insertion Successful !!!')</script>";
    
            sleep('3');
            header('Location: /test.php');
            exit();
        } else {
            echo "<p>Insertion Failed <br/> Some Fields are Blank....!!</p>";   
        }
    }
    

    【讨论】:

      【解决方案3】:

      当您重新加载页面时,浏览器会要求您重新提交请求,因此值会再次传输。因此,在插入数据时设置一个条件,以检查记录是否已存在。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-10
        • 2011-04-13
        • 1970-01-01
        • 2010-10-19
        • 1970-01-01
        • 2012-08-17
        • 1970-01-01
        • 2013-10-20
        相关资源
        最近更新 更多