2014-12-14 8 views
0

Я сначала подумал, что это было в супермаркете $_POST, но это не значит, что значения включены в URL.Как получить доступ ко всем значениям, отправленным на сервер PHP

$_REQUEST сделал это и удивило меня, не включая печенье (ссылка http://php.net/manual/en/reserved.variables.request.php), а позже я обнаружил, что я, очевидно, используя файл php.ini распределение по умолчанию, который не содержит «C» для печенья (референтных http://php.net/manual/en/ini.core.php#ini.request-order). Однако я не хочу использовать $_REQUEST, так как он не различает запрос на получение, а смена серверов и файлов php.ini может вызвать проблему безопасности.

Каков правильный способ доступа ко всем значениям почты?

EDIT. Я добавил часть $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

Array ( [получить] => GET)

$ _POST

Array ( [сообщение] => POST)

$ _COOKIE

Array ( [печенье] => COOKIE)

$ _REQUEST

Array ( [получить] => GET [сообщение] => POST)

+0

Мне любопытно - зачем вам это нужно? –

+0

@u_mulder Добавление функций ведения журнала и желание отслеживать все значения GET и POST, и результаты меня удивили. – user1032531

ответ

0

К сожалению, ваш вопрос является немного непонятно. Параметры, добавленные к URL-адресу (как вы упоминаете в начале), являются параметрами GET, поэтому они содержатся в суперкласне $_GET. Они просто не являются переменными POST. Так в чем ваш вопрос? Вы можете комбинировать $_POST и $_GET или, если хотите, проверьте нужный параметр в и на местах.

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

$param = isset($_GET['param']) ? $_GET['param'] 
           : (isset($_POST['param']) ? $_POST['param'] 
                 : null); 

Эта линия является только примером. Он извлекает параметр, называемый «param» из супер-глобалов или$_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); 

Однако обратите внимание что это очень сомнительная архитектура. Обычно он открывает дыры в безопасности.

+0

Я понимаю, что запрос GET и POST никогда не может произойти одновременно, поэтому я не верю, что они являются значениями GET, но действительно значения POST, хотя PHP показывает их как переменные GET. – user1032531

+0

Вы правы, что ваш запрос либо GET, либо POST, а не оба. Но это не означает, что вы не можете предоставить параметры GET _and_ POST. Может, не стоит, но можешь. – arkascha

+0

Может быть PUT/DELETE/OPTIONS, хотя – DarkBee

0

Вы могли бы сделать что-то вроде:

$ uVariables = массив ("GET" => $ _GET, "POST" => $ _POST, "COOKIES" => $ _COOKIES, "Сессия" => $ _SESSION);

, а затем использовать json_encode() для хранения базы данных. Если позже вы решите создать просмотрщик журналов, вы можете просто использовать json_decode() и вернуть все в исходное состояние.