решено | ОБНОВЛЕНИЕ: Поскольку не было так легко найти решение, я выкладываю ответ ниже.Надеюсь, это поможет другим найти решение для более простого стека.
У меня есть свои функции для установки и отображения сообщений.Эти сообщения хранятся в сессии.Я хочу показать сообщение только один раз после отправки формы.И это работает, если я не использую функцию 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(); ?>
Итак, кажется, что страница каким-то образом перенаправляется дважды.После первого раза сообщение сбрасывается, а после второго обновления я просто не вижу его.Так что я вообще этого не вижу.
Что с большей вероятностью я делаю неправильно?