【问题标题】:PHP : checkboxes and name issuePHP:复选框和名称问题
【发布时间】:2011-08-10 20:59:41
【问题描述】:

我第一次用 PHP 编写一个脚本来处理包含复选框的 POSTed 表单。

如您所知,复选框通过使用相同的名称属性进行分组,当出现多个值时,$_POST["some_name"] 应该将它们存储在一个数组中。

我进行了测试,但我得到的不是预期的数组,而是一个单一的值——最后一个检查项目的值。

此时,有些困惑,我查看了一些文档,发现 PHP 的复选框名称应以 [] 结尾。是这样吗?预计 HTML 表单和处理它的脚本之间存在什么疯狂的关系?假设我无权访问 HTML 字段名称?假设,就我而言,我有充分的理由不因为一些晦涩的废话而改变我的命名方案。

现在,该问题似乎至少存在一种解决方案:PHP: Retrieving value of checkboxes when name doesn't have array

我想知道是否有一种非常简单的方法可以不用这些疯狂的括号,顺便说一下,您对此有何看法?只有我一个震惊吗?

编辑:好的,我当然可以解决这个问题,但我希望就 HTML 和 PHP 之间的某种“非关注点分离”提出一些(次要的)基本观点。显然,如何编写 HTML 代码与 PHP 无关。

【问题讨论】:

  • 我刚刚遇到了同样的问题并且有同样的想法!为什么html表单名称要依赖php?什么,如果像你一样,我无法控制表单,创建它的人以“正常”方式(没有 [])。我不得不说我不明白为什么我必须将 [] 添加到我的 HTML 中,因为 HTML 和 PHP 应该相互独立。您是否找到了一个正常的解决方案 - 不是以 PHP 特定的方式创建表单?
  • 不幸的是,没有。我最终添加了这些括号。而且我绝对不喜欢 PHP!

标签: php arrays post checkbox


【解决方案1】:

在您的复选框的 html 代码中:

name="mycheckboxname[]"

【讨论】:

  • 正是我的观点。我想尽可能避免愚蠢的行为。
  • 当然没有滥用的意思。我希望我对这个问题的附录能澄清一点。
  • 我没有那样解释你的评论,不用担心。但是:不,您的附录根本没有澄清您的问题。你究竟在这里寻找什么? GET 和 POST 参数/变量可以作为数组提供。您可以在提交 HTML 表单时使用输入字段名称末尾的方括号。
  • 我不明白的是:每当多个字段具有相同的名称时,为什么 PHP 不自动将它们的值存储在一个数组中?为什么我要以这种奇怪的方式“告诉”PHP,这在语法上完全没有意义。为什么 PHP 需要将我选择的符号解释为 name 属性的值,检查最终的 [] ?这很愚蠢。假设 PHP 的某些其他部分同时出于某些其他充分理由需要相同的 name?@#! 结尾。你会怎么做?
  • PHP 从来没有看到过。这一切都由浏览器处理并以数组或单个值的形式发送。您根本不需要告诉 PHP 任何事情。您确实需要告诉浏览器将字段作为数组发送。
【解决方案2】:

你应该试试

<input type="checkbox" name="mycheckbox[]" value="Male" />
<input type="checkbox" name="mycheckbox[]" value="Female" />

In php side,

$myCheckBoxCollection = $_REQUEST['mycheckbox'];

【讨论】:

    【解决方案3】:

    您没有在命名方案中加入 [] 的充分理由是什么?我不认为这特别令人震惊。就 PHP 而言,也许您实际上希望只从具有该特定名称的最后一个元素中获取值。

    有一些替代方法,例如您在问题中包含的替代方法,或者使用一些 javascript 技巧来获取值,但我认为您不会发现任何比简单地在复选框名称中添加括号更容易的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 2012-10-16
      • 2020-08-12
      • 1970-01-01
      相关资源
      最近更新 更多