Действительно ли возможно использовать переменную сеанса, затем сбросить его непосредственно после?
Пример:
//====
//Process Form
if ($_POST['Submit']) {
$update = $userSettings->update($_POST);
//If there are form errors
if (!$update) {
//Load the errors into an array
$errors = $update[1];
} else {
//Set the session
$_SESSION['showUpdated'] = true;
//Redirect to this page
header("Location: http://www.mysite.com/settings");
}
}
//==================
if ($_SESSION['showUpdated']) {
echo "Settings Updated";
unset($_SESSION['showUpdated'];
}
Таким образом после того, как форма отправлена, при отсутствии ошибок:
В настоящее время проблема, если Вы сбрасываете переменную сеанса прямо после; Это - как будто Вы сбросили его перед, "если существует" часть.
Какие-либо решения? Это - даже лучший способ сделать это?
Большое спасибо!
Похоже, все должно работать. Убедитесь, что вы вызываете session_start (), прежде чем пытаться использовать сеанс, и всегда exit () или die () после заголовка перенаправления.
Я выполняю то, что вы делаете, немного иначе. Я сохраняю в сеансе элемент «сообщение». Я вставляю текст вроде «Ваши данные были сохранены», сообщения об ошибках и т. Д. Затем на каждой странице (фактически в классе шаблона страницы) я проверяю, есть ли $ _ SESSION ['message']
установлен и не пуст. Если там что-то есть, я показываю сообщение и устанавливаю значение пустой строки или null.
Я делаю это время от времени. У меня никогда не было проблем с этим. Но что я бы добавил к вашему, так это вызов функции exit()
после перенаправления заголовка.
EDIT: Причина для exit()
в том, что это предотвратит обработку любого дальнейшего кода и устранит возможность unset до того, как вы захотите проверить после редиректа.
Вызов заголовка без exit after продолжит выполнение страницы.
header("Location: http://www.mysite.com/settings");
exit;
Если использовать этот вариант, то страница будет закрыта, а переменная сессии не будет сброшена в том же вызове страницы.
Просто проверьте, существует ли он. Это безопасно делать до его определения и даст вам ответ после его определения.
if(!empty($_SESSION['showUpdated'])) {
Или вы можете просто установить false.
if ($_SESSION['showUpdated']) { echo "Settings Updated"; $_SESSION['showUpdated'] = false; }
И похоже, что вы используете меньшую версию PHP, чем 5.3, потому что в 5.3 вы получите уведомление при использовании неинициализированного значения. Поэтому вам следует использовать функцию isset:
if (isset($_SESSION['showUpdated']) && $_SESSION['showUpdated']) { echo "Settings Updated"; $_SESSION['showUpdated'] = false; }