如何从具有不同复选框和状态的表单更新数据库?我有两种表格:-1用于插入要分配给用户的菜单,以及。。-2用于更新已经分配给该用户的菜单。我已经实现了为用户分配不同菜单的表单,它运行得很好(请参阅表单1_1和表单1_2代码)但是,当我想更新/更改我已经分配给这个用户的菜单,并将另一个菜单分配给用户时,我的问题就来了(见表格2代码)
Form1_1代码:(这是帮助我将菜单分配给用户的表单的一部分)
<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>
Form1_2这是从表单中获取菜单并将其插入我的DB:的代码
$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')");
}
这段代码运行得很好,它插入了分配给用户的菜单,但我的问题是:当更新分配给该用户的菜单时。这就是它不起作用的地方FORM2:
<td>
<?php
$query_menus_habilitados_user = mysql_query("SELECT a.nombre_menu, b.estado, a.id_menu FROM menus_usuarios b join menus a ON a.id_menu = b.id_menu WHERE b.id_usuario = '$id_usuario'");
while ($checkbox_habilitados = mysql_fetch_row($query_menus_habilitados_user)) {
# code...
if ($checkbox_habilitados[1] == 1) {
# code...
?>
<input type="checkbox" name="menus<?php echo $checkbox_habilitados[2] ?>" value="<?php echo $checkbox_habilitados[2] ?>" checked="checked"> <?php echo $checkbox_habilitados[0] ?>
<?php
}else{
?>
<input type="checkbox" name="menus<?php echo $checkbox_habilitados[2] ?>" value="<?php echo $checkbox_habilitados[2] ?>"> <?php echo $checkbox_habilitados[0] ?>
<?php
}
}
?>
</td>
这是处理FORM2_:以上代码更新的代码
$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("UPDATE menus_usuarios SET id_menu = '$id_menu', id_usuario = '$id', estado = '$activo' WHERE id_usuario = '$id'");
}
如果我使用这个代码,它只会用0更新菜单,并将最后一个菜单分配给每个用户,如下所示:menu1->8 active->0;菜单2->8活动->0;menu3->8活动->0等等。
我认为你应该尝试修改你的更新句子
"UPDATE menus_usuarios SET id_menu='$id_menu',id_usuario='$id',estado='$activo'WHERE id_usuariao='$id'"
因为如果你这样做,所有为用户设置的菜单都会改变,而不是修改你想要的菜单,你也不会修改菜单的外键,你只需要改变它的状态,我敢打赌你的状态字段是"estado"。
所以你可以试试下一句
UPDATE menus_usuarios SET id_usuario='$id',estado='$activo'WHERE id_usurio='$id'AND id_menu='$id_menu'
试试这个句子,让我知道它是否对你有用。
问候