0

How can I update database from a form with different checkbox and status? I have two forms: -1 for inserting menus to assign to a user and.. -2 for updating the menus already asigned to this user. I have implented the form to assign different menus to a user and it works just fine (see form1_1 and form1_2 code) But my problem comes when i want to update/change the menus that i've already assign to this user and assign another menus to the user (see form2 code)

Form1_1 code: (This is part of the form that helps me assign menus to a user)

    <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 This is the code that gets the menus from the form and insert 'em on my 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')"); 
    }       

This code works perfect as expected, it inserts the menus assigned to the user, but my problem is this: when updating the menus assigned to the user. This is what it doesn't work 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>

...And this is the code that handles the updates from the code above 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'"); 
 }

If I use this code it only updates menus with 0's and assigns the last menu to each user, like this: menu1->8 active->0; menu2->8 active->0; menu3->8 active->0 and so on.

1 Answer 1

1

I think you should try modifiy your update sentence

"UPDATE menus_usuarios SET id_menu = '$id_menu', id_usuario = '$id', estado = '$activo' WHERE id_usuario = '$id'"

since if you do that all the menus that were set for the user will change, instead of modify the one you want, also you won't modify a foreing key for your menu, you only should change the status of it, i bet your status field is "estado".

So you could try the next sentence

UPDATE menus_usuarios SET id_usuario = '$id', estado = '$activo' WHERE id_usuario = '$id' AND id_menu = '$id_menu'

Try this sentence and let me know if it works for you.

Greets

Sign up to request clarification or add additional context in comments.

1 Comment

Damn foo!! you're la hostia!! how couldn't i see that??? indeed it works as i wanted!! thank you!!! (Y)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.