我需要插入所有与post一起发送的变量,它们是每个代表用户的复选框。
如果我使用GET,将会得到如下信息:
?19=on&25=on&30=on
我需要在数据库中插入变量。
如何获取所有通过POST发送的变量?作为用逗号分隔的数组或值或其他东西?
Answers:
该变量$_POST
将自动填充。
尝试var_dump($_POST);
查看内容。
您可以像这样访问各个值: echo $_POST["name"];
当然,这假设您的表单使用的是典型的表单编码(即 enctype=”multipart/form-data”
如果您的帖子数据采用其他格式(例如JSON或XML),则可以执行以下操作:
$post = file_get_contents('php://input');
并且$post
将包含原始数据。
假设您使用的是标准$_POST
变量,则可以测试是否选中了以下复选框:
if(isset($_POST['myCheckbox']) && $_POST['myCheckbox'] == 'Yes')
{
...
}
如果您有一系列复选框(例如
<form action="myscript.php" method="post">
<input type="checkbox" name="myCheckbox[]" value="A" />val1<br />
<input type="checkbox" name="myCheckbox[]" value="B" />val2<br />
<input type="checkbox" name="myCheckbox[]" value="C" />val3<br />
<input type="checkbox" name="myCheckbox[]" value="D" />val4<br />
<input type="checkbox" name="myCheckbox[]" value="E" />val5
<input type="submit" name="Submit" value="Submit" />
</form>
[ ]
复选框名称中的using表示选定的值将由PHP脚本作为数组访问。在这种情况下,$_POST['myCheckbox']
将不会返回单个字符串,而是将返回一个包含所有选中复选框的值的数组。
例如,如果我选中所有框,$_POST['myCheckbox']
则将是一个包含以下内容的数组:{A, B, C, D, E}
。这是有关如何检索值数组并显示它们的示例:
$myboxes = $_POST['myCheckbox'];
if(empty($myboxes))
{
echo("You didn't select any boxes.");
}
else
{
$i = count($myboxes);
echo("You selected $i box(es): <br>");
for($j = 0; $j < $i; $j++)
{
echo $myboxes[$j] . "<br>";
}
}
它已被弃用,不希望直接访问superglobals(因为我认为PHP 5.5?)
每个现代的IDE都会告诉您:
不要直接访问Superglobals。使用一些过滤器功能(例如
filter_input
)
对于我们的解决方案,要获取所有请求参数,我们必须使用方法 filter_input_array
要从输入法获取所有参数,请使用以下命令:
$myGetArgs = filter_input_array(INPUT_GET);
$myPostArgs = filter_input_array(INPUT_POST);
$myServerArgs = filter_input_array(INPUT_SERVER);
$myCookieArgs = filter_input_array(INPUT_COOKIE);
...
现在,您可以使用它var_dump
或您foreach
-Loops
不起作用的是使用此方法访问$ _REQUEST Superglobal。它始终返回NULL
,这是正确的。
如果需要获取所有Input参数,并通过不同的方法进行转换,则只需像以下方法中那样将它们合并:
function askForPostAndGetParams(){
return array_merge (
filter_input_array(INPUT_POST),
filter_input_array(INPUT_GET)
);
}
编辑:此方法的扩展版本(未设置请求方法之一时,也可以使用):
function askForRequestedArguments(){
$getArray = ($tmp = filter_input_array(INPUT_GET)) ? $tmp : Array();
$postArray = ($tmp = filter_input_array(INPUT_POST)) ? $tmp : Array();
$allRequests = array_merge($getArray, $postArray);
return $allRequests;
}
为什么不这样,这很容易:
extract($_POST);
使用这个你可以获得所有发布变量
print_r($_POST)