[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как грамотно обработать POST запрос?
yuriy
Привет!

Браузер Firefox 11.0, html-страница содержит форму с полями для ввода фамилии, имя, отчества и так далее. После заполнения формы клиент нажимает на кнопку, данные улетают на сервер, сервер возвращает ту же самую страницу с той же формой. Данные формы всегда обрабатываются по одному и тому же URL, параметр action формы пуст. Вопрос. Как сделать, чтобы

1) при нажатии кнопки "Обновить" в браузере, не появлялось окно с надписью:

"Чтобы отобразить эту страницу, Firefox должен отправить информацию, которая повторит любое ранее произведённое действие (например, запрос на поиск или онлайн-покупка)."

2) Если клиент ушёл со страницы с формой по другому URL, а затем нажал кнопку "Назад" в браузере, то появлялась страница с формой, а не надпись "Не удалось загрузить эту страницу.".

Спасибо!



Спустя 2 минуты, 56 секунд (21.03.2012 - 11:06) Ramzil_Nixon написал(а):
Цитата (yuriy @ 21.03.2012 - 08:03)
Привет!

Браузер Firefox 11.0, html-страница содержит форму с полями для ввода фамилии, имя, отчества и так далее. После заполнения формы клиент нажимает на кнопку, данные улетают на сервер, сервер возвращает ту же самую страницу с той же формой. Данные формы всегда обрабатываются по одному и тому же URL, параметр action формы пуст. Вопрос. Как сделать, чтобы

1) при нажатии кнопки "Обновить" в браузере, не появлялось окно с надписью:

"Чтобы отобразить эту страницу, Firefox должен отправить информацию, которая повторит любое ранее произведённое действие (например, запрос на поиск или онлайн-покупка)."

2) Если клиент ушёл со страницы с формой по другому URL, а затем нажал кнопку "Назад" в браузере, то появлялась страница с формой, а не надпись "Не удалось загрузить эту страницу.".

Спасибо!



Не совсем понял тебя..

Спустя 4 минуты, 17 секунд (21.03.2012 - 11:11) Visman написал(а):
После обработки данных делай переадресацию на себя, примерно так
header('Location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
exit();

Спустя 7 минут, 56 секунд (21.03.2012 - 11:19) yuriy написал(а):
После обработки данных подумывал делать так:


if (!empty($_POST)) {
unset($_POST);
header("HTTP/1.1 205 Reset Content");
header('Location: ' . $this->_register->getCurrentUrl());
}


Это если пользователь ввёл всё верно. Если данные $_POST пришли не такие, какие ожидались, то переадресацию делать нельзя - нужно вывести сообщение об ошибке. Вот я поэтому чёт и не врублюсь, как грамотно обработать.

Спустя 4 минуты, 42 секунды (21.03.2012 - 11:23) Visman написал(а):
1. Если есть $_POST, то проверяем данные (2), иначе выводи форму без данных.
2. Проверяем данные, если ошибки, то выводим вместо формы текст с описанием ошибки, иначе переадресация на себя для сброса данных.

Спустя 6 минут, 17 секунд (21.03.2012 - 11:29) yuriy написал(а):
Если точнее, то, если данные не верные, то выводим текст с описанием ошибки и форму с теми данными, которые верные. И при этом никуда не деться от проблем, которые были описаны мною в самом начале поста.

Спустя 3 минуты, 51 секунда (21.03.2012 - 11:33) Visman написал(а):
Можно попробовать извратиться.
Когда выводишь текст ошибки (и форму), то это ответ на запрос пост, отсюда и ошибка.
Если делать ту же переадресацию на себя, но передавать данные об ошибке и сами данные через сессию, то сообщение об ошибке и саму форму с данными уже будешь открывать не по запросу пост.
Возможно, тогда такое поведение браузера исчезнет.

Спустя 4 минуты, 59 секунд (21.03.2012 - 11:38) yuriy написал(а):
Ага. Спасибо большое. Я тоже думаю, что в сессию нужно пихнуть сиё дело, но решил спросить у форума, может ещё есть какие методы.


_____________
void x;
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.