Скажем, у меня есть форма:
<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);