我首先认为它位于$_POST
超级全局,但如果网址中包含值,则不是。
$_REQUEST
这样做并让我感到惊讶的是不包含cookie(引用http://php.net/manual/en/reserved.variables.request.php),后来我发现我显然使用的默认发行版php.ini文件不包含&#39 ; C'用于cookie(参考http://php.net/manual/en/ini.core.php#ini.request-order)。我不想使用$_REQUEST
,因为它不区分get请求,更改服务器和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
阵列( [get] =&gt; GET)
$ _ POST
阵列( [post] =&gt; POST)
$ _ COOKIE
阵列( [cookie] =&gt; COOKIE)
$ _ REQUEST
阵列( [get] =&gt;得到 [post] =&gt; POST)
答案 0 :(得分:0)
抱歉,您的问题有点不清楚。附加到URL的参数(正如您在开头提到的那样)是GET参数,因此它们包含在$_GET
超全局中。它们根本不是POST变量。那么你的问题是什么?您可以合并$_POST
和$_GET
,或者首选,检查两个位置中的所需参数。
你可以在这样的事情上投入无穷的时间,但方便的方法可能如下:
$param = isset($_GET['param']) ? $_GET['param']
: (isset($_POST['param']) ? $_POST['param']
: null);
这一行只是一个例子。它检索一个名为&#39; param&#39;的参数。来自超级全局$_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);
但请注意,这是一个非常有问题的架构。它通常会打开安全漏洞。
答案 1 :(得分:0)
您可以执行以下操作:
$ uVariables = array(&#34; GET&#34; =&gt; $ _GET,&#34; POST&#34; =&gt; $ _POST,&#34; COOKIES&#34; =&gt; $ _COOKIES, &#34; SESSION&#34; =&gt; $ _SESSION);
然后使用json_encode()进行数据库存储。如果您以后决定构建日志查看器,您可以使用json_decode()并将所有内容恢复到原始状态。