POST具有相同名称属性的表单字段

时间:2010-02-04 21:38:39

标签: php post

如果您的表单包含带有重复name属性的文本输入,并且表单已发布,您是否仍然可以从PHP中的$_POST数组中获取所有字段的值?< / p>

4 个答案:

答案 0 :(得分:71)

没有。只有最后一个输入元素可用。

如果您想要多个具有相同名称的输入,请使用name="foo[]"作为输入名称属性。然后$_POST将包含foo的数组,其中包含输入元素的所有值。

<form method="post">
    <input name="a[]" value="foo"/>
    <input name="a[]" value="bar"/>
    <input name="a[]" value="baz"/>
    <input type="submit" />
</form>

请参阅HTML reference at Sitepoint

如果您不使用$_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

然后,您可以使用自己的逻辑将其解析为数组。一个天真的方法是

$post = array();
foreach (explode('&', file_get_contents('php://input')) as $keyValuePair) {
    list($key, $value) = explode('=', $keyValuePair);
    $post[$key][] = $value;
}

然后会为查询字符串中的每个名称提供一个数组数组。

答案 1 :(得分:7)

而不是name="nfo[val]"只使用name="nfo[val][]"而不是PHP,您可以使用foreach()

HTML code:

<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

希望这有帮助!

答案 2 :(得分:6)

你必须创建一个数组: 与name=inputname[] 并获得发布,请求或获取

$inputs = $_POST['inputname'];

print_r($inputs);

答案 3 :(得分:2)

只有在这种情况下名称是数组类型names[]时,您将获得一个数组作为$ _POST变量中的变量。