我试图得到那些未选中的复选框。目前,我只是得到那些被检查的。这是我的代码。该值将插入到我不想将其保留为空的表中,这就是为什么我需要取消选中这些复选框,以便我可以插入 1 表示选中或 0 表示未选中:
<?php
if (!empty($_POST['menu'])) {
# code...
foreach ($_POST['menu'] as $value) {
# code...
echo "<p>ID Checkbox checked: ".$value;
}
}
?>
我需要同时获得两种状态的原因之一:选中或未选中是因为我不想将数据库字段留空。
未选中的复选框不会被开机自检。如果您知道哪些字段应该在那里,则可能必须手动列出它们。
复选框的奇妙之处在于,当您没有选中复选框并提交表单时,不会向服务器发送任何内容。以这个复选框为例:
<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.
}
希望能给你一些见解!
假设它们的名称是否相同,并且您知道可以使用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方法以及客户端解决方案。
<input type="hidden" name="checkbox[8]" value="0">
<input type="checkbox" name="checkbox[8]" value="8">
这也是发布 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没有显示,但我从另一个未显示的查询中获取,因此您必须自己查询(:
´
$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')");
}
´