【问题标题】:POSTing Form Fields with same Name Attribute发布具有相同名称属性的表单字段
【发布时间】:2011-01-13 06:58:21
【问题描述】:

如果您有一个包含带有重复name 属性的文本输入的表单,并且该表单已发布,您是否仍然能够从PHP 中的$_POST 数组中获取所有字段的值?

【问题讨论】:

  • 这个问题比建议的副本要老得多,而且有更多的答案。肯定是这个的副本?
  • 目前的共识是以“质量”结束:meta.stackexchange.com/questions/147643/…> 由于“质量”是不可衡量的,我只是通过投票。 ;-) 很可能归结为哪个问题与标题上最好的新 Google 关键字有关。

标签: php post


【解决方案1】:

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

如果您想要多个具有相同名称的输入,请使用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&amp;a=bar&amp;a=baz

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

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

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

【讨论】:

  • 好酷,所以每个具有重复名称的输入应该只是 name="foo[]"?不是 name="foo[0]" 什么的?
  • @danwellman 只需foo[] 即可,但您也可以使用foo[0]foo[bar] 甚至foo[bar][baz]。只需在您的网络服务器上尝试各种组合,看看它们是如何到达 $_POST 的。
【解决方案2】:

只需使用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>

PHP 代码:

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

$output 将是:val1, val2, val3

希望这会有所帮助!

【讨论】:

  • 很好的答案,因为我认为您必须在 html 表单中引用 val 。 [val] 可以是字符串或整数。谢谢!
【解决方案3】:

你必须创建一个数组: 与name=inputname[] 并通过 post、request 或 get 获取

$inputs = $_POST['inputname'];

print_r($inputs);

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 2016-06-02
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多