我有一个页面,上面有一个表单。
如果表单已提交,我将重定向到该页面。
我想在页面上显示数据保存的通知。
我正在寻找一种干净的方式来知道我必须显示通知。
首先我想到在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
}
我的意思是,理想情况下你会想要确保数据实际上被保存,但我不太了解你的实现