如何获取复选框未被选中的值?

4
我有一个复选框列表,当我勾选复选框时,应该将值插入数据库。当我取消勾选复选框时,应该从数据库中删除数据。
如果我在复选框中分配一个值,那么我只能获取已选中的复选框值。 如果我使用隐藏字段,则可以获取所有复选框的值,但我不知道哪个是选中的,哪个是未选中的。
有人可以帮忙吗?
    $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
@Castilho 他们不是;查询只会在表单提交后发生。 - octern
3个回答

6
复选框的标记如下所示:

<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

我在一个博客中找到了这个(不太语义化,但是可行的)解决方案,首先引入一个与复选框相同名称和值的隐藏输入,以便在复选框未被选中时发送该值:

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

它有一些缺点,特别是如果您将多个复选框作为数组发送,但对于常见情况来说,这种方法很有效。


1
<!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 - user1900387

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接