Как сделать одноразовые сообщения в сессии?
06.11.2017 09:01:55 am
Часто требуется использовать на сайте всевозможные формы для заполнения их пользователями. И многие начинающие php-программисты не могут найти выход из такой ситуации:
Например, пользователь заполнил форму, отправил её. Данные успешно записались с базу и на экран вывелось сообщение об успехе. В принципе всё хорошо. Но если мы обновим страницу, то данные повторно запишутся в базу.
Не все быстро смогут справиться с решением этой проблемы. Но я предлагаю решение.
Вот такой простой класс:
В чём же суть? А суть в том, что нужно перед выводом сообщения производить переадресацию назад, на форму, с которой пришли данные. При этом запомнив сообщение, какое нужно вывести для пользователя.
Как это работает? Например, Вы успешно записали данные в базу и хотите вывести сообщение "Ваша запись успешно добавлена в базу!". С помощью этого класса сделать такое очень просто:
А перед формой отправки добавьте следующий код:
Вот и всё. У нас есть инструмент для вывода одноразовых сообщений. После вывода это сообщение удалится.
Например, пользователь заполнил форму, отправил её. Данные успешно записались с базу и на экран вывелось сообщение об успехе. В принципе всё хорошо. Но если мы обновим страницу, то данные повторно запишутся в базу.
Не все быстро смогут справиться с решением этой проблемы. Но я предлагаю решение.
Вот такой простой класс:
class Session{
/**
*
* @var Ключ сессии, в которой будут содержаться одноразованые сообщения
*
*/
private static $key = 'flash';
/**
* Для записи и получения одноразового сообщения из сессии
* @param string/integer $key
* @param mixed $value
*
* @return значение при получении, void при установке
*/
public static function flash( $key, $value=null ){
# Если значение не указано
if( is_null( $value ) ){
# Если такой ключ в сессии есть
if( isset( $_SESSION[self::$key][$key] ) ){
# Получаем значение
$value = $_SESSION[self::$key][$key];
# Уничтожаем значение сессии
unset( $_SESSION[self::$key][$key] );
# Возвращаем значение
return $value;
}
# По умолчанию
return false;
}
# Записываем значение в сессию
$_SESSION[self::$key][$key] = $value;
}
}
В чём же суть? А суть в том, что нужно перед выводом сообщения производить переадресацию назад, на форму, с которой пришли данные. При этом запомнив сообщение, какое нужно вывести для пользователя.
Как это работает? Например, Вы успешно записали данные в базу и хотите вывести сообщение "Ваша запись успешно добавлена в базу!". С помощью этого класса сделать такое очень просто:
# Записываем сообщение
Session::flash('success', 'Ваша запись успешно добавлена в базу!');
# Перенаправляем назад
header('Location: ' . $_SERVER['HTTP_REFERER']);
А перед формой отправки добавьте следующий код:
<?php echo Session::flash('success') ?>
Вот и всё. У нас есть инструмент для вывода одноразовых сообщений. После вывода это сообщение удалится.
- Жалоба