我有一个表单,用更新的数据重新加载页面:
<form name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
...
<input type="submit" name="Submit" value="Update data">
</form>
当页面更新时,我想显示一条消息“数据已更新”。 Referer 我有这样的东西,但我不记得了。
btw我也在使用:
if (isset($_POST['Submit'])) {
// prevent resending data
header("Location: " . $_SERVER['PHP_SELF']);
}
当用户单击后退按钮时,避免恼人的重发数据消息。它是否正确?
答案 0 :(得分:3)
如果您想确保提交表单,可以将变量存储在session中:
session_start(); // at top of page
...
if (isset($_POST['Submit'])) {
$_SESSION['form_submitted'] = true;
...
// prevent resending data
header("Location: " . $_SERVER['PHP_SELF']);
}
elseif ($_SESSION['form_submitted'])
{
...
}
不太可靠但也可能使用$_SERVER['HTTP_REFERER']
来检测访问者来自哪个页面。
答案 1 :(得分:2)
你可以这样做......
一个。重定向到自己,但有一条额外的信息 - “?updated = true”(如果PHP_SELF已包含查询字符串,则**&amp; ** updated = true)
if (isset($_POST['Submit'])) {
// prevent resending data
header("Location: " . $_SERVER['PHP_SELF'] . '?updated=true');
}
湾根据这些额外信息,显示文本。
if (isset($_GET['updated'])) {
echo "data updated";
}
...是的,您的重定向是防止重新发布的有效方法
答案 2 :(得分:1)
一种普遍接受的防止“重新发送数据”消息的方法是使用Post-Redirect-Get模式。
理想情况下,您不应该使用同一页面来显示结果并处理表单。我建议将“数据更新”移动到您在表单验证通过后重定向到的单独页面。
通过这种方式,浏览器上的“后退”按钮可以为用户提供直观的行为,而不会显示那些恼人的消息。
另外,从技术上讲,$ _SERVER“referer”值可以被欺骗,所以你不应该总是依赖它。
答案 3 :(得分:0)
你可以使用你正在使用的东西:
if (isset($_POST['submit'])) {
echo "data submitted";
}
为什么不这样做?