检查是否未选中复选框。需要两个状态(已选中和未选中)

时间:2014-12-19 21:29:39

标签: php checkbox foreach

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

  <?php 

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

   ?>

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

5 个答案:

答案 0 :(得分:2)

未选中的复选框不会被POST。如果你知道那里应该有哪些字段,你可能需要手动列出它们。

答案 1 :(得分:1)

关于复选框的精彩之处在于,如果您没有选中复选框,并且提交了表单,则不会向服务器发送任何内容。以此复选框为例:

<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.
}

希望能给你一些见解!

答案 2 :(得分:1)

假设它们的名称相同,并且您知道可以使用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方法以及客户端解决方案。

答案 3 :(得分:0)

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

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

答案 4 :(得分: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未显示但我从另一个未显示的查询中获取,因此您必须自己查询):< / p>

´
 $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')"); 
                    }
´