微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法区分页面刷新和按下提交按钮?

如何解决有没有办法区分页面刷新和按下提交按钮?

我有一个表单,当使用按钮提交时,它会将一个项目添加sql 数据库中。但是,问题是如果我在提交后刷新页面,它会向该数据库添加一个相同的项目。有什么方法可以判断用户何时按下按钮以及何时刷新页面?我知道我可以检查每个条目以查看它是否与已经提交的条目相同,但是我在其他程序中已经出现了类似的问题,如果我不必每次都创建一个新的解决方法,我将不胜感激.

参考代码

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

解决方法

尝试确定页面是否正在刷新并不是解决此问题的方法。您需要做的是阻止浏览器重新提交相同的表单提交。

Post/Redirect/Get pattern 解决了这个问题。基本上,在处理表单后,您希望使用 HTTP 303 重定向将用户重定向到您希望他们看到的页面。这会告诉浏览器替换浏览器历史记录中的表单页面,从而无法重新提交表单。

以下是您的代码中的样子:

<input type="text" name="var2" required>
<input type="text" name="var3" required>
<input type="submit" name="Submit" value="Submit">
</form>
<?php
if($_POST && isset($_POST['Submit'])) {
    $conn = mysqli_connect("localhost","root",""); 
    mysqli_select_db ($conn,'database'); 
    $var1 =$_POST['var1'];
    $var2 = $_POST['var2'];
    $var3 = $_POST['var3'];
    $sql = "INSERT into database (var1,var2,var3) VALUES ('$var1','$var2','$var3')";
    if ($result = mysqli_query($conn,$sql)) { 
        header('Location: thankyou.php',true,303);
        exit;
    }
}

仅供参考,请阅读SQL injection。不要使用字符串连接构建查询,而是使用 prepared statementsbound parameters。请参阅 this pagethis post 以获取一些很好的示例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。