具有相同名称属性的表单字段
如果你有一个包含具有重复属性的文本输入的表单,并且表单被发布,你还能从PHP的数组中获取所有字段的值吗?name
$_POST
如果你有一个包含具有重复属性的文本输入的表单,并且表单被发布,你还能从PHP的数组中获取所有字段的值吗?name
$_POST
不。只有最后一个输入元素可用。
如果要使用多个具有相同名称的输入,请使用输入名称属性。 然后,将包含一个 foo 数组,其中包含来自输入元素的所有值。name="foo[]"
$_POST
<form method="post">
<input name="a[]" value="foo"/>
<input name="a[]" value="bar"/>
<input name="a[]" value="baz"/>
<input type="submit" />
</form>
请参阅站点点中的 HTML 参考。
如果不使用,为什么只包含最后一个值的原因是,PHP基本上只是在原始查询字符串上爆炸并预先填充。当它遇到已存在的名称/值对时,它将覆盖前一个名称/值对。$_POST
[]
$_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
然后,您可以使用自己的逻辑将其解析为数组。一个幼稚的方法将是
$post = array();
foreach (explode('&', file_get_contents('php://input')) as $keyValuePair) {
list($key, $value) = explode('=', $keyValuePair);
$post[$key][] = $value;
}
然后,它将为查询字符串中的每个名称提供一个数组数组。
而不是仅仅使用 和 在 PHP 中,你可以使用name="nfo[val]"
name="nfo[val][]"
foreach()
代码:
<form method="post">
<input name="nfo[val][]" value="val1"/>
<input name="nfo[val][]" value="val2"/>
<input name="nfo[val][]" value="val3"/>
<input type="submit" />
</form>
PHP 代码:
$output='';
foreach ($nfo['val'] as $key=>$val) {
$output.= $val.", ";
}
$output
将是:val1, val2, val3
希望这有帮助!