检查是否未选中复选框.需要两种状态(选中和未选中)


check if checkbox is not checked. BOTH status needed (checked and unchecked)

我试图得到那些未选中的复选框。目前,我只是得到那些被检查的。这是我的代码。该值将插入到我不想将其保留为空的表中,这就是为什么我需要取消选中这些复选框,以便我可以插入 1 表示选中或 0 表示未选中:

  <?php 
    if (!empty($_POST['menu'])) {
    # code...
             foreach ($_POST['menu'] as $value) {
    # code...
              echo "<p>ID Checkbox checked:  ".$value;
             }
    }
   ?>

我需要同时获得两种状态的原因之一:选中或未选中是因为我不想将数据库字段留空。

未选中的复选框不会被开机自检。如果您知道哪些字段应该在那里,则可能必须手动列出它们。

复选框的奇妙之处在于,当您没有选中复选框并提交表单时,不会向服务器发送任何内容。以这个复选框为例:

<input type="checkbox" name="test"/>

如果您将其保留为未选中状态并查找$_POST['test']则会出错,因为它未设置。

因此,请尝试这样做:

if(!isset($_POST['name_of_checkbox'])){
  // Fill database with some empty value.
} else {
  // Do what you need to do for checked value.
}

希望能给你一些见解!

假设它们的名称是否相同,并且您知道可以使用for循环的复选框的数量:

if (!empty($_POST['menu'])) {
    for ($i=0; $i < 10; $i++) {
        if(isset($_POST['menu'][$i])){
            echo "Checkbox checked:  " . $_POST['menu'][$i];
        }else{
            echo "Checbox uncheck #" . $i;
        }
    }
}

您可以将名称放在数组中,然后迭代:

$checkboxes = array('cbx1', 'cbx2', 'cbx3');
foreach ($checkboxes as $checkbox) {
    if (isset($_POST[$checkbox])) {
        echo "<p>ID Checkbox checked:  " . $_POST[$checkbox];
    } else {
        echo "Checbox uncheck :" . $checkbox;
    }
}

所以是的,有很多方法可以实现这一目标,这取决于情况。检查@Artur方法以及客户端解决方案。

<input type="hidden" name="checkbox[8]" value="0">
<input type="checkbox" name="checkbox[8]" value="8">

这也是发布 0 的一种方法。重要的部分是名称是相同的。因此,如果选中复选框,它的值将覆盖隐藏的输入值。

谢谢大家抽出宝贵时间,请回答我的问题。我需要取消选中和选中这些复选框的原因是因为我有一个动态菜单,所以我将菜单分配给用户。这是我和我的一个朋友在工作中找到的解决方案:

复选框的代码。我查询我的表菜单上所有可用的菜单,以便向管理员显示所有可用的菜单,以便他可以选择将哪些菜单分配给用户:

´ 
  <table>
  <tr>
  <td>Menus a asignar:</td>
  <td>
  <?php
  $query_menus_checkbox = mysql_query("SELECT id_menu, nombre_menu FROM menus");
  while ($checkbox_mostrar = mysql_fetch_row($query_menus_checkbox)) {
  # code...
  ?>
  <input type="checkbox" name="menus[<?php echo $checkbox_mostrar[0]; ?>]" value="<?php echo     $checkbox_mostrar[0] ?>"><?php echo $checkbox_mostrar[1] ?> 
  <p></p>
  <?php
  }
  ?>
  </td>
  </tr>
  </table>
´

然后这是用于处理哪些复选框被选中或不插入到我的表格上的代码(id_user没有显示,但我从另一个未显示的查询中获取,因此您必须自己查询(:

´
 $res=mysql_query("select id_menu from menus");
                    $arid=array();
                    while($xd=mysql_fetch_assoc($res)){
                        $arid[]=$xd['id_menu'];
                    }
                    for($i=0;$i<count($arid);$i++){
                        $id_menu=$arid[$i];
                        $activo=(isset($_POST['menus'][$id_menu]) && $_POST['menus'][$id_menu]!="")?1:0;
                        $inserta_menus = mysql_query("INSERT INTO menus_usuarios(id_menu, id_usuario, estado) values ('$id_menu', '$id_user[0]', '$activo')"); 
                    }
´