【问题标题】:Post checkbox values when checkbox isn't checked [duplicate]未选中复选框时发布复选框值[重复]
【发布时间】:2013-05-21 07:20:14
【问题描述】:

如何将复选框 POST 关闭,例如,当它没有被选中时,因为复选框仅在它被选中并且我不想使用隐藏变量时才提交值

谢谢

【问题讨论】:

  • 隐藏变量有什么问题? stackoverflow.com/questions/1809494/…
  • 无论如何都发送了,我无法追踪哪个复选框是选中的,例如,如果没有选中任何框,我的复选框数组是 0=>off, 1=>off, 2=>off, 3 =>off 但是如果选中一个框,它将是 0=>off, 1=>on, 2=>off, 3=>off, 4=>off 我正在使用这些索引来初始化另一个变量.. if 0 { act=create} elseif (1) {act=delete} 等等..如果复选框未知,那么我将无法正确初始化我的变量..有什么想法吗?
  • 这显然适用于服务器而不是客户端。你不应该依赖 javascript 告诉你的服务器哪些复选框没有被选中(通常浏览器不会告诉你)。由于您的服务器正在传递表单,因此您应该知道预期的响应是什么。
  • @DaveChen,这就是我想要做的。如果不使用隐藏变量并扩展我的复选框数组,我不知道如何知道是否未选中该框。如果您有任何想法,请告诉我。谢谢
  • 我的回答是:不要使用隐藏值,您依赖客户端输入进行服务器操作。你需要知道你期望服务器端从什么开始。

标签: php html post checkbox


【解决方案1】:

简短的回答是浏览器不会发送未选中的复选框。但一种可能的解决方法是在 php 端设置一个默认数组

所以对于包含像

这样的字段的表单
<input type='checkbox' name='checkbox[a]' value='1'/>
<input type='checkbox' name='checkbox[b]' value='1'/>
<input type='checkbox' name='checkbox[c]' value='1'/>

你会说

$checkbox_defaults = array(
   "a" => 0,
   "b" => 0,
   "c" => 0
);

然后在 PHP 上说

$_POST["checkbox"] = array_merge($checkbox_defaults, $_POST["checkbox"]);

注意这仅适用于字符串索引数组...如果您需要使用数字索引数组,php 应该如下所示。

$checkbox_defaults = array(
   0 => 0,
   1 => 0,
   2 => 0
);
foreach($checkbox_defaults as $k=>$v){
    $_POST["checkbox"][$k] = (isset($_POST["checkbox"][$k])?
                             $_POST["checkbox"][$k]:$v);
}

【讨论】:

  • +1 NICE 解决方案;).
  • 值得注意的是,这种技术不适用于非字符串键索引数组。数字索引数组,您将获得默认值 AND 选中的数组。
  • 谢谢!但是我的数组是数字索引的,我不想返回两个值......我需要一种方法来只返回检查和未检查的值..有什么想法吗?
  • 我会使用隐藏变量,但它的作用相同.. 发送检查值和隐藏值..
  • 如果您对复选框的name 属性类似于name='checkbox[],那么您唯一可以真正依赖的就是不同的值。如果您在名称属性name='checkbox[1] 中放入数字索引,那么有一些希望......我会更新这个用例的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
相关资源
最近更新 更多