【问题标题】:How to read if a checkbox is checked in PHP?如果在 PHP 中选中复选框,如何读取?
【发布时间】:2011-06-01 02:01:14
【问题描述】:

如果在 PHP 中选中了复选框,如何读取?

【问题讨论】:

  • 这个问题实际上意味着“检查”(提交表单时)。一旦元素被切换,PHP 确定是否选中了复选框 将需要 Ajax 调用。

标签: php html forms post checkbox


【解决方案1】:

你应该给你的输入命名。 然后单击哪个框,您将在选择方法中收到“打开”

Array
(
    [shch] => on
    [foch] => on
    [ins_id] => #
    [ins_start] => شروع گفتگو
    [ins_time] => ما معمولاً در چند دقیقه پاسخ میدهیم
    [ins_sound] => https://.../media/sounds/ding-sound-effect_2.mp3
    [ins_message] => سلام % به کمک نیاز دارید؟
    [clickgen] => 
)

我的表单名称中有两个复选框,分别是“shch”和“foch”

【讨论】:

    【解决方案2】:
    <form>
    <input type="check" id=chk1 value="1">
    <input type="check" id=chk2 value="1">
    <input type="check" id=chk3 value="1">
    </form>
    

    当您检查 chk2 时,您可以看到以下值:

    <?php
    foreach($_POST as $key=>$value)
    {
        if(isset($key))
            $$key=strip_tags($value);
    }
    insert into table (chk1,chk2,chk3) values ('','1','');
    ?>
    

    【讨论】:

      【解决方案3】:

      Wordpress 有checked() 功能。 参考:https://developer.wordpress.org/reference/functions/checked/

      checked( mixed $checked, mixed $current = true, bool $echo = true )
      

      说明 比较前两个参数,如果相同标记为选中

      参数 $检查 (混合)(必填)要比较的值之一

      $当前 (混合)(可选)(真)要比较的另一个值(如果不只是真) 默认值:真

      $回声 (bool) (可选) 是回显还是只返回字符串 默认值:真

      返回 #返回 (string) html 属性或空字符串

      【讨论】:

        【解决方案4】:

        filter_input(INPUT_POST, 'checkbox_name', FILTER_DEFAULT, FILTER_FORCE_ARRAY)

        【讨论】:

          【解决方案5】:

          要检查是否选中了复选框,请使用 empty()

          提交表单时,复选框将始终设置,因为 所有 POST 变量都将与表单一起发送。 p>

          检查复选框是否为空,如下所示:

          //Check if checkbox is checked    
          if(!empty($_POST['checkbox'])){
           #Checkbox selected code
          } else {
           #Checkbox not selected code
          }
          

          【讨论】:

          • 如果未选中该复选框,它将不会被发布,所以它现在总是被设置。
          • ^ NOT* 总是被设置
          【解决方案6】:

          在BS3你可以放

            <?php
                            $checked="hola";
                            $exenta = $datosOrdenCompra[0]['exenta'];
                            var_dump($datosOrdenCompra[0]['exenta']);
                            if(isset($datosOrdenCompra[0]['exenta']) and $datosOrdenCompra[0]['exenta'] == 1){
          
                                $checked="on";
          
                            }else{
                              $checked="off";
                            }
          
                        ?>
                        <input type="checkbox" id="exenta" name="exenta" <?php echo $checked;?> > <span class="label-text"> Exenta</span>
          

          请注意isset($datosOrdenCompra[0]['exenta'])的用法

          【讨论】:

            【解决方案7】:
            <?php
            
              if (isset($_POST['add'])) {
            
                $nama      = $_POST['name'];
                $subscribe = isset($_POST['subscribe']) ? $_POST['subscribe'] : "Not Checked";
            
                echo "Name: {$nama} <br />";
                echo "Subscribe: {$subscribe}";
            
                echo "<hr />";   
            
              }
            
            ?>
            
            <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST" >
            
              <input type="text" name="name" /> <br />
              <input type="checkbox" name="subscribe" value="news" /> News <br />
            
              <input type="submit" name="add" value="Save" />
            
            </form>
            

            【讨论】:

            • 你能在这里解释一下你的目标吗?
            【解决方案8】:

            我已经使用这个技巧好几年了,它在与 PHP 和数据库一起使用时,对于选中/未选中的复选框状态没有任何问题。

            HTML 代码:(用于添加页面)

            <input name="status" type="checkbox" value="1" checked>
            

            提示:如果您想将其显示为默认未选中,请删除“复选框”

            HTML 代码:(用于编辑页面)

            <input name="status" type="checkbox" value="1" 
            <?php if ($row['status'] == 1) { echo "checked='checked'"; } ?>>
            

            PHP 代码:(用于添加/编辑页面)

            $status = $_POST['status'];
            if ($status == 1) {
            $status = 1;
            } else {
            $status = 0;
            }
            

            提示:除非用户检查,否则总会有空值。所以,我们已经有 PHP 代码来捕获它,否则将值保持为 0。然后,只需将 $status 变量用于数据库。

            【讨论】:

            • 这是在纯简单的 php 中执行此操作的非常好的形式。但必须注意,复选框的值在激活时为字符串,如果选中,则为不存在的值。
            【解决方案9】:

            你可以用短的 if 来做到这一点:

            $check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;
            

            或使用新的 PHP7 Null coalescing operator

            $check_value = $_POST['my_checkbox_name'] ?? 0;
            

            【讨论】:

              【解决方案10】:

              保留开关位置的简约布尔检查

              <?php
              
              $checked = ($_POST['foo'] == ' checked');
              
              ?>
              
              <input type="checkbox" name="foo" value=" checked"<?=$_POST['foo']?>>
              

              【讨论】:

              • 在给出答案时,最好给出some explanation as to WHY your answer 是那个。在回答 非常 旧帖子 11 个其他答案时尤其如此。
              • 很高兴您认识到复选框需要保留其状态。但是,您执行此操作的代码不正确。
              【解决方案11】:
              <?php
              
              if(isset($_POST['nameCheckbox'])){
                  $_SESSION['fr_nameCheckbox'] = true;
              }
              
              ?>
              
              <input type="checkbox" name="nameCheckbox" 
              
              <?php 
              
              if(isset($_SESSION['fr_nameCheckbox'])){
                  echo 'checked'; 
                  unset($_SESSION['fr_nameCheckbox']);
              } 
              
              ?>
              

              【讨论】:

              【解决方案12】:

              当使用复选框作为数组时:

              <input type="checkbox" name="food[]" value="Orange">
              <input type="checkbox" name="food[]" value="Apple">
              

              你应该使用in_array():

              if(in_array('Orange', $_POST['food'])){
                echo 'Orange was checked!';
              }
              

              记得先检查数组是否设置好,如:

              if(isset($_POST['food']) && in_array(...
              

              【讨论】:

              • 复选框作为数组,foreach ($_POST['food'] as $selected_food) 用于选中的复选框很好,谢谢
              【解决方案13】:

              如果您的 HTML 页面如下所示:

              <input type="checkbox" name="test" value="value1">
              

              提交表单后,您可以通过以下方式进行检查:

              isset($_POST['test'])
              

              if ($_POST['test'] == 'value1') ...
              

              【讨论】:

              • 复选框在被选中时也可以有值on。因此为了兼容性,使用isset($_POST['checkboxName']) 会更容易。
              • 在未设置value属性的情况下,部分浏览器可能支持“on”值,但一般情况下最好设置value属性并在提交时检查。
              • 如果选中该框,“Value1”是否会改变?
              • @Developer_ACE 除非我误解了你,否则如果选中该复选框,此示例中的值将是 value1。如果不选中,$_POST['test'] 将根本不存在。
              • 如果使用序列化提交,请执行此操作。 var checkbox1_data = $("#checkboxinput_id").prop("checked")==false?"0":"1"; var data = $("#formveri").serialize()+"&a="+checkbox1_data;
              【解决方案14】:
              $check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;
              

              【讨论】:

              • 非常快而且非常聪明
              • 我见过的最佳解决方案
              【解决方案15】:
              $is_checked = isset($_POST['your_checkbox_name']) &&
                            $_POST['your_checkbox_name'] == 'on';
              

              Short circuit evaluation 会注意防止您在未提交时访问your_checkbox_name

              【讨论】:

                【解决方案16】:

                Zend 框架对复选框使用了很好的 hack,您也可以自己做:

                每个生成的复选框都与一个同名的隐藏字段相关联,位于复选框之前,值为“0”。然后,如果您的复选框作为值“1”,您将始终在生成的 GET 或 POST 中获得“0”或“1”值

                <input type="hidden" name="foo" value="0" />
                <input type="checkbox" name="foo" value="1"> 
                

                【讨论】:

                • 我也注意到了这一点,但我觉得使用它很安全:Zend Framework 也可以!
                • 这很有趣。但是,假设复选框被选中,用户代理提交第一个值而不是最后一个值的可能性很小吗?
                • @rybo111,对于用户代理,我不这么认为,但对于自定义 javascript 表单解析器,您应该小心。
                • 抱歉,谁能解释一下它是如何工作的?我不明白。如果始终只提交最后一个值(input[type="checkbox"] 的那个),为什么还要使用隐藏字段?
                • 当复选框未选中时,它不会在帖子中传输(因此仅传输隐藏的)。当它被检查时,它会被传输,并且会覆盖隐藏的值。
                【解决方案17】:

                好吧,上面的例子只有在你想插入一个值时才有效,对于将不同的值更新到不同的列没有用,所以这是我更新的小技巧:

                
                //EMPTY ALL VALUES TO 0 
                $queryMU ='UPDATE '.$db->dbprefix().'settings SET menu_news = 0, menu_gallery = 0, menu_events = 0, menu_contact = 0';
                            $stmtMU = $db->prepare($queryMU);
                            $stmtMU->execute();
                if(!empty($_POST['check_menus'])) {
                    foreach($_POST['check_menus'] as $checkU) {
                try {
                //UPDATE only the values checked
                    $queryMU ='UPDATE '.$db->dbprefix().'settings SET '.$checkU.'= 1';
                            $stmtMU = $db->prepare($queryMU);
                            $stmtMU->execute();  
                        } catch(PDOException $e) {
                          $msg = 'Error: ' . $e->getMessage();}
                
                        }
                }
                
                <input type="checkbox" value="menu_news" name="check_menus[]" />
                <input type="checkbox" value="menu_gallery" name="check_menus[]" />
                

                ....

                秘诀是首先更新所有 VALUES(在本例中为 0),并且由于只会发送检查的值,这意味着您获得的所有内容都应设置为 1,因此您获得的所有内容都将其设置为 1。

                示例是 PHP,但适用于一切。

                玩得开心:)

                【讨论】:

                  【解决方案18】:

                  让你的复选框的 html 就像

                  <input type="checkbox" name="check1">
                  

                  然后在提交表单后你需要检查一下

                  if (isset($_POST['check1'])) {
                  
                      // Checkbox is selected
                  } else {
                  
                     // Alternate code
                  }
                  

                  假设check1应该是您的复选框名称。如果您的表单提交方法是GET,那么您需要检查$_GET等变量

                  if (isset($_GET['check1'])) {
                  
                     // Checkbox is selected
                  } 
                  

                  【讨论】:

                    【解决方案19】:

                    了解isset,它是一个内置“函数”,可在 if 语句中用于判断变量是否已被使用或设置

                    例子:

                        if(isset($_POST["testvariabel"]))
                         {
                           echo "testvariabel has been set!";
                         }
                    

                    【讨论】:

                      【解决方案20】:

                      您可以根据表单的操作在 $_POST 或 $_GET 数组中检查相应的值是否已设置且非空。

                      即:使用“测试”的 name 的 POST 表单(即:&lt;input type="checkbox" name="test"&gt;,您可以使用:

                      if(isset($_POST['test']) {
                         // The checkbox was enabled...
                      
                      }
                      

                      【讨论】:

                        猜你喜欢
                        • 2016-01-21
                        • 1970-01-01
                        • 1970-01-01
                        • 2022-01-16
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多