Loading...
PHP/MySQL | Возвращаясь очередной раз к вопросу
Есть ли всё-таки нормальный способ избежать повторной отправки запросов по F5 без header?

То есть обработать страницу сверху вниз один раз и забыть про запросы.

unset($_POST) не пашет, массив пустой, но по F5 происходит отправка неизвестно чего-то и выводится сообщение, что мы пытаемся отправить повторно запросы

Есть ли фиксы нормальные, чтобы не долбить страницу редиректами на саму себя по REQUEST_URI и не использовать ob_start() при повторной отправке заголовков, установке сессий и кукисов?
________
посл. ред. 17.05.2017 в 17:00; всего 4 раз(а); by Вилы_Выкидные
Код должен быть конструктивным. Отправка заголовков - очень сильная штука. Главный фикс - использовать их правильно.
"не использовать ob_start()" - прямое решение - отказаться от процедурного стиля и перейти на разделение PHP кода от HTML, тогда таких вопросов не возникнет.
Ну а вообще на вопрос по теме - нет, единственный способ - перенаправить пользователя по http-заголовку, т.е. использовать header()
Dizzy221 (17.05.2017 в 17:18)
Код должен быть конструктивным. Отправка заголовков - очень сильная штука. Главный фикс - использовать их правильно.
"не использовать ob_start()" - прямое решение - отказаться от процедурного стиля и перейти на разделение PHP кода от HTML, тогда таких вопросов не возникнет.
Ну а вообще на вопрос по теме - нет, единственный способ - перенаправить пользователя по http-заголовку, т.е. использовать header()


схема сайта

инклуд системника

исполняемый код, принимающий запросы

инклуд заголовков

разметка страницы, вывод данных

Результаты:

при обновлении страницы браузером получаем сообщение о попытке повторной отправки запросов, даже если используем после обработки unset($_POST) - не понятно, что отправляется, так как массив пустой .45.

при использовании REQUEST_URI в момент установки сессий или кукисов получаем ошибку повторной отправки заголовков - не понятно, что отправляется, если исполняемый код находится до вывода заголовков :-)

при использовании ob_start() + REQUEST_URI проблемЫ исчезаЮт

Почему нельзя использовать ob_start() + ob_clean(), если такой функционал предусмотрен?

Кукисы и сессии проявляются после перезагрузки страницы, то есть получается редиректа на саму себя не избежать при их использовании.

Какой можно сделать вывод? Использовать отправку запросов в отдельный модуль, не подключенный к странице вывода с редиректом с него обратно?
________
посл. ред. 17.05.2017 в 18:03; всего 2 раз(а); by Вилы_Выкидные
Вилы_Выкидные, после отправки формы, если обработчик ее успешно принял, необходимо выполнить редирект на нужную страницу.
unset($_POST) - совершенно бесполезен.
Это глобальная HTTP переменная, а не просто массив с данными. Именно поэтому для ее очищения нужно отправить другой заголовок http, с помощью редиректа
Dizzy221 (17.05.2017 в 18:03)
Вилы_Выкидные, после отправки формы, если обработчик ее успешно принял, необходимо выполнить редирект на нужную страницу.
unset($_POST) - совершенно бесполезен.
Это глобальная HTTP переменная, а не просто массив с данными. Именно поэтому для ее очищения нужно отправить другой заголовок http, с помощью редиректа


нужной страницей является исходная страница
Вилы_Выкидные, header("Location: ".$_SERVER["REQUEST_URI"]);
И это стандартное и элегантное решение, которое можно и нужно использовать
________
посл. ред. 17.05.2017 в 18:08; всего 1 раз(а); by Dizzy221
Вилы_Выкидные (17.05.2017 в 18:05)
Dizzy221 (17.05.2017 в 18:03)
Вилы_Выкидные, после отправки формы, если обработчик ее успешно принял, необходимо выполнить редирект на нужную страницу.
unset($_POST) - совершенно бесполезен.
Это глобальная HTTP переменная, а не просто массив с данными. Именно поэтому для ее очищения нужно отправить другой заголовок http, с помощью редиректа


нужной страницей является исходная страница

без редиректа никак, браузер всегда будет повторно отправлять
Dizzy221 (17.05.2017 в 18:08)
Вилы_Выкидные, header("Location: ".$_SERVER["REQUEST_URI"]);


будет повторная отправка заголовков при установке сессий или кукисов .гы.

вы не читаете тему
shadrvlad (17.05.2017 в 18:08)
Вилы_Выкидные (17.05.2017 в 18:05)
Dizzy221 (17.05.2017 в 18:03)
Вилы_Выкидные, после отправки формы, если обработчик ее успешно принял, необходимо выполнить редирект на нужную страницу.
unset($_POST) - совершенно бесполезен.
Это глобальная HTTP переменная, а не просто массив с данными. Именно поэтому для ее очищения нужно отправить другой заголовок http, с помощью редиректа


нужной страницей является исходная страница

без редиректа никак, браузер всегда будет повторно отправлять


Ну что, тогда юзаем ob_start() - ob_clean() ???
Вилы_Выкидные, нафига? почему такие сложности то? что не так с сессиями?

Изображение

------
46343_20170517201433.png (7.2 Kb)
Скачиваний: 84
Онлайн: 0
Время:
Gen. 0.107
(c) Bym.Guru 2010-2025