【问题标题】:Checkbox Array only showing checked values - PHP复选框数组仅显示选中的值 - PHP
【发布时间】:2012-01-12 05:48:23
【问题描述】:

我有一个带有许多复选框的表单。

例如

...
<input name="dodatkowe[]"  type="checkbox" value="1" />
<input name="dodatkowe[]"  type="checkbox" value="1" />
<input name="dodatkowe[]"  type="checkbox" value="1" />
...

我想拥有数组中的所有复选框。数组“dodatkowe”。

当我选中所有复选框时:

Array ( [0] => 1 [1] => 1 [2] => 1 ) 

但是当我检查示例时,我只有第二个:

Array ( [0] => 1 ) 

当我检查示例第二个复选框时,我需要它:

Array ( [0] => 0 [1] => 1 [2] => 0)

【问题讨论】:

  • 浏览器只提交选中的复选框,所以你永远不会看到未选中的复选框的值。

标签: php html forms checkbox


【解决方案1】:

为它们提供索引,以便您可以专门引用它们...

...
<input name="dodatkowe[1]"  type="checkbox" value="1" />
<input name="dodatkowe[2]"  type="checkbox" value="1" />
<input name="dodatkowe[3]"  type="checkbox" value="1" />
...

不知道为什么你觉得你需要查看未检查的值,这可以被认为是检查值的反面......任何这样做的尝试都是一种黑客行为,并且是不必要的。

【讨论】:

  • 可能,每个前面都有一个:&lt;input name="dodatkowe[1]" type="hidden" value=0"&gt;(当然要相应地更改dodatkowe[之后的数字)。
【解决方案2】:

如果未选中复选框,则不会将其值包含在参数中,但第一步是为复选框提供唯一 ID:

<input name="dodatkowe[0]"  type="checkbox" value="1" />
<input name="dodatkowe[1]"  type="checkbox" value="1" />
<input name="dodatkowe[2]"  type="checkbox" value="1" />

然后你可以使用 PHP 来检查值是否存在:

$maxfields = 3;
$selectboxes = $_REQUEST['dodatkowe'];
for($i = 0; $i < $maxfields; $i++)
  if(!isset($selectboxes[$i])) $selectboxes[$i] = 0;

这会将所有不存在的字段设置为 0,$selectboxes 应该包含您要查找的结果。

【讨论】:

  • 不确定我是否喜欢(或会推荐)直接修改 $_REQUEST... 可能会让人感到困惑,具体取决于您需要对提交的值进行哪些进一步处理。
  • 是的...您可能需要考虑在...之前将其复制到另一个变量中...
猜你喜欢
  • 2016-01-29
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
  • 2016-09-05
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多