【发布时间】:2019-02-15 23:30:10
【问题描述】:
已解决 | 更新: 由于找到解决方案并不容易,我将答案贴在下面。希望这将帮助其他人在 stackoverflow 上更轻松地找到解决方案。
我有自己的函数来设置和显示消息。这些消息存储在会话中。我想要实现的是在提交表单后只显示一次消息。除非我使用 header() 函数重新加载页面或重定向到另一个页面,否则它会起作用。
我在标题顶部使用ob_start() 和session_start()。所以这两个一直都在。
我的消息是由下面的函数设置的。它创建成功或危险类型的消息并将其存储在会话变量中。
protected function setMsg($text, $type) {
if($type == 1) {
$_SESSION["message"] = '<div class="alert green"><p>'.$text.'</p></div>';
} elseif($type == 0) {
$_SESSION["message"] = '<div class="alert red"><p>'.$text.'</p></div>';
}
}
另一个函数只显示一次消息,然后取消设置。
public function showMsg() {
if(isset($_SESSION["message"]) && !empty($_SESSION["message"])) {
echo $_SESSION["message"];
unset($_SESSION["message"]);
}
}
这是我的表单提交代码的最后一段:
$this->setMsg("User has been created", 1);
header("Location: users_list.php");
如果我不使用header() 函数,那也没关系。但我必须使用它。
消息函数在标头中调用,但在所有其他函数的下方:
<?php $data->showMsg(); ?>
因此,页面似乎以某种方式被重定向了两次。第一次取消设置消息后,第二次刷新后我看不到它。所以我根本看不到。
我做错的可能性更大?
【问题讨论】:
-
在发帖stackoverflow.com/questions/17242346/…之前请始终搜索解决方案