我可以在 PHP 中访问名称中没有“[]”的重复发布变量吗?


Can I access repeated post variables in PHP without '[]' in the name?

假设有一个形式:

<form enctype="multipart/form-data" method="post">
    <input name='foo'>
    <input name='foo'>
    <input type=submit>
</form>

发布到我的 PHP 脚本。我如何(如果有的话)找出这些框中提交的两个值。 $_POST['foo']给出了第二个值,但我想要两个值。

我意识到这可以通过使用<input name='foo[]'>来完成(这将使$_POST['foo']成为一个数组)。由于某些编码决策,添加方括号是不可取的(阅读:需要一些重组),并且似乎应该有一种简单的方法来做到这一点。

如果 enctype 是"application/x-www-form-urlencoded",那么解析它会很容易,但"multipart/form-data"更复杂,并且可能有一个 30MB 的文件!

更不用说 PHP 已经解析了帖子数据。

请有人告诉我 PHP 保留了它从 $_POST 解析的信息,并且我可以在不重新解析的情况下访问它。

谢谢!

您无法访问它,$_POST也不会保留它。 如果浏览器甚至发送了它(它应该有),当它从 HTTP 请求解析到$_POST超全局时,数组键将被覆盖。

这有点等效于定义一个数组,例如:

array(
  'one' => 1,
  'two' => 2,
  'one' => 3
);
Array(2) {
  ["one"]=>
      int(3)
  ["two"]=>
      int(2)
}

数组键one最初是设置的,但是当在初始化过程中遇到另一个值时,它会立即被覆盖。

不适合您的情况(多部分形式),但适用于未来的读者:

如果您读取整个原始HTTP POST,则可以解析出所需的值。

<?php $postdata = file_get_contents("php://input"); ?> 

这会给你一个字符串,比如

 foo=value1&foo=value2

但是,您不能将其传递给parse_str(),因为您会遇到相同的数组键覆盖问题。您必须执行字符串解析才能提取其他值。

如果可能的话,将它们更改为带有[]的数组确实更容易。