Здравствуйте! Помогите, пожалуйста, сделать перенаправление на страницу предыдущую предыдущей. Функцией header не получается. Она перенаправляет на конкретно заданную страницу. А id у страниц динамически изменяются. И требуется после формы регистрации вернуться не на эту же страницу или на главную, а именно на ту, с которой пользователь пошел регистрироваться. А это может быть и главная и любая другая.
Может в сессию записать счётчик, скажем с числом два, так как надо два перенаправления назад, вот возникла ситуация перенаправить, начинаем сессию или cookie, пишем count_back=2 потом выводим код на javascript который вернёт пользователя на одну страницу назад, главное до и после вывода этого кода с javascript ничего не выводить, потом если мы видим что count_back=2 мы перезаписываем на count_back=1 и выводим опять javascript код который вернёт на 1 страницу назад, дальше мы видим count_back=1 мы переписываем на count_back=0 и всё, дальше скрипт отработает и покажет нужную страницу. всё это бред, но что за задачу ты решаешь с возвратом на две страницы назад из истории?
@denis01, мне требуется реализация php, а не JavaScript. На любой странице пользователь нажал кнопку "регистрация" и попал на страницу с формой регистрации. Обработчик регистрации еще на другой странице. И вот на этой странице обработчика после успешной регистрации надо перенаправить пользователя на страницу, в которой он нажал "регистрация". $_SERVER['HTTP_REFERER']; не годится, т.к. перенаправляет на страницу с формой регистрации.
Попробуйте использовать суперглобалную массива $_SERVER['HTTP_REFERER'] 'HTTP_REFERER' Адрес страницы (если есть), которая привела браузер пользователя на эту страницу. Этот заголовок устанавливается веб-браузером пользователя. Не все браузеры устанавливают его и некоторые в качестве дополнительной возможности позволяют изменять содержимое заголовка HTTP_REFERER. Одним словом, в самом деле ему нельзя доверять. На странице регистрации PHP: <?php $last_url = $_SERVER['HTTP_REFERER']; ..... После успешного регистрации перенаправляешь его так: header("Location: ".$last_url); как то так
так бы сразу сказал бы! когда кто-то приходит на страницу регистрации, ты запиши его referer, в сессию, куки, в input hidden, как закончит регистрацию, то извлеки от туда ссылку и перенаправь хорошо что не принял в всерьёз ту инструкцию
. Но ведь эта переменная $last_url останется на другой странице (с кнопкой "регистрация") и поэтому будет недоступна на странице обработчика. . Я не опытный, поэтому не понял как $_SERVER['HTTP_REFERER'] записывается в сессию.
@Валерий Е получилось рефер в сессию например записать? Когда кто-то на страницу регистрации заходит.
@mkramer ещё можно добавить, что если prevPg не пустая, то не перезаписывать prevPg, а удалять этот ключ как регистрация будет закончена. @Валерий Е вот почти весь алгоритм готов.
Задача не решена. Кнопка "регистрация" находится в том числе и на странице http://blog/article.php?id=5. Эту страницу генерирует файл views/article.php. В самом начале файла прописал: PHP: session_start(); $_SESSION['prevPg'] = $_SERVER['HTTP_REFERER']; В файле обработчике прописал: PHP: header("Location: " . $_SESSION['prevPg']); exit; В результате после успешной регистрации выкидывает на страницу http://blog/index.php. Это главная страница и там нет кнопки "регистрация". А пользователь должен попасть на страницу http://blog/article.php?id=5, с которой пошел регистрироваться. Что я неправильно делаю?
Извини, поторопился. Ты прав. Поставил первый код на файл с формой р --- Добавлено --- Это условие добавить в файл обработчик? Удалять с помощью unset?
У меня так и есть. В файле обработчике обрабатываются ошибки регистрации и успешная регистрация. Я сейчас проверил. Если после ошибочной регистрации (и возврата обратно на страницу регистрации) ввожу правильные данные, то после успешной регистрации меня возвращает обратно на страницу регистрации. Что есть очень плохо. Не понимаю алгоритм исправления этого.
@Валерий Е вот пришёл запрос на страницу регистрации, ты проверяешь, если в prevPg пусто, значит это первый запрос, надо туда referer записать, потом, чтобы не перезаписать prevPg другими значениями, проверка на существование prevPg и делается, так как пользователь может обновить страницу регистрации или ввёл логин который уже есть, то опять будет запрос на prevPg и раз там уже есть запись, то ты не трогаешь содержимое prevPg, без проверки, ты бы перезаписывал prevPg при каждом чихе, и та страница с которой пришёл пользователь на регистрацию, давно бы потерялась. А вот когда ты успешно зарегистрировал пользователя, тогда уже можно удалять prevPg и перенаправлять на страницу с которой он пришёл на регистрацию.
Если я удаляю prevPg до того как перенаправляю функцией header на страницу с которой пользователь пришёл, то естественно туда уже не перенаправляет. Если я удаляю prevPg после функции header, то естественно prevPg не удаляется. Замкнуло --- Добавлено --- А с перезаписью все получилось. Я написал код PHP: if (empty($_SESSION['prevPg'])) { $_SESSION['prevPg'] = $_SERVER['HTTP_REFERER']; } и теперь после неуспешной и успешной регистрации перенаправляет на нужную страницу. Но.... всегда только на одну и ту же.