5

这是我面临的一个非常奇怪的错误。我有一些 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']获得所有必需的结果。

它只发生在server上,适用于 localhost。谁能告诉服务器上的问题是什么?

4

11 回答 11

3

答案是把你的magic_quotes_gpc = off放在 php.ini 文件中

于 2013-08-14T11:03:48.000 回答
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
)
于 2013-07-30T11:03:48.477 回答
2

谁能告诉服务器上的问题是什么?

很可能您自己可以,因为您可以访问它并且可以对其进行故障排除。

根据您的描述,您的服务器$_POST['om']上是 string "Array"。时期。

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

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

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

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

于 2013-08-12T05:04:40.863 回答
1

如果你尝试print_ran Array,它会返回Array。PHP 中的大多数数据类型都是这样的。

于 2013-08-15T13:31:37.927 回答
0

我很确定

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

不一样

$_POST['om'][1]

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

因此,您要么必须在 HTML 表单中使用整数以外的其他内容,要么使用$_POST['om']['1'].

于 2013-07-30T10:51:03.297 回答
0

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

于 2013-08-09T16:56:08.613 回答
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']);
}
?>

请检查此代码。

于 2013-08-14T09:14:48.173 回答
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">

提交表单时,只有“打开”复选框控件才能成功。来自规范 (4.01)

于 2013-08-16T09:17:51.557 回答
0

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

我认为问题出在您未在此处显示的一段代码中。不过,您应该更频繁地使用var_dump来分析变量。

于 2013-08-13T14:00:18.033 回答
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
     )
于 2013-08-13T06:15:51.587 回答
0

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

$aPostArray['aMyArray']=$aMyArray;

$sFieldString = http_build_query($aPostArray);

然后将其设置为

curl_setopt($ch1, CURLOPT_POSTFIELDS,$sFieldString);
于 2018-05-02T11:09:05.270 回答