【问题标题】:how to get the unchecked value from checkbox?如何从复选框中获取未选中的值?
【发布时间】:2012-04-08 14:03:48
【问题描述】:

我有一个复选框列表,当我选中复选框时,它应该将值插入数据库。当我取消选中该复选框时,它应该是从数据库中删除数据。

如果我在复选框中分配一个值,那么我只能获得选中的复选框值。 如果我使用隐藏字段,那么我可以获得复选框的所有值,但是我不知道哪个 1 是选中的,哪个 1 是未选中的。

有人可以帮忙吗?

    $num="3";  
    for($i=1;$i<10;$i++){
    ?>
    <form name="form1" method="post" action="testcheckbox.php"> 
        <input type="hidden" name="task" value="validatesn">
        <input type="hidden" name="validate[]" value="<?php echo $i;?>">
        <input type="checkbox" name="validate[]" <?php if($num==$i){ echo "checked=checked";} ?> />Serialno<?php echo $i."<br/>"; ?>
    <?php
        $i++;
    }   
    ?>
        <input type="submit" name="submit" value="Validate" />
    </form>

    <?php
    if($_REQUEST['task'] == 'validatesn'){
       $valid=$_POST['validate'];
       foreach($valid as $v){
           echo $v;  //show all checkbox values
           //if checkbox= checked then insert value into database
           //if untick the checked checkbox then delete data from database
    }
  }
?>

【问题讨论】:

  • 真的每次有人点击复选框时都必须写入数据库吗?!
  • @Castilho 他们不是;查询仅在表单提交后发生。

标签: php checkbox


【解决方案1】:

复选框的标记如下所示:

<input type="checkbox" value="myvalue" name="validate[]">

当您发布表单时,您将在$_POST 中看到一个名为validate 的数组。

如果该数组为空,则未选中该复选框。如果该数组包含“myvalue”,则该复选框已选中。

如果您正在处理这样的多个复选框:

<input type="checkbox" value="myvalue1" name="validate[]">
<input type="checkbox" value="myvalue2" name="validate[]">

您的脚本需要知道$_POST 中的validate 数组可以包含myvalue1myvalue2 的值。然后您可以查看$_POST['validate'],如果该值存在于数组中,则选中该复选框。您可以使用array_diff() 轻松完成此操作,而无需编写任何循环。

【讨论】:

    【解决方案2】:

    我在 blog 中找到了这个(不是语义的,但有效的)解决方案,包括首先引入一个具有相同名称的隐藏输入以及在未选中复选框时要发送的值:

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

    它有一些缺点,尤其是当您将多个复选框作为一个数组发送时,但在常见场景中可以解决问题。

    【讨论】:

      【解决方案3】:
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
      <title>Untitled Document</title>
      </head>
      
      <body>
      <form name="chk" action="" method="post">
      <?php $num=2;
      for($q=0; $num>$q; $q++)
      {
      ?>
      <input type="text" name="fruits[<?php echo $q; ?>][a]" >
      <input type="text" name="fruits[<?php echo $q; ?>][b]">
      <input type="text" name="fruits[<?php echo $q; ?>][c]">
      <input type="hidden"  name="fruits[<?php echo $q; ?>][d]" value="0"  />
      <input type="checkbox"  name="fruits[<?php echo $q; ?>][d]" value="1"  />
      <input type="hidden"  name="fruits[<?php echo $q; ?>][e]" value="0"  />
      <input type="checkbox"  name="fruits[<?php echo $q; ?>][e]" value="1"  />
      <br />
      <?php
      }
      ?> 
      <input type="submit" name="ok" value="ok" />
       </form>
      <?php 
      
      
      if(isset($_POST['ok']))
      {
      
      foreach($_POST['fruits'] as $company=>$row){
      
          foreach($row as $fruit){
      
                      echo $fruit;
      
          }
      }
      }
      ?>
      </body>
      </html>
      

      【讨论】:

      • s.Gnanasekar vilangulathur
      猜你喜欢
      • 2016-06-01
      • 1970-01-01
      • 2013-03-21
      • 2012-02-19
      • 1970-01-01
      • 2023-03-18
      • 2013-09-15
      • 2013-11-14
      相关资源
      最近更新 更多