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

dan*_*man 38 php post

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

Gor*_*don 73

不会.只有最后一个输入元素可用.

如果要使用具有相同名称的多个输入,请使用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>
Run Code Online (Sandbox Code Playgroud)

请参阅Sitepoint上HTML参考.

$_POST如果你不使用[]它的原因只会包含最后一个值是因为PHP基本上只是爆炸并预先填充原始查询字符串$_POST.当遇到已存在的名称/值对时,它将覆盖前一个名称/值对.

但是,您仍然可以像这样访问原始查询字符串:

$rawQueryString = file_get_contents('php://input'))
Run Code Online (Sandbox Code Playgroud)

假设你有一个这样的表格:

<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>
Run Code Online (Sandbox Code Playgroud)

那么$ 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;
}
Run Code Online (Sandbox Code Playgroud)

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

  • @danwellman只是`foo []`会做但你也可以使用`foo [0]`,`foo [bar]`甚至`foo [bar] [baz]`.只需在您的网络服务器上尝试各种组合,即可了解它们如何到达$ _POST. (3认同)

小智 7

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

HTML代码:

<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>
Run Code Online (Sandbox Code Playgroud)

PHP代码:

$output='';
foreach ($nfo['val'] as $key=>$val) {
    $output.= $val.", ";
}
Run Code Online (Sandbox Code Playgroud)

$output 将会: val1, val2, val3

希望这可以帮助!


str*_*ade 6

你必须创建一个数组:with name=inputname[] 和get with post,request或get

$inputs = $_POST['inputname'];

print_r($inputs);
Run Code Online (Sandbox Code Playgroud)