在重定向后的页面上显示通知


Displaying a notification on page after redirect

我有一个页面,上面有一个表单。

如果表单已提交,我将重定向到该页面。

我想在页面上显示数据保存的通知。

我正在寻找一种干净的方式来知道我必须显示通知。

首先我想到在url中添加一些东西:

/page?notify=1

但是我不喜欢改变URL。

然后我想在重定向之前设置一个会话。

在页面上,我检查会话是否设置,如果是,显示通知并取消设置。

这是一种可以接受的方法吗?或者是否有更好/更干净的方法?

我个人认为?notify=是完全可以接受的。您不会让蜘蛛爬行该页面,因为它只是一个确认通知,您不需要担心页面被索引。当你不在搜索引擎优化领域时,不要害怕查询字符串——只要看看Amazon.com:)

最终归结为代码的可重用性和实现的努力。

会话就可以了。一个你立即删除的cookie会更干净。因为会话id通常是一个比这个更大的cookie,并且占用服务器的存储空间。

setcookie('notify',1,time()+60); // Expire in one minute. Redirect should be faster.

然后在你的页面上他们被重定向到:

if(isset($_COOKIE['notify']) && $_COOKIE['notify'] == 1){
    // Notification output
    setcookie('notify', '', time()-1);
}

另一个选项是将用户重定向到/page/notify,并使用您的.htaccess与Rewrite Mod将其重写为/page?notify。

类似:

RewriteRule ^(.*)/notify/?$ $1?notify=1

既然你有一个表单,也许你也有一个提交按钮。您可以像这样检查表单是否已提交:

<?php
    if(isset($_POST['go'])) {
        // The form has been submitted.
        echo("Saved!");
    }
?>
<form method = 'post' action = ''>
    <input type = 'submit' id = 'go' name = 'go' value = 'Submit'/>
</form>

编辑

既然那不起作用…我通常将会话变量保存为数组(我称之为"errors",但我将其用于一般输出)。它是一个数组,因为它可以保存多个消息,然后在每个页面显示时,我将数组中的内容转储到我想要显示这些消息的任何地方。这在我的多个项目中都很有效,对我来说,这似乎是一种非常好的存储发送给用户的消息的方法

session_start();
$_SESSION['errors'] = array();
...
array_push($_SESSION['errors'], "<span style = 'color:green;'>Success!</span>");
header("Location: somepage.php");

然后显示…

if(isset($_SESSION['errors']) && count($_SESSION['errors']) > 0) {
    foreach($_SESSION['errors'] as $k => $v)
        echo($v . "<br/>");
    unset($_SESSION['errors']);
}

first_page.php

$_SESSION['notify'] = 9;

second_page.php

if($_SESSION['notify'] > 0){
     notify(9);
     $_SESSION['notify'] = 0;
}

您可以像这样在表单中添加一个隐藏字段:

<input type="hidden" name="action" value="submit" />

当页面重新加载时,你可以这样做:

if($_POST['action'] == "submit"){
  // show that data was saved
}

我的意思是,理想情况下你会想要确保数据实际上被保存,但我不太了解你的实现