PHP $ _REQUEST $ _GET или $ _POST - PullRequest
       29

PHP $ _REQUEST $ _GET или $ _POST

7 голосов
/ 10 августа 2011

Скажем, у меня есть форма:

<form action="form.php?redirect=false" method="post">
    <input type="hidden" name="redirect" value="true" />
    <input type="submit" />
</form>

В файле form.php:

var_dump($_GET['redirect']) // false
var_dump($_POST['redirect']) // true
var_dump($_REQUEST['redirect']) // true

Как получить параметр строки введенного запроса для переопределения значения $_POST, чтобы $_REQUEST['redirect'] будет = false?

Ответы [ 5 ]

11 голосов
/ 10 августа 2011

Если вы хотите изменить приоритет $_GET над $_POST в массиве $_REQUEST, измените директиву request_order в php.ini.

Значение по умолчанию:

request_order = "GP"

P обозначает POST, а G обозначает GET, а более поздние значения имеют приоритет, поэтому в этой конфигурации значение в строке запроса переопределит значение, переданное POST в массиве $_REQUEST,Если вы хотите, чтобы POST переопределял значения GET, просто переключите их так:

request_order = "PG"

Вам потребуется перезапустить веб-сервер / php, чтобы это вступило в силу.

(отредактировано дляиспользуйте более подходящий request_order , как предложил Брэд, вместо variable_order )

4 голосов
/ 10 августа 2011

См. Директиву request_order в PHP.ini.

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

2 голосов
/ 10 августа 2011

См. запрос порядка параметр PHP. Здесь вы можете указать, будет ли массив заполнять post, get, cookie или любую их комбинацию.

0 голосов
/ 10 августа 2011

Если вы имели в виду false в этой последней строке и хотите, чтобы $_REQUEST все еще имел данные из данных POST и GET и не хотите связываться с конфигурацией, используйте это:

$_REQUEST = array_merge($_POST, $_GET);
0 голосов
/ 10 августа 2011
$_REQUEST['redirect'] = $_POST['redirect'];

или

$_REQUEST['redirect'] = $_GET['redirect'];

в зависимости от того, что вы хотите

...