PHP $ _REQUEST $ _GET или $ _POST

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

<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 ?

Если вы хотите изменить приоритет $_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 )

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

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

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

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

или

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

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

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

 $_REQUEST = array_merge($_POST, $_GET);