Php $\u POST刚刚返回';数组';作为字符串,我正在发布一个数组

Php $\u POST刚刚返回';数组';作为字符串,我正在发布一个数组,php,post,request,Php,Post,Request,这是我面临的一个非常奇怪的错误。我在下面有一些html <input type="checkbox" name="om[1]" value="10"> <input type="checkbox" name="om[2]" value="20"> <input type="checkbox" name="om[3]" value="30"> <pre> <form method="post"> <input type="c

这是我面临的一个非常奇怪的错误。我在下面有一些html

<input type="checkbox"  name="om[1]" value="10">
<input type="checkbox"  name="om[2]" value="20">
<input type="checkbox"  name="om[3]" value="30">
<pre>
<form method="post">
<input type="checkbox"  name="om[1]" value="10">
<input type="checkbox"  name="om[2]" value="20">
<input type="checkbox"  name="om[3]" value="30">
<input type="submit">
<?php
print_r($_POST['om'][1]);
print_r($_POST['om'][2]);
print_r($_POST['om'][3]);

print_r($_REQUEST['om']);
?>
但如果我这样做了

print_r($_REQUEST['om'])
it display a proper array

Array
   (
    [1] => 10
    [2] => 20
    [3] => 30
  )
问题是,当我使用$\u POST获取它不显示的数组值时,如果发布的值不在数组中,它就可以正常工作。 但是我可以通过$\u REQUEST['om']获得所有需要的结果,即使它们是数组

而且它只发生在服务器上,在本地主机上运行良好。 有人能告诉我服务器上有什么问题吗?

我很确定

<input type="checkbox"  name="om[1]" value="10">
表单中的一个是带有字符串类型索引“1”的数组,而在$\u POST变量中,您正在访问$\u POST['om']的第一个元素


因此,您必须在HTML表单中使用除整数以外的其他内容,或者使用
$\u POST['om']['1']

访问值。这只是一个解释,我测试了以下内容:

仅当参数为string时才打印字符串“Array”,因此我猜$\u POST superglobal在print\r行之前被重写(这也可以通过$\u RESQUEST suberglobal包含原始值和期望值这一事实得到证明) 尝试导出它

有人能告诉我服务器上有什么问题吗

最有可能的是你自己可以,因为你可以访问它,你可以麻烦地拍摄它

根据您的描述,在您的服务器上,
$\u POST['om']
是字符串
“Array”
。句号

从您在问题中发布的代码中看不到它是如何变成的,只有它是可见的

顺便说一句,字符串
“Array”
也是一个标志,表明您(可能是偶然)在服务器上放置了将数组强制转换为字符串的代码和配置()

现代的PHP版本会注意到这一点。因此,您首先应该在服务器上启用错误日志记录,并将详细程度设置为最高级别,以便您可以在PHP错误日志中看到警告、通知和严格警告。然后按照错误日志查找数组转换通知

如果这并没有导致任何结果,那么您需要手头有一个step调试器,并进行一些远程调试,以验证您的期望是否得到满足,以及在哪里被打破。这通常是了解发生了什么的最快方法,因为您可以在程序运行时检查程序。

name=“om[]”-删除键并尝试它对我有效

    Array
     (
        [0] => 10
        [1] => 20
        [2] => 30
     )

    Array
     (
        [0] => 10
        [1] => 20
        [2] => 30
     )

似乎
$\u POST['om']
被意外地转换为字符串。像
print\r($\u POST['om'])
缺少调试语句


我认为问题在于一段代码中的某个地方,而您没有在这里展示。不过,您应该更经常地使用它来分析变量。

您好,我已经检查了上面的代码。 它工作得很好。我认为您缺少表单提交方法

请使用method=“post”

您可以使用像om[1]、om[2]、om[3]这样的索引数组,这无关紧要

以下是代码:

$aPostArray['aMyArray']=$aMyArray;

$sFieldString = http_build_query($aPostArray);


请检查此代码。

答案是在php.ini文件中将您的magic\u quotes\u gpc=off放入如果您尝试打印
数组,它将返回
数组。PHP中的大多数数据类型都是这样的。

选中这些复选框,您将得到您的值

curl_setopt($ch1, CURLOPT_POSTFIELDS,$sFieldString);


提交表单时,只有“打开”复选框控件才能成功

我试图使用curl在$\u POST中传递数组,在转储时,它向我显示字符串类型的“array”。我在寻找解决方案时发现了这个问题。我希望这能解决你的问题。解决方案是创建单个参数数组,然后将其作为查询传递,如下所示:

然后将其设置为


在每个(不带键)上尝试
name=“om[]”
尝试$om=$\u POST['om'],然后访问索引。我认为印刷品把你弄糊涂了。@FDL提供印刷品没有什么错keys@sandeepKumar您能否显示您的表单标记当它停止工作时发生了什么变化?一个新的PHP版本,服务器重新配置。。。?你能从服务器上传你的文件和设置吗?(如果您没有直接的配置访问权限,您可以使用来读取它们。)它在我之前的服务器上运行得很好。我只是认为服务器的问题在于,数组中的值不能使用$\u POST访问它,但可以使用$\u POST访问它$_REQUEST@sandeepKumar您应该将上述测试代码复制/粘贴到服务器上的PHP文件中,查看是否发生相同的行为。通过这种方式,您将能够判断这是服务器/vhost级别的问题,还是PHP堆栈中的某个问题。我在服务器上遇到了这个致命错误PHP致命错误:允许内存大小为94371840字节,然后我完成了此ini设置(“内存限制”、“-1”),服务器上什么也没有改变,内存消耗是一个信号,表明您达到了某个界限。我想进一步了解你为什么会达到记忆极限。禁用内存限制只会隐藏错误,但不会停止原因。所以它只消除了症状。你完全正确,但是当我在错误日志中看到致命错误时,我发现这个解决方案只是为了保持服务器运行,你能建议一下$\u POST有什么问题吗,如果POST值不是数组,它是givng值,但是如果它是arryay,它只是返回一个字符串“array”你需要解决这个问题。我不能告诉你,因为我无法复制它,也无法访问代码或服务器。你可能需要找一个人来处理你的问题,这样你就有了一双新的眼睛?你所在的地方没有人能帮你吗?我已经试过了,只有我在stackoverflow上发布了,无论如何谢谢你宝贵的时间:)如果他没有method=“post”-将是一个空数组$\u post是的,你没有method=“post”那么默认情况下form take method=“get”。请在表单标签中提及method=“post”属性。如果不添加attribute method=“post”,则$\u post将不起作用。它将$\u获得或$\u重新获得
    <pre>
    <form method="post">
    <input type="checkbox"  name="om[]" value="10">
    <input type="checkbox"  name="om[]" value="20">
    <input type="checkbox"  name="om[]" value="30">
    <input type="submit">
    </form>
    <?php
    print_r($_POST['om']);
    print_r($_REQUEST['om']);
    ?>
    Array
     (
        [0] => 10
        [1] => 20
        [2] => 30
     )

    Array
     (
        [0] => 10
        [1] => 20
        [2] => 30
     )
<form method="post">
 <input type="checkbox"  name="om[1]" value="10">
 <input type="checkbox"  name="om[2]" value="20">
 <input type="checkbox"  name="om[3]" value="30">
 <input type="submit" name="submit" value="Submit">
</form>

<?php
if(isset($_POST['submit'])){
  //print_r($_REQUEST['om']);
  print_r($_POST['om']);
}
?>
<input type="checkbox"  name="om[1]" value="10" checked="true">
<input type="checkbox"  name="om[2]" value="20" checked="true">
<input type="checkbox"  name="om[3]" value="30" checked="true">
$aPostArray['aMyArray']=$aMyArray;

$sFieldString = http_build_query($aPostArray);
curl_setopt($ch1, CURLOPT_POSTFIELDS,$sFieldString);