За последние 24 часа нас посетили 55719 программистов и 1792 робота. Сейчас ищут 868 программистов ...

Можно ли изменить адресную строку при обработке GET-запроса

Тема в разделе "PHP для новичков", создана пользователем copter, 1 янв 2009.

  1. copter

    copter Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    6
    Симпатии:
    0
    Мой скрипт должен выполнить некое преобразование файлов.
    Параметры преобразования я отправляю через GET-запрос.
    В результате пользователь видит сообщение о том что всё Ok и некие результаты работы скрипта.
    Адресная строка при этом меняется на подобие http://localhost/admin.php?part=a&act=2
    А хотелось бы чтобы пользователь увидел изначальный адрес http://localhost/admin.php?part=a
    Это нужно чтобы избежать повторного выполнения скрипта при обновлении страницы.

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

    Как можно поступить в этой ситуации.
     
  2. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    выполнить скрипт а в выводе сделать только:
    PHP:
    1. header("Location: [url=http://localhost/admin.php?part=a]http://localhost/admin.php?part=a[/url]");
     
  3. copter

    copter Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    6
    Симпатии:
    0
    Проверил.
    При этом, как я понимаю происходит редирект.
    В результате пользователь видет исходную страницу без уведомления о результате выполнения скрипта.

    Вот лог FireFox Live HTTP headers:
     
  4. Для уведомления после редиректа просто в сессию положи флаг, типа update_success = true, а в скрипте вывода проверяй наличие этого флага.
     
  5. copter

    copter Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    6
    Симпатии:
    0
    :) точно

    Ещё два момента, по крайней мере, надо уяснить:

    1. Похоже, нужна какая-то логика чтобы ID сессии передать

    2. Код 302 менять не надо?

     
  6. 1. SID передается в куках, как правило. Если хочешь передавать в заголовке тоже, можешь получить идентификатор сессии или функцией session_id() или из константы SID и присоединить ее к строке с заголовком.
    2. Ну, тут на твое усмотрение. Можешь для красоты поменять на 201 или 202, но обычно браузеру безразличен код редиректа, если ты конечно не делаешь какой нить REST-сервис, где клиентом может выступать не только браузер.
     
  7. copter

    copter Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    6
    Симпатии:
    0
    Спасибо за подсказки, теперь сделаю.