如何解决有没有办法区分页面刷新和按下提交按钮?
我有一个表单,当使用按钮提交时,它会将一个项目添加到 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 statements 和 bound parameters。请参阅 this page 和 this post 以获取一些很好的示例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。