За последние 24 часа нас посетили 34295 программистов и 1709 роботов. Сейчас ищут 806 программистов ...

Подружить алерт после отправки формы с header(Location))

Тема в разделе "PHP для новичков", создана пользователем bocharsky, 29 ноя 2014.

  1. bocharsky

    bocharsky Новичок

    С нами с:
    18 апр 2014
    Сообщения:
    77
    Симпатии:
    1
    Хочу после отправки формы вывести сообщение об успехе.
    Как известно, после отправки формы рекомендуется перегрузить страницу с помощью header ("location: _same_page_"). В противном случае при обновлении страницы браузер будет предлагать снова отправить форму, а если юзер согласится, получим дубли в БД.

    Также, как известно, PHP не сохраняет состояния между HTTP-запросами.
    Чтобы передать обновленной странице известие, что ей надо вывести алерт, я использую метод GET:

    Код (Text):
    1. header ("location: /same_page/?alert=seccess")
    А в начале страницы ставлю:
    Код (Text):
    1.  
    2. if (isset($_GET['alert']) and $_GET['alert'] == 'success')
    3. {
    4. // выводим алерт
    5. }
    Итого, схема кода в целом выглядит так:

    Код (Text):
    1.  
    2. if (isset($_GET['alert']) and $_GET['alert'] == 'success')
    3. {
    4. // выводим алерт
    5. }
    6.  
    7. if(isset($_POST['submit'])) {
    8.  
    9. // обрабатываем форму, отправляем данные в БД
    10.  
    11. header ("location: /same_page/?alert=seccess")
    12.  
    13. }
    После успешной обработки данных пользователь оказывается на странице /same_page/?alert=seccess", видит алерт. Но любые последующие обновления страницы само собой оставляют его на этой же странице с параметром alert , что снова воспроизводит плашку с информацией об успешном добавлении данных.

    Сломал себе голову, как можно это обойти - ничего не придумал.
    Подскажите, как решаются такие задачи.

    PS: Почему-то подумалось про JavaScript - но в нем, увы, не силен. Правда, если окажется, что без него никак - готов разбираться.

    Спасибо!
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вы делаете гет-запрос с параметром алерт. и видите алерт. при обновлении страницы браузер повторит гет-запрос и пользователь снова увидит алерт. тут жс совсем ни при чем. вам нужно просто подумать как сделать алерт уникальным.
     
  3. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Используй cookie которы можно удалить после показа алерта
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    В популярных фреймворках для одноразовых сообщений применяют т.н. flash messages. Это значения хранятся в сессии, после чтения удаляются — поэтому одноразовые. В принципе то же самое можно сделать в куке, на одну короткую строку куки хватит.