POSTing Form Fields with same Name Attribute
If you have a form containing text inputs with duplicate name
attributes, and the form is posted, will you still be able to obtain the values of all fields from the开发者_开发知识库 $_POST
array in PHP?
No. Only the last input element will be available.
If you want multiple inputs with the same name use name="foo[]"
for the input name attribute. $_POST
will then contain an array for foo with all values from the input elements.
<form method="post">
<input name="a[]" value="foo"/>
<input name="a[]" value="bar"/>
<input name="a[]" value="baz"/>
<input type="submit" />
</form>
See the HTML reference at Sitepoint.
The reason why $_POST
will only contain the last value if you don't use []
is because PHP will basically just explode and foreach over the raw query string to populate $_POST
. When it encounters a name/value pair that already exists, it will overwrite the previous one.
However, you can still access the raw query string like this:
$rawQueryString = file_get_contents('php://input'))
Assuming you have a form like this:
<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>
the $rawQueryString
will then contain a=foo&a=bar&a=baz
.
You can then use your own logic to parse this into an array. A naive approach would be
$post = array();
foreach (explode('&', file_get_contents('php://input')) as $keyValuePair) {
list($key, $value) = explode('=', $keyValuePair);
$post[$key][] = $value;
}
which would then give you an array of arrays for each name in the query string.
Instead of name="nfo[val]"
just use name="nfo[val][]"
and in PHP you can use a 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 code:
$output='';
foreach ($nfo['val'] as $key=>$val) {
$output.= $val.", ";
}
$output
will be: val1, val2, val3
Hope this helps!
You have to create an array of them:
with name=inputname[]
and get with post,request or get
$inputs = $_POST['inputname'];
print_r($inputs);
Only if the name are array-typed names[]
in that case you will be getting an array as the variable in the $_POST variable.
精彩评论