@codemania

Как правильно отобразить сообщение на странице?

Вопрос о right way скорее чем просто о решении задачи.
Юзер сайта заполняет форму, отправляет, после обработки формы php он сразу редиректится на страницу результата что бы была невозможной случайная повторная отправка формы (при нажатии F5).
Как правильно отобразить сообщение об удаче или неудаче?
1) в случае редиректа пользователь отправляется на другую страницу и отправить что-то вслед можно только GET или POST, первое не красиво, а второе это та же форма
2) Можно сохранять сообщение в сессию и на каждой странице проверять есть ли в сессии сообщения для отображения
3) По максимум отправлять всё AJAX'от и показывать результат тут же около формы. Не всегда возможно.
4) ... ?
  • Вопрос задан
  • 159 просмотров
Решения вопроса 4
@backender_ru
https://backender.ru/
Я для этих целей всегда следую пункту 3. Все отправляю аяксом, пользователю удобно, результат виден моментально.
Ответ написан
Комментировать
@k2lhu
Всё таки неплохо было бы сделать валидацию первичную на клиенте, и только после ее прохождения позволить клиенту отправить данные, а уже после оправки - валидируем еще раз, если неудача - то клиенту снова вернуть форму, только необходимо очистить и пометить поля заполненные с ошибками, а остальные оставить заполненными.
Ответ написан
oxyberg
@oxyberg
Продуктовый дизайнер ВКонтакте
Обычно это решается со помощью сообщений в сессии. При отправке формы в контроллере генерируется сообщение и записывается в сессию, а затем, на странице результата это сообщение выводится. (Как минимум, так делают в Ларавеле.)
Ответ написан
KorniloFF
@KorniloFF
Работаю по font-end / JS
ИМХО, самый технологичный путь - использование Ajax.
Тогда можно сохранять прямо в клиенте идентификатор отправленной формы, скажем, в куках, и предотвращать повторную отправку, проверяя его наличие. Всю валидацию формы можно проходить яваскриптом перед отправкой, что снимет часть нагрузки с сервера и оставит ему лишь проверку каптчи и парсинг полученных данных.

Почему Ajax не всегда возможен? Мобильные броузеры уже все поддерживают ES-5, а его вполне достаточно для Ajax-запроса. Вы не любите jQuery? Вы просто не умеете его готовить (С). На самом деле, я его тоже терпеть не могу. Но вполне несложно написать кроссброузерный объект, полностью реализующий все, что нужно для асинхронки. Если нужно, могу помочь. Просто я использую свою библиотеку, синтаксис которой местами не очень понятен остальным.

Справедливости ради, нужно сказать что 1 путь - это хорошая олдскульная практика. Можно его немного доработать, обнуляя поля формы, и тогда повторная отправка данных будет невозможна.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы