刷新页面将重新发送表单数据,是否可以防止这种情况? (PHP)

时间:2010-12-12 13:22:03

标签: php mysql forms

我正在创建一个表单并使用它来获取数据输入以通过php发送到MySQL数据库。如果某人在页面上点击刷新,Firefox会将最后一组信息重新发送到php页面,然后将其发送到数据库。反正有没有阻止这个?

6 个答案:

答案 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)

在隐藏输入中使用代码,此代码通过表格代码获取,如果代码发送将其从数据库中删除,并且未在表中设置的代码不接受查询