从数组更新数据库复选框动态


Updating database from an array checkbox dynamic

如何从具有不同复选框和状态的表单更新数据库?我有两种表格:-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'

试试这个句子,让我知道它是否对你有用。

问候