$ _POST中的变量以字符串而不是数组的形式返回

时间:2011-05-11 00:40:41

标签: php

在我的表单中,我有名称为photoid []的字段,以便在发送时,当php访问它们时,它们将自动存在于数组中。

该脚本在几天前一直运行良好。而且据我所知,我没有更改ini文件中的任何php设置,也没有改变脚本。

当我尝试使用$_POST['photoid']检索数组时,它返回一个内容为'ARRAY'的字符串,但如果我使用$_REQUEST['photoid']访问它,则会将其正确地作为数组返回。是否有一些PHP设置会导致这种情况发生?正如我所说,我不记得最近改变任何PHP设置导致这个,但我可能会弄错,或者还有其他我错过的。

4 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。当我应该通过$_POST接收数组时,var_dump悲伤:'string(5) "Array"'。当您尝试在该阵列上使用trim()时,我发现会发生这种情况! 仔细检查您的代码,确保您没有使用$_POST进行任何其他操作!

答案 1 :(得分:2)

提升error_reporting级别以查找任何潜在来源。您最有可能在代码中使用它时出错了。但是你的$ _POST数组也可能被破坏了,但$ _REQUEST没有被触及。

// for example an escaping feature like this might bork it
$_POST = array_map("htmlentities", $_POST);
// your case looks like "strtoupper" even

要确定您的$ _POST数组是否真的只包含您期望数组的字符串,请在脚本开头执行以下命令:

var_dump($_POST);

以下进行比较:

var_dump(array_diff($_REQUEST, $_POST));

然后验证你是否真的在两个数组上使用foreach:

foreach ($_POST["photoid"] as $id) { print $id; }

答案 2 :(得分:0)

如果在字符串上下文中使用数组,那么您将获得“数组”。而是在数组上下文中使用它。

$arr = Array('foo', 42);

echo $arr."\n";
echo $arr[0]."\n";

Array
foo

答案 3 :(得分:0)

$ _ POST ['photoid']仍然是一个数组。只需将其分配给变量,然后将其视为数组。即:$array = $_POST['photoid']; echo $array[0];