Браузер 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 написал(а):
После обработки данных подумывал делать так:
Это если пользователь ввёл всё верно. Если данные $_POST пришли не такие, какие ожидались, то переадресацию делать нельзя - нужно вывести сообщение об ошибке. Вот я поэтому чёт и не врублюсь, как грамотно обработать.
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. Проверяем данные, если ошибки, то выводим вместо формы текст с описанием ошибки, иначе переадресация на себя для сброса данных.
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;