За последние 24 часа нас посетили 22555 программистов и 1011 роботов. Сейчас ищут 655 программистов ...

Редирект на 2 страницы назад

Тема в разделе "PHP для новичков", создана пользователем Валерий Е, 23 окт 2016.

  1. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Здравствуйте! Помогите, пожалуйста, сделать перенаправление на страницу предыдущую предыдущей. Функцией header не получается. Она перенаправляет на конкретно заданную страницу. А id у страниц динамически изменяются. И требуется после формы регистрации вернуться не на эту же страницу или на главную, а именно на ту, с которой пользователь пошел регистрироваться. А это может быть и главная и любая другая.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Может в сессию записать счётчик, скажем с числом два, так как надо два перенаправления назад,
    вот возникла ситуация перенаправить,
    начинаем сессию или cookie, пишем count_back=2
    потом выводим код на javascript который вернёт пользователя на одну страницу назад,
    главное до и после вывода этого кода с javascript ничего не выводить,
    потом если мы видим что count_back=2 мы перезаписываем на count_back=1 и выводим опять
    javascript код который вернёт на 1 страницу назад,
    дальше мы видим count_back=1 мы переписываем на count_back=0 и всё, дальше
    скрипт отработает и покажет нужную страницу.

    всё это бред, но что за задачу ты решаешь с возвратом на две страницы назад из истории?
     
  3. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    @denis01, мне требуется реализация php, а не JavaScript. На любой странице пользователь нажал кнопку "регистрация" и попал на страницу с формой регистрации. Обработчик регистрации еще на другой странице. И вот на этой странице обработчика после успешной регистрации надо перенаправить пользователя на страницу, в которой он нажал "регистрация".
    $_SERVER['HTTP_REFERER']; не годится, т.к. перенаправляет на страницу с формой регистрации.
     
    #3 Валерий Е, 23 окт 2016
    Последнее редактирование: 23 окт 2016
  4. Kairat

    Kairat Новичок

    С нами с:
    23 окт 2016
    Сообщения:
    7
    Симпатии:
    1
    Адрес:
    Алматы
    Попробуйте использовать суперглобалную массива $_SERVER['HTTP_REFERER']
    'HTTP_REFERER'
    Адрес страницы (если есть), которая привела браузер пользователя на эту страницу. Этот заголовок устанавливается веб-браузером пользователя. Не все браузеры устанавливают его и некоторые в качестве дополнительной возможности позволяют изменять содержимое заголовка HTTP_REFERER. Одним словом, в самом деле ему нельзя доверять.

    На странице регистрации
    PHP:
    1. <?php
    2.  
    3. $last_url  = $_SERVER['HTTP_REFERER'];
    4. .....
    5.  
    6. После успешного регистрации перенаправляешь его так:
    7.  
    8. header("Location: ".$last_url);
    как то так
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    так бы сразу сказал бы! когда кто-то приходит на страницу регистрации, ты запиши его referer, в сессию, куки, в input hidden, как закончит регистрацию, то извлеки от туда ссылку и перенаправь

    хорошо что не принял в всерьёз ту инструкцию :D
     
  6. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    . Но ведь эта переменная $last_url останется на другой странице (с кнопкой "регистрация") и поэтому будет недоступна на странице обработчика.
    . Я не опытный, поэтому не понял как $_SERVER['HTTP_REFERER'] записывается в сессию.
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
  8. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Да пока еще не решил
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    @Валерий Е получилось рефер в сессию например записать? Когда кто-то на страницу регистрации заходит.
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Также, как любые данные
    Код (PHP):
    1. $_SESSION["prevPg"] = $_SERVER['HTTP_REFERER'];
     
    Валерий Е нравится это.
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    @mkramer ещё можно добавить, что если prevPg не пустая, то не перезаписывать prevPg, а удалять этот ключ как регистрация будет закончена.
    @Валерий Е вот почти весь алгоритм готов.
     
    Валерий Е нравится это.
  12. Kairat

    Kairat Новичок

    С нами с:
    23 окт 2016
    Сообщения:
    7
    Симпатии:
    1
    Адрес:
    Алматы
    $_SESSION['last_url'] = $_SERVER['HTTP_REFERER'];

    Задача решен!
     
    Валерий Е нравится это.
  13. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Задача не решена.
    Кнопка "регистрация" находится в том числе и на странице http://blog/article.php?id=5. Эту страницу генерирует файл views/article.php. В самом начале файла прописал:
    PHP:
    1. $_SESSION['prevPg'] = $_SERVER['HTTP_REFERER'];
    В файле обработчике прописал:
    PHP:
    1. header("Location: " . $_SESSION['prevPg']);
    В результате после успешной регистрации выкидывает на страницу http://blog/index.php. Это главная страница и там нет кнопки "регистрация". А пользователь должен попасть на страницу http://blog/article.php?id=5, с которой пошел регистрироваться.
    Что я неправильно делаю?
     
  14. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Первый код - на регистрацию надо было ставить
     
    Валерий Е нравится это.
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Вот ещё дельный совет :) Стоит реализовать
     
  16. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Извини, поторопился. Ты прав:).
    Поставил первый код на файл с формой р
    --- Добавлено ---
    Это условие добавить в файл обработчик? Удалять с помощью unset?
     
    #16 Валерий Е, 24 окт 2016
    Последнее редактирование: 24 окт 2016
  17. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    На перезапись - туда, где записывается. Удаление - в файл обработчик, логично же
     
  18. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Это делается для уменьшения времени отклика страниц и снятия нагрузки на сервер?
     
  19. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Это делается, чтоб можно было, к примеру, обработку ошибок регистрации ставить на ту же страницу.
     
  20. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    У меня так и есть. В файле обработчике обрабатываются ошибки регистрации и успешная регистрация.
    Я сейчас проверил. Если после ошибочной регистрации (и возврата обратно на страницу регистрации) ввожу правильные данные, то после успешной регистрации меня возвращает обратно на страницу регистрации.
    Что есть очень плохо.
    Не понимаю алгоритм исправления этого.
     
  21. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    @Валерий Е вот пришёл запрос на страницу регистрации, ты проверяешь, если в prevPg пусто, значит это первый запрос, надо туда referer записать,
    потом, чтобы не перезаписать prevPg другими значениями, проверка на существование prevPg и делается, так как пользователь может обновить страницу регистрации или ввёл логин который уже есть, то опять будет запрос на prevPg и раз там уже есть запись, то ты не трогаешь содержимое prevPg, без проверки, ты бы перезаписывал prevPg при каждом чихе, и та страница с которой пришёл пользователь на регистрацию, давно бы потерялась.
    А вот когда ты успешно зарегистрировал пользователя, тогда уже можно удалять prevPg и перенаправлять на страницу с которой он пришёл на регистрацию.
     
  22. Валерий Е

    Валерий Е Активный пользователь

    С нами с:
    26 авг 2015
    Сообщения:
    67
    Симпатии:
    0
    Если я удаляю prevPg до того как перенаправляю функцией header на страницу с которой пользователь пришёл, то естественно туда уже не перенаправляет. Если я удаляю prevPg после функции header, то естественно prevPg не удаляется.
    Замкнуло:eek:
    --- Добавлено ---
    А с перезаписью все получилось. Я написал код
    PHP:
    1. if (empty($_SESSION['prevPg']))
    2. {
    3.     $_SESSION['prevPg'] = $_SERVER['HTTP_REFERER'];
    4. }
    и теперь после неуспешной и успешной регистрации перенаправляет на нужную страницу. Но.... всегда только на одну и ту же.