Я сначала подумал, что это было в супер-глобальном $_POST
, но это не значит, что значения включены в URL.
$_REQUEST
сделал это и удивил меня, не включая файлы cookie (ссылка http://php.net/manual/en/reserved.variables.request.php), и позже я обнаружил, что я, очевидно, использую файл php.ini по умолчанию который не содержит "C" для файлов cookie (ссылка http://php.net/manual/en/ini.core.php#ini.request-order). Однако я не хочу использовать $_REQUEST
, поскольку он не различает запрос на получение, а смена серверов и файлов php.ini может вызвать проблему безопасности.
Каков надлежащий способ доступа ко всем значениям почты?
РЕДАКТИРОВАТЬ. Я добавил часть $real_post
. Это правильный способ сделать это?
<?php
setcookie('cookie', 'COOKIE', time() + (86400 * 30), "/");
echo('$_GET<pre>'.print_r($_GET,1).'</pre>');
echo('$_POST<pre>'.print_r($_POST,1).'</pre>');
echo('$_COOKIE<pre>'.print_r($_COOKIE,1).'</pre>');
echo('$_REQUEST<pre>'.print_r($_REQUEST,1).'</pre>');
$real_post=($_SERVER['REQUEST_METHOD'] == 'POST')?array_merge($_GET,$_POST):array();
echo('$real_post<pre>'.print_r($real_post,1).'</pre>');
?>
<form action='postorget.php?get=GET' method='post'>
<input type='text' name='post' value='POST'>
<input type='submit'>
</form>
$ _GET
Массив ([get] => GET)
$ _POST
Массив ([post] => POST)
$ _COOKIE
Массив ([cookie] => COOKIE)
$ _REQUEST
Массив ([get] => GET [post] => POST)
Извините, ваш вопрос немного неясен. Параметры, добавленные к URL-адресу (как вы упоминаете в начале), являются параметрами GET, поэтому они содержатся в $_GET
файле $_GET
. Они просто не являются переменными POST. Так в чем ваш вопрос? Вы можете комбинировать $_POST
и $_GET
или, предпочтительно, проверять требуемый параметр в обоих местоположениях.
Вы можете вкладывать бесконечное время в такие вещи, но удобный подход может выглядеть так:
$param = isset($_GET['param']) ? $_GET['param']
: (isset($_POST['param']) ? $_POST['param']
: null);
Эта строка является всего лишь примером. Он извлекает параметр с именем "param" из суперглабильных значений $_GET
или $_POST
и сохраняет его в переменной $params
в локальной области. Таким образом, вы можете получить доступ к любому параметру, который вы ищете, независимо от того, отправлен ли он как GET или как параметр POST. Я часто обертываю это в функцию удобства, которая также заботится о проверке значения времени выполнения параметров.
Вы также можете обернуть этот пример в цикл итерации:
$params = [
'id' => null,
'key' => null,
'value' => null,
'remark' => null
]; // just as examples
foreach ($params as $key=>$null) {
// alternative 1: store the value of param $key in a single local scalar variable
// this results in local variables $id, $key, $value, $remark, just as examples
$$key = isset($_GET[$key]) ? $_GET[$key]
: (isset($_POST[$key]) ? $_POST[$key]
: null);
// alternative 2: store the value of param $key in a general but local params array
// this results in the above $params array, but filled with scalar values
$params[$key] = isset($_GET[$key]) ? $_GET[$key]
: (isset($_POST[$key]) ? $_POST[$key]
: null);
}
Это на самом деле два примера. Очевидно, вам нужно только одно из двух утверждений, показанных внутри цикла. Это зависит от того, предпочитаете ли вы массив параметров или отдельные локальные скалярные переменные.
Если вы ищете способ получить все параметры GET и POST, даже не зная, что это может быть, тогда вам нужно объединить два супер-глобала:
$params = array_merge($_GET, $_POST);
Обратите внимание, что это очень сомнительная архитектура. Обычно он открывает дыры в безопасности.
Вы могли бы сделать что-то вроде:
$ uVariables = array ("GET" => $ _GET, "POST" => $ _POST, "COOKIES" => $ _COOKIES, "SESSION" => $ _SESSION);
а затем используйте json_encode() для хранения базы данных. Если позже вы решите создать просмотрщик журналов, вы можете просто использовать json_decode() и вернуть все в исходное состояние.