Правильный редирект из обработчика или msgBox один раз

AntiBuger

Новичок
Приветствую коллеги!
Вот задался вопросом, какой из подходов выбрать.

Стоит тривиальная задача: на странице index.php есть форма, ее обрабатывает обработчик obr.php (все название документов даны для примера). Данные поступают из формы в обработчик и потом срабатывает переадресация обратно на index.php. Так вот, необходимо на странице index.php уведомить пользователя о том, операция прошла успешно или не успешно.

Вопрос: как бы Вы это решили?

Я ищу не решение, а оптимальное решение, потому что есть у меня 3 варианта это реализовать. Хотелось бы услышать мнение коллег, как сделаете это Вы.

Просьба! Не предлагать простые варианты типа:
Header("location:/?msg=Операция прошла успешно!");
А на странице index.php получать значение $_GET[msg] и показывать сообщение.


Так как при этом варианте надо изменять url через JS, чтобы если пользователь обновит страницу
"index.php?msg=Операция прошла успешно!" сообщение ему опять не показывалось.
 

AnrDaemon

Продвинутый новичок
Думаю, самый простой ответ - не делать переадресацию. Вообще не уходить с index.php.
 

ksnk

прохожий
как бы Вы это решили?
Хм... ajax'ом форму отправить на obr.php. По возвращенному результату выдать сообщение, выругаться или еще раз вывести форму. Не?
Если ajax почему-то не подходит - в сессию загрузить результат работы obr, при выводе index.php по location, по результату в сессии сформировать отдельное окошко с нужным ругательством.
 

AntiBuger

Новичок
Спасибо всем. Я думаю многим информация будет полезна. Я думаю, что господин c0dex наиболее правильно ответил на вопрос.

Для потомков.

Пишем в начале строки session_start();

Далее подключаем код (лучше вынести в отдельный файл).

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;
        }
    }

В файле обработчике в конце пишем:
PHP:
Session::flash('success', 'Данные сохранены!');
Header("location:$_SERVER[HTTP_REFERER]");   
exit;

А в том месте (на той странице) где надо показать сообщение пишем:
PHP:
echo Session::flash('success');
 
Сверху