获取通过POST发送的所有variables?
我需要插入所有发送的variables,他们是每个代表一个用户的checkbox。
如果我使用GET,我得到这样的东西:
?19=on&25=on&30=on
我需要在数据库中插入variables。
我如何获得与POST发送的所有variables? 作为一个数组或值与昏迷或东西分开?
variables$_POST
自动填充。
试试var_dump($_POST);
看内容。
您可以像这样访问各个值: echo $_POST["name"];
这当然,假设你的表单正在使用典型的表单编码(即enctype=”multipart/form-data”
如果你的发布数据是另一种格式(例如JSON或XML,你可以做这样的事情:
$post = file_get_contents('php://input');
$post
将包含原始数据。
假设你正在使用标准的$_POST
variables,你可以testingcheckbox是否像这样被选中:
if(isset($_POST['myCheckbox']) && $_POST['myCheckbox'] == 'Yes') { ... }
如果你有一个checkbox(例如
<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>
在checkbox名称中使用[ ]
表示所选值将被PHP脚本作为数组访问。 在这种情况下, $_POST['myCheckbox']
不会返回一个单一的string,但会返回一个数组,其中包含所有被选中的checkbox的值。
例如,如果我检查了所有的框, $_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): "); for($j = 0; $j < $i; $j++) { echo($myboxes[$i] . " "); } }
你应该能够从$_POST
variables访问它们:
foreach ($_POST as $param_name => $param_val) { echo "Param: $param_name; Value: $param_val<br />\n"; }
那么,像$_POST
数组?
您可以使用http_build_query($_POST)
将它们重新获取到var=xxx&var2=yyy
string中。 或者只是print_r($_POST)
,看看有什么。
为什么不呢,这很容易:
extract($_POST);
使用这个你可以得到所有的postvariables
print_r($_POST)
它被弃用,不希望直接访问超全域(因为PHP 5.5我认为?)
每个现代的IDE都会告诉你:
不要直接访问Superglobals。 使用一些filterfunction(例如
filter_input
)
对于我们的解决scheme,要获取所有的请求参数,我们必须使用filter_input_array
方法
要从input法获得所有的参数,使用这个:
$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
使用它了
什么不行的是用这个方法访问$ _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; }