我试图获取未选中的复选框。在这一刻,我只是得到那些被检查。这是我的代码。该值将被插入一个我不想留空的表,这就是为什么我需要取消选中这些复选框,以便我可以插入1表示已选中或0表示未选中:
<?php
if (!empty($_POST['menu'])) {
# code...
foreach ($_POST['menu'] as $value) {
# code...
echo "<p>ID Checkbox checked: ".$value;
}
}
?>
我需要获得两种状态的原因之一:选中或取消选中是因为我不想将数据库字段留空。
答案 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')");
}
´