如何从具有不同复选框和状态的表单更新数据库? 我有两种形式: -1用于插入分配给用户的菜单和.. -2用于更新已签名给该用户的菜单。 我已经实现了表单为用户分配不同的菜单,它工作得很好(参见form1_1和form1_2代码) 但是当我想更新/更改我已经分配给该用户的菜单并为用户分配另一个菜单时,我的问题出现了(参见form2代码)
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这是从表单获取菜单并在我的数据库中插入em的代码:
$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-&gt; 8 active-&gt; 0; menu2-&gt; 8 active-&gt; 0; menu3-&gt; 8 active-&gt; 0等等。
答案 0 :(得分:1)
我认为你应该尝试修改你的更新句子
“UPDATE menus_usuarios SET id_menu ='$ id_menu',id_usuario ='$ id',estado ='$ activo'WHERE id_usuario ='$ id'”
因为如果你这样做,所有为用户设置的菜单都会改变,而不是修改你想要的菜单,你也不会修改菜单的外出键,你只应该改变它的状态,我打赌你的状态字段是“estado”。
所以你可以尝试下一句话
UPDATE menus_usuarios SET id_usuario ='$ id',estado ='$ activo'WHERE id_usuario ='$ id'AND id_menu ='$ id_menu'
试试这句话,让我知道它是否适合你。
迎接