Правильное завершение работы с формой

nigirma

Новичок
Есть у меня скрипт отправки почты (одним файлом методом POST).
После заполнения полей формы и нажатия кнопки "Отправить письмо" происходит обработка полей формы на ошибки.
Если есть ошибки - показывается форма со вставленными в value значениями, которые вводил пользователь.
Если нет ошибок - происходит отправка письма и вывод сообщения пользователю "Сообщение отправлено".

Вроде все нормально, но если выполнить обновление страницы (F5), то происходит повторная отправка того же самого письма - оно и правильно, пост данные те же и проверку прошли.

Как тут быть? Как исключить данную возможность?

Наверно, самым верным способом будет после отправки письма сделать редирект 302 на страницу типа /feedback/ok/ и уже после этого выдать сообщение пользователю "Сообщение отправлено".
Как еще можно?
 

craz

Нестандартное звание
в скрипте обработчике формы выставить куку или сессию пользователю что форма отправлена.
 

zerkms

TDD infected
Команда форума
craz
Какой бред.

nigirma
редирект + гугл: session flash messages
 

zerkms

TDD infected
Команда форума
craz
Потому что не нужна нам информация, что форма была отправлена. Просто редиректь и всё.
 
  • Like
Реакции: craz

Духовность™

Продвинутый новичок
по факту чего-либо: пишем сообщение в таблицу сообщений, получаем ID. Делаем redirect вида /page/?notif=123, где notif - ID сообщения в базе сообщений. На странице page вытаскиваем из базы сообщения с id = 123, удаляем его из базы и рисуем на странице. Просто и элементарно. Никаких кук и сессий. При этом страница page может быть абсолютно любой, главное обеспечить на этой странице возможность получить из базы notif и вывести его.
 

craz

Нестандартное звание
по факту чего-либо: пишем сообщение в таблицу сообщений, получаем ID. Делаем redirect вида /page/?notif=123, где notif - ID сообщения в базе сообщений. На странице page вытаскиваем из базы сообщения с id = 123, удаляем его из базы и рисуем на странице. Просто и элементарно. Никаких кук и сессий.
хых вот ты ржать)))) только ты забыл написать P.s. шутка
 

shelestov

я тут часто
редирект + гугл: session flash messages
Поддерживаю, но при условии разработки с использованием фреймворка, либо писать свой функционал flash-ев.
Для одной формы это не к чему. Прощ редиректнуть на саму себя с доп. параметром, например ?success=true и выдать сообщение, что оно отправлено.
 

Духовность™

Продвинутый новичок
простая отправка формы на почту должна по твоему дрочить базу? Ты просто сам подумай
Если нужно уведомление - да, надо дрочить базу. Вот результаты "дрочения" базы: http://phpclub.ru/talk/threads/Передача-данных-после-header-location.66110/page-3#post-587067

Отображает строки 0 - 1 (1 всего, запрос занял 0.0004 сек.)
- это называется "дрочить базу", ога
 

Духовность™

Продвинутый новичок
Какая бы форма не была, уведомление о результатах нужно ВСЕГДА давать. Это красиво, это информативно. Не надо писать программы в стиле 1999 года, когда при ошибке заполнения формы человеку приходилось все заново писать, а при отправке сообщения ни ответа, ни привета.

Для одной формы это не к чему. Прощ редиректнуть на саму себя с доп. параметром, например ?success=true и выдать сообщение, что оно отправлено.
Это говнокод. Создать flash message функционал - это 20 минут работы.
 

craz

Нестандартное звание
Какая бы форма не была, уведомление о результатах нужно ВСЕГДА давать. Это красиво, это информативно. Не надо писать программы в стиле 1999 года, когда при ошибке заполнения формы человеку приходилось все заново писать, а при отправке сообщения ни ответа, ни привета.

Это говнокод. Создать flash message функционал - это 20 минут работы.
но извини не видел я flash message функционал написанный через базу. нах никому в базе не нужны какие то события одного из 100 000 пользователей.
 
Сверху