php установка строки запроса - PullRequest
1 голос
/ 27 марта 2012

У меня есть форма, которая отправляется на ту же страницу. Теперь, когда он будет отправлен и после его обработки мне понадобится уникальная строка запроса.

Так, например, пользователь вводит некоторую информацию, затем нажимает кнопку «Отправить», затем страница сохраняет информацию на сервере, а затем сервер выплевывает ее обратно с уникальной строкой запроса для этой информации.

Если я пытаюсь установить $_SERVER['QUERY_STRING'], он просто зависает. Есть ли другой способ сделать это?

Возможно ли перенаправление?

РЕДАКТИРОВАТЬ, я иду с mysite.com/, а действие формы на mysite.com/, и я хочу, чтобы браузер перешел на mysite.com/?blah

ОК. Я попытался поместить это в верхнюю часть моей страницы, но безуспешно

<?php
if ($_POST['data']) header('location: /?' . idFromDifferentFunction() );
?>

но он просто продолжает загружаться, я предполагаю, что он просто перенаправляет себя на смерть.

Надеюсь, теперь вы понимаете, что я пытаюсь сделать

Ответы [ 4 ]

3 голосов
/ 27 марта 2012

Скорее всего, ваш скрипт продолжает работать после кода, который говорит, что он должен перенаправить. Вам также нужно быть более точным с заголовком:

<?php
    if (isset($_POST['data'])) {
        header('Location: /?' . idFromDifferentFunction() );
        exit;
    }
?>

Если вы используете приведенный выше код, он завершит работу сценария, который выводит выходные данные, и браузер увидит перенаправление (обратите внимание на заглавную букву L в Location).

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

1 голос
/ 27 марта 2012

Не совсем понятно, что вы ищете, но я думаю, что вы хотите перейти на страницу с уникальным значением в строке запроса (бит после?) После завершения обработки.Должно ли это уникальное значение на самом деле ссылаться на что-то в системе (для вновь создаваемой записи в БД оно должно ссылаться на идентификатор новой записи) или оно просто должно быть уникальным?

Если это последнее, вы можете просто сгенерировать случайный уникальный идентификатор сделать следующее:

header ('location: /path/to/script?id=' . uniqid ());

Если это первое, заменить вызов uniqid назначение ключа базы данных.

Значения в $ _SERVER устанавливаются PHP во время выполнения и должны рассматриваться только для чтения.Изменение их значений не будет иметь никакого значимого эффекта.

0 голосов
/ 27 марта 2012

Писать в $ _SERVER бессмысленно. Это никак не влияет на клиентские браузеры. Если вы хотите изменить строку запроса, отображаемую в браузере клиента, вам придется использовать перенаправление 301/302 с помощью вызова header('Location: ...').

0 голосов
/ 27 марта 2012

$ _ SERVER ['QUERY_STRING'] является частью глобальных переменных PHP.Вы не должны устанавливать эти переменные, вместо этого установите это через сеанс и верните его после отправки.

Если вы пытаетесь перенаправить пользователя на определенный URL, тогда используйте:

header('Location: mysite.com/bla/bla');
...