假设有一个形式:
<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()
,因为您会遇到相同的数组键覆盖问题。您必须执行字符串解析才能提取其他值。
如果可能的话,将它们更改为带有[]
的数组确实更容易。