Foros del Web » Programando para Internet » PHP »

PHP OO Mostrar datos almacenado por medio de Checkbox

Estas en el tema de Mostrar datos almacenado por medio de Checkbox en el foro de PHP en Foros del Web. Hola, muchas gracias por pasar y poder ayudarme, tengo 3 trablas, las cuales son las siguientes: La idea es que un usuario puede tener uno ...
  #1 (permalink)  
Antiguo 21/11/2016, 10:51
Avatar de MLDGATO  
Fecha de Ingreso: marzo-2011
Ubicación: Guatemala
Mensajes: 113
Antigüedad: 13 años, 1 mes
Puntos: 2
Pregunta Mostrar datos almacenado por medio de Checkbox

Hola, muchas gracias por pasar y poder ayudarme, tengo 3 trablas, las cuales son las siguientes:

La idea es que un usuario puede tener uno o más niveles asignados en el sistema, en total son 4 niveles, la idea es que utilizando checkbox pueda asignar o desasignar niveles asi que necesito que al cargar la página se vean los cuatro niveles cada uno en un checkbox y solo estén seleccionados los que están asignados, el problema es que si un usuario tiene por ejemplo dos niveles los checkbox se duplican, si tiene tres niveles asignados los checkbox se triplican, este es el código que estoy usando:

Código PHP:
Ver original
  1. $consultaNiveles = $DatosUsusario->runQuery("SELECT * FROM Niveles");
  2. $consultaNiveles->execute();
  3. while($Nivelesrow=$consultaNiveles->fetch(PDO::FETCH_ASSOC))
  4. {
  5.     $consultaNivelesAsig = $DatosUsusario->runQuery("SELECT * FROM NivelesAsignados WHERE IdUsuario = :IdUsuario");
  6.     $consultaNivelesAsig->bindparam(":IdUsuario", $IdUsuario);
  7.     $consultaNivelesAsig->execute();
  8.     while($Asignarow=$consultaNivelesAsig->fetch(PDO::FETCH_ASSOC))
  9.     {
  10.         if($Nivelesrow['IdNivel'] == $Asignarow['Nivel'])
  11.         {
  12.            
  13.             echo '<div class="form-goup"><label><input type="checkbox" name="NivelEscolar" id="'.$Nivelesrow['NombreNivel'].'" checked value="'.$Nivelesrow['IdNivel'].'" onclick="ModificarNivel(this.value, this.id)">'.$Nivelesrow['NombreNivel'].'</label></div>';
  14.         }
  15.         else
  16.         {
  17.             echo '<div class="form-goup"><label><input type="checkbox" name="NivelEscolar" id="'.$Nivelesrow['NombreNivel'].'" value="'.$Nivelesrow['IdNivel'].'" onclick="ModificarNivel(this.value, this.id)">'.$Nivelesrow['NombreNivel'].'</label></div>';
  18.         }
  19.     }
  20. }

Me debería quedar así:


Pero me queda así:


Muchas gracias por el apoyo.
  #2 (permalink)  
Antiguo 21/11/2016, 19:30
 
Fecha de Ingreso: abril-2012
Mensajes: 124
Antigüedad: 12 años
Puntos: 3
Respuesta: Mostrar datos almacenado por medio de Checkbox

El problema es que tienes un while dentro de otro, así se multiplican los checkbox.
podrías probar algo así:

Leer las categorías
Leer las categorías del usuario
Hacer un array con las caregorías y marcar con 'true' las que tiene asignadas el usuario
Un bucle con el array para imprimir los checkbox


Código PHP:
Ver original
  1. $user_cat = array();
  2. while($Nivelesrow=$consultaNiveles->fetch(PDO::FETCH_ASSOC))
  3. {
  4.     $user_cat[$Nivelesrow['IdNivel']] = [
  5.     'id' => $Nivelesrow['IdNivel'],
  6.     'nombre' => $Nivelesrow['NombreNivel'],
  7.     'asignado' => false
  8.     ];
  9. }
  10. ...
  11. while($Asignarow=$consultaNivelesAsig->fetch(PDO::FETCH_ASSOC)){
  12.     $user_cat[$Asignarow['Nivel']]['asignado'] = true;
  13. }
  14. foreach ($user_cat as $categoria){
  15.     if($categoria['asignado'] == true{
  16.     ...
  17.     }else{
  18.     ...
  19.     }
  20. }
__________________
Mi web de programación en PHP en construcción, claro. Un dia de esos pongo algo.

Etiquetas: almacenado, checkbox, medio, select, tabla, usuario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:02.