$ _POST只返回'Array'作为字符串,我发布了一个数组

时间:2013-07-30 10:37:40

标签: 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">

当我发布此表单并执行

print_r($_POST['om'])
it gives just prints 'Array' as string
and if i do print_r($_POST['om'][0]) it gives A
and if i do print_r($_POST['om'][1]) it gives r 

但如果我这样做

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

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

问题是当我使用 $ _ POST 来获取它不显示的数组值时,如果发布的值不在数组中,它可以正常工作。 但是我可以用 $ _ REQUEST ['om'] 获得所有必需的结果,即使它们是数组。

它只发生在服务器上,适用于localhost。 任何人都可以告诉服务器上的问题吗?

11 个答案:

答案 0 :(得分:3)

答案是将你的 magic_quotes_gpc =关闭放在php.ini文件中

答案 1 :(得分:2)

这只是解释,我测试了这个:

<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']);
?>

输出:

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

答案 2 :(得分:2)

  

有人能告诉服务器上的问题吗?

最有可能是你自己的,因为你可以访问它,你可以解决它。

根据您的描述,您的服务器$_POST['om']上的字符串为"Array"。周期。

从你在问题中发布的代码中看不到它是什么,只是它是。

顺便说一句,字符串"Array"也是一个标志,在服务器上你(可能是偶然的)放置了将数组转换为字符串(http://php.net/language.types.type-juggling)的代码和配置。

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

如果这不能引导您做任何事情,您需要掌握一个步调试器并进行一些远程调试,以验证您的期望是否得到满足以及它们在哪里被破坏。这通常是找出所发生情况的最快方法,因为您可以在程序运行时检查它。

答案 3 :(得分:1)

如果您尝试print_r Array,它将返回Array。 PHP中的大多数数据类型都是这样的。

答案 4 :(得分:0)

我很确定

<input type="checkbox"  name="om[1]" value="10">

不同
$_POST['om'][1]

表单中的一个是字符串类型索引为“1”的数组,而在$ _POST var中,您正在访问$ _POST ['om']的第一个元素。

因此,您必须在HTML表单中使用除整数之外的其他内容,或使用$_POST['om']['1']访问值。

答案 5 :(得分:0)

http://php.net/manual/en/function.print-r.php 只有当参数是字符串时才打印字符串“Array”,所以我想在print_r行之前覆盖了$ _POST超全局(这也是由$ _RESQUEST suberglobal包含原始值和期望值的事实证明的) 尝试var_export它

答案 6 :(得分:0)

name =“om []” - 删除密钥并尝试为我工作。

    <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
     )

答案 7 :(得分:0)

似乎$_POST['om']意外地转换为字符串。像print_r($_POST['om'] . "")缺少调试语句?

我认为这个问题存在于您未在此处展示的代码中。不过,您应该更频繁地使用var_dump来分析变量。

答案 8 :(得分:0)

您好我已经检查了您的代码。 它工作正常。我想你错过了表单提交方法

请使用 method =“post”

您可以使用索引数组,如om [1],om [2],om [3]无关紧要。

这是代码:

<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']);
}
?>

请检查此代码。

答案 9 :(得分:0)

复选框,检查它们,您将获得您的值

<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">

提交表单时,只有“on”复选框控件才能成功。 From the spec (4.01)

答案 10 :(得分:0)

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

$aPostArray['aMyArray']=$aMyArray;

$sFieldString = http_build_query($aPostArray);

然后将其设置为

curl_setopt($ch1, CURLOPT_POSTFIELDS,$sFieldString);