我可以在PHP中访问重复的post变量而不使用名称中的"[]"吗?

Dae*_*all 3 php post

说有一个表格:

<form enctype="multipart/form-data" method="post">
    <input name='foo'>
    <input name='foo'>
    <input type=submit>
</form>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

谢谢!

Mic*_*ski 5

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

它等同于定义一个数组,如:

array(
  'one' => 1,
  'two' => 2,
  'one' => 3
);

Array(2) {
  ["one"]=>
      int(3)
  ["two"]=>
      int(2)
}
Run Code Online (Sandbox Code Playgroud)

one最初设置数组键,但是在初始化期间遇到另一个值时,会立即覆盖它.

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

如果您读入整个原始HTTP POST,则可能能够解析所需的值.

<?php $postdata = file_get_contents("php://input"); ?> 
Run Code Online (Sandbox Code Playgroud)

这会给你一个字符串

 foo=value1&foo=value2
Run Code Online (Sandbox Code Playgroud)

但是你无法传递它parse_str(),因为你将遇到相同的数组键覆盖问题.您必须执行字符串解析以提取其他值.

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