我正在创建一个表单并使用它来获取数据输入以通过php发送到MySQL数据库。如果某人在页面上点击刷新,Firefox会将最后一组信息重新发送到php页面,然后将其发送到数据库。反正有没有阻止这个?
答案 0 :(得分:6)
要解决该问题,您需要遵循以下Post/Redirect/Get pattern:)
发布/重定向/获取(PRG)是常见的 Web开发人员的设计模式 帮助避免某些重复的形式 提交并允许用户代理 使用书签更直观地表现 和刷新按钮。
答案 1 :(得分:5)
您需要重定向到同一页面:
$current_url = (empty($_SERVER['HTTPS']) ? "http://" : "https://") . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header ('Location: ' . $current_url);
exit ();
答案 2 :(得分:2)
通常的方法是使用重定向。
您收到请求,使用其中包含的数据加载数据库或其他任何内容,然后执行重定向(我认为应该使用303重定向为此,但我'听说很多人使用302s来避免某些浏览器故障。)
这样做的结果是重定向发生时没有发送POST数据,因此刷新不会导致重新发送并搞砸应用程序/数据库。
答案 3 :(得分:0)
如果您不喜欢上述任何一种并且正在使用JQUERY。您可以执行简单的加载或ajax函数将信息发送到脚本。
这将删除任何重复发送的机会,并且您不会重新加载页面。我最喜欢这种方法,它快速而简单。
您可以做的另一个解决方案是将表单发送到另一个页面,有点像这样:
<form action="chat_server.php" method="post">
Message: <input type="text" name="message" />
<input type="submit" />
</form>
在chat_server.php文件中,您可以执行数据所需的操作,最后执行
echo '<meta http-equiv="REFRESH" content="0; url=chat.php" />';
试一试,应该摆脱你的问题。
答案 4 :(得分:-1)
是。插入数据后,您执行重定向。
答案 5 :(得分:-1)
在隐藏输入中使用代码,此代码通过表格代码获取,如果代码发送将其从数据库中删除,并且未在表中设置的代码不接受查询