如果您的表单包含具有重复 name 属性的文本输入,并且表单已发布,您是否仍然可以从PHP中的 $_POST 数组中获取所有字段的值?
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>
见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 .
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; }
然后,它会为查询字符串中的每个名称提供一个数组数组 .
而不是 name="nfo[val]" 只需使用 name="nfo[val][]" 而在PHP中你可以使用 foreach()
name="nfo[val]"
name="nfo[val][]"
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>
PHP代码:
$output=''; foreach ($nfo['val'] as $key=>$val) { $output.= $val.", "; }
$output 将是: val1, val2, val3
$output
val1, val2, val3
希望这可以帮助!
你必须创建一个数组:使用 name=inputname[] 并获得post,request或get
name=inputname[]
$inputs = $_POST['inputname']; print_r($inputs);
只有当名称是数组类型 names[] 时,在这种情况下,您将获得一个数组作为$ _POST变量中的变量 .
names[]
4 回答
不会 . 只有最后一个输入元素可用 .
如果要使用相同名称的多个输入,请使用
name="foo[]"
作为输入名称属性 . 然后$_POST
将包含foo的数组,其中包含输入元素的所有值 .见HTML reference at Sitepoint .
如果你不使用
[]
,$_POST
将只包含最后一个值的原因是因为PHP基本上只会爆炸并覆盖原始查询字符串以填充$_POST
. 当遇到已存在的名称/值对时,它将覆盖前一个名称/值对 .但是,您仍然可以像这样访问原始查询字符串:
假设你有一个这样的表格:
$
rawQueryString
将包含a=foo&a=bar&a=baz
.然后,您可以使用自己的逻辑将其解析为数组 . 一种天真的方法
然后,它会为查询字符串中的每个名称提供一个数组数组 .
而不是
name="nfo[val]"
只需使用name="nfo[val][]"
而在PHP中你可以使用foreach()
HTML代码:
PHP代码:
$output
将是:val1, val2, val3
希望这可以帮助!
你必须创建一个数组:使用
name=inputname[]
并获得post,request或get只有当名称是数组类型
names[]
时,在这种情况下,您将获得一个数组作为$ _POST变量中的变量 .