如果您有一个包含带有重复name属性的文本输入的表单,并且该表单已经过帐,那么您仍然能够从$_POSTPHP数组中获取所有字段的值吗?
name
$_POST
否。仅最后一个输入元素可用。
如果要使用相同名称的多个输入,请使用name="foo[]"输入名称属性。$_POST然后将包含foo的数组,其中包含来自输入元素的所有值。
name="foo[]"
<form method="post"> <input name="a[]" value="foo"/> <input name="a[]" value="bar"/> <input name="a[]" value="baz"/> <input type="submit" /> </form>
$_POST如果不使用[]则仅包含最后一个值的原因是因为PHP基本上只会爆炸并遍历要填充的原始查询字符串$_POST。当遇到已经存在的名称/值对时,它将覆盖前一个。
[]
但是,您仍然可以像这样访问原始查询字符串:
$rawQueryString = file_get_contents('php://input'))
假设您具有这样的形式:
<form method="post"> <input type="hidden" name="a" value="foo"/> <input type="hidden" name="a" value="bar"/> <input type="hidden" name="a" value="baz"/> <input type="submit" /> </form>
rawQueryString然后$ 将包含a=foo&a=bar&a=baz。
rawQueryString
a=foo&a=bar&a=baz
然后,您可以使用自己的逻辑将其解析为一个数组。天真的方法是
$post = array(); foreach (explode('&', file_get_contents('php://input')) as $keyValuePair) { list($key, $value) = explode('=', $keyValuePair); $post[$key][] = $value; }
这将为您提供查询字符串中每个名称的数组数组。