【问题标题】:check if checkbox is not checked. BOTH status needed (checked and unchecked)检查复选框是否未选中。两种状态都需要(选中和未选中)
【发布时间】:2015-02-18 20:48:32
【问题描述】:

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

  <?php 

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

   ?>

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

【问题讨论】:

标签: php checkbox foreach


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 您好@meda 分享您的知识。我试过做你的第二种方式,但这不起作用。谢谢分享
    • @Alejo_Blue 如果你告诉我什么没用的话会很有帮助,这样我可以给你一个解决方案
    • 谢谢!虽然当我打开那个链接时什么都没有显示:(谢谢你
    【解决方案3】:
    <input type="hidden" name="checkbox[8]" value="0">
    <input type="checkbox" name="checkbox[8]" value="8">
    

    这也是发布 0 的一种方式。重要的部分是名称是相同的。所以如果复选框被选中,它的值会覆盖隐藏的输入值。

    【讨论】:

      【解决方案4】:

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

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

      希望能给你一些见解!

      【讨论】:

      • 非常感谢您抽出宝贵的时间来回答这个问题。您给我的解决方案的问题是我确实需要取消选中复选框的名称,这样我可以插入一个 0 字段,如下所示: $inserta_menus = mysql_query("INSERT INTO menus_usuarios(id_menu, id_usuario, estado) 值( '$id_menu', '$id_user[0]', '$activo')");其中 id_menu 是 $_post['menu'] 变量的名称
      • 啊,我明白了。在这种情况下,请查看 Artur 的答案。使用模拟复选框状态的隐藏元素并将其发送到$_POST[] 数组而不是复选框是一个很好的解决方案。
      • 没问题。此外,请考虑单选按钮,一个用于Yes,一个用于No,如果您需要始终传递某些内容。复选框本质上是一个可以取消选中的单选按钮。
      【解决方案5】:

      未选中的复选框不会发布。如果您知道应该有哪些字段,您可能需要手动列出它们。

      【讨论】:

        猜你喜欢
        • 2018-02-09
        • 2012-12-08
        • 2012-05-14
        • 1970-01-01
        • 1970-01-01
        • 2018-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多