3

假设有一个表格:

<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 已经解析了 post 数据。

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

谢谢!

4

1 回答 1

5

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

它相当于定义一个数组,如:

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(),因为你会遇到同样的数组键覆盖问题。您必须进行字符串解析才能提取其他值。

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

于 2012-04-10T14:00:59.757 回答