【问题标题】:HTML Array Element not getting in $_POSTHTML 数组元素未进入 $_POST
【发布时间】:2011-03-09 10:46:07
【问题描述】:

我有一个名为 product_id[] 的表单元素,它是一个数组。 例如。

<input type="hidden" name="product_id[]" value="1" />
<input type="hidden" name="product_id[]" value="2" />

当我这样做时在我们的开发服务器中

print_r($_POST['product_id']);

我得到了我所有的产品 ID 值。当我尝试在我们的实时服务器中做同样的事情时,屏幕上只会打印字符串“Array”。我尝试在我的表单中更改 ENCTYPE,但没有任何运气。当我更改为 GET 时,我的所有值都打印在我的 URL 中,但是当我执行 print_r($_GET['product_id']) 时,我得到的结果与 post 相同。所以,我希望这应该与 PHP $_POST 和 $_GET 有关。我的实时服务器中是否缺少任何扩展或模块?

谁能解释一下?

谢谢,

【问题讨论】:

  • 试试var_dump。输出是什么?
  • 您的 print_r 行中的小错误,缺少引号。
  • 您的浏览器是 Google Chrome 吗?
  • print_r 从不输出字符串“Array”。也许你写错了print
  • 不,我使用的是 firefox,我在开发服务器上做同样的事情,但在我们的实时服务器中却没有。完全相同的代码。

标签: php html


【解决方案1】:

来自您的评论:

["product_id"]=> string(5) "Array"

这意味着$_POST['product_id'] 是一个包含单词Array 的字符串。您发布的代码不会发生这种情况。我的猜测是,您正在使用完整的 PHP 数组而不是其中的一项来填充名为 product_id 的表单字段。例如:

$foo = array(1, 2, 3);
echo '<input type="hidden" name="product_id" value="' . $foo . '">';

... 打印:

<input type="hidden" name="product_id" value="Array">

更新:

我不确定你是否完全明白我的意思。这是重现您的问题的完整 sn-p:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
</head>
<body>

<?php

echo '<xmp>'; var_dump($_POST); echo '</xmp>';

?>

<form action="" method="post">
<div>
    <input type="hidden" name="product_id[]" value="1">
    <input type="hidden" name="product_id[]" value="2">

<?php

$foo = array(1, 2, 3);
echo '<input type="hidden" name="product_id" value="' . $foo . '">';

?>
    </div>
    <div><input type="submit" name="Submit"></div>
</form>

</body>
</html>

正如我所说,您向我们展示的唯一代码无法产生这种效果。这就是为什么查看完整代码如此重要的原因。

【讨论】:

  • 不,我也检查过 Vicario。即使它打印 Array 的值,它也应该给我一个数组('arrays'),因为我的名字中显然有 product_id[]。我尝试在两台服务器上创建一个小应用程序。它适用于两台服务器我将继续检查我的错误并在此处发布答案。谢谢你的帮助..
  • @Karthik 请查看我的更新答案。顺便说一句,我建议你在提交之前检查你的 rendered HTML。
【解决方案2】:

你可以试试像这样 print_r($_POST) 打印帖子,现在你可以看看 product_id 是否通过了

【讨论】:

    【解决方案3】:

    因此,由于某种原因,您的变量似乎是字符串"Array",而不是实际的数组。这很奇怪,我以前没见过。

    作为临时解决方法,您可以尝试使用 parse_str 并查看这是否正确导出了 product_id 的值。

    【讨论】:

    • 嗨,乔恩,我试过 parse_str($_POST['product_id]) 我得到的结果是“1” 我想我正在我的测试服务器和我的实时服务器中按顺序准备一个小应用程序为了更好地理解。
    【解决方案4】:

    有几件事可能会出错。你只打印出“Array”的原因是因为 $_POST 是空数组。造成这种情况的原因可能是 PHP 本身的实际配置错误,如果您安装了 Suhosin,或者最终可能是错误。通常,就我而言,这总是我的错:)

    • 检查您是否将 POST 请求发送到正确的 URL(实时而不是测试)。
    • 在发送之前检查您的隐藏字段是否确实存在。
    • 检查您在命名隐藏字段时是否犯了一个小错误

    这至少应该涵盖可能发生的最常见错误。

    【讨论】:

      【解决方案5】:

      发生了一些隐式数组到字符串类型的转换。

      如果您的 var_dump() 确实有效,而 print_r() 无效,那么这肯定是 PHP 错误,您应该检查服务器上的 PHP 版本并进行更新。

      当您使用 foreach ( $_POST as $v) echo $v; 时,您的实时服务器上会发生什么? ?

      请确认 print_r($_POST) 和 var_dump( $_POST ) 的行为不同。

      【讨论】:

      • 它开始将字符串“Array”分割成每个字符。
      • 所以在你的实时服务器上你有隐式的数组到字符串的转换。确保代码在两个环境中确实是相同的(如果需要,隔离一个可以 100% 确定的概念证明)。同时告诉我们您的 PHP 版本。
      • 嗨 Tacone,我尝试创建一个具有相同设置的单独应用程序,它似乎在两台服务器上都可以工作。我认为这将是我需要调试的代码。一旦我找到它,我会发布我的答案。感谢您的帮助。
      【解决方案6】:

      好吧,伙计们,这并不奇怪..如果 print_r($_POST['product_id']) 返回一个数组..一切都是正确的。恭喜...... Wat 可能出错的是你编写 html 代码的方式..尝试将索引分配给 product_id..

      【讨论】:

        猜你喜欢
        • 2014-02-01
        • 2019-08-30
        • 2014-11-12
        • 2012-04-28
        • 1970-01-01
        • 1970-01-01
        • 2015-03-14
        • 1970-01-01
        • 2019-01-03
        相关资源
        最近更新 更多