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

时间:2015-02-22 16:24:18

标签: php html arrays

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

1 个答案:

答案 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'

试试这句话,让我知道它是否适合你。

迎接