Foros del Web » Programando para Internet » PHP »

checkbox checked por materia de alumno

Estas en el tema de checkbox checked por materia de alumno en el foro de PHP en Foros del Web. Hola que tal, tengo 2 consultas, la primera recoge todas las materias existentes: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original $materias = $mysqli -> query ( ...
  #1 (permalink)  
Antiguo 16/06/2014, 08:01
Avatar de totti026  
Fecha de Ingreso: junio-2011
Mensajes: 150
Antigüedad: 12 años, 10 meses
Puntos: 4
Pregunta checkbox checked por materia de alumno

Hola que tal,
tengo 2 consultas, la primera recoge todas las materias existentes:
Código PHP:
Ver original
  1. $materias = $mysqli->query("SELECT idMateria, nombre FROM materias ORDER BY idProyecto ASC");

y la segunda las materias que tiene que puede tener cada alumno:
Código PHP:
Ver original
  1. $malumno = $mysqli->query("SELECT idAlumno, idMateria FROM materiasalumno WHERE idAlumno={$idAlumno}");

E imprimo todos los alumnos:
Código PHP:
Ver original
  1. <?php                          
  2.     while ($row = $materias->fetch_array())
  3.     {                                
  4. ?>
  5. <li>
  6. <input type="checkbox" name="<?= $row['idMateria']; ?>" id="<?= $row['idMateria']; ?>" value="<?= $row['idMateria']; ?>"> <?= $row['nombre']);?>
  7. </li>
  8. <?php                                    
  9.     }

El alumno tiene que tener los checkbox en checked si tiene la materia asignada...dependiendo los resultados de la consulta $malumno.
  #2 (permalink)  
Antiguo 16/06/2014, 11:27
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: checkbox checked por materia de alumno

Del modo en que lo haces, solo se imprimirán los datos que existan en la base de datos, por lo que todos tendrían que estar marcados. Lo que puedes hacer es tener una lista con los nombres de cada materia, imprimir tantos checkbox como materias hayan y las materias que se guardaron en la base de datos, tenlas en un array aparte. Luego, al momento de imprimir los checkbox, verifica si el valor que le asignas al checkbox se encuentra en el array de las materias previamente guardadas, de ser así, marcas el checkbox.

Código PHP:
Ver original
  1. <?php
  2. $lista = array('Materia1', 'Materia2', 'Materia3');
  3. while ($guardadas[] = $materias->fetch_array());
  4.  
  5. foreach ($lista as $materia){
  6.     $checked = in_array($materia, $guardadas) ? 'checked' : '';
  7. ?>
  8.     <input
  9.           type = "checkbox"
  10.           name = "<?=$materia?>"
  11.           id = "<?=$materia?>"
  12.           value = "<?=$materia?>"
  13.           <?=$checked?>
  14.     />
  15. <?php
  16. }

Con la función in_array, buscas la materia de la lista en el array de las materias guardadas en la base de datos. La función devolverá true si es que se encuentra en ella o false si no está.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 16/06/2014, 18:22
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: checkbox checked por materia de alumno

Esto no hay necesidad de complicarlo, es mas, se puede hasta simplificar, la mayoria de las tareas cotidianas la base de datos puede realizarlas perfectamente sin ayuda de php, y, en muchos casos, mas rapido que este.
Por ejemplo, si en vez de dos consultas, haces una sola como esta:
Código MySQL:
Ver original
  1.     m.idMateria,
  2.     m.nombre,
  3.     IF(ma.idAlumno IS NULL,'','checked') AS laTiene
  4.     materias m
  5.     LEFT JOIN materiasalumno ma
  6.     ON      m.idMateria = ma.idMateria
  7.         AND ma.idAlumno = {$idAlumno}
  8.     m.idProyecto ASC

No hace falta mas nada, en el php haces:
Código PHP:
Ver original
  1. <?php                          
  2.     while ($row = $materias->fetch_array())
  3.     {                                
  4. ?>
  5. <li>
  6. <input type="checkbox" name="<?= $row['idMateria']; ?>" id="<?= $row['idMateria']; ?>" value="<?= $row['idMateria']; ?>" <?= $row['laTiene']; ?>> <?= $row['nombre']);?>
  7. </li>
  8. <?php                                    
  9.     }
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #4 (permalink)  
Antiguo 16/06/2014, 18:27
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: checkbox checked por materia de alumno

No sabía que se podía realiza una condición así en una consulta. Buena.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 16/06/2014, 19:13
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: checkbox checked por materia de alumno

@NSD es un master en SQL
__________________
Salu2!
  #6 (permalink)  
Antiguo 16/06/2014, 21:29
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: checkbox checked por materia de alumno

Italico no, solo soy otro aprendiz mas, igual que todos.

El unico secreto de esta consulta es poner las condiciones en el JOIN, que es el filtrado que se ejecuta mientras se arma el conjunto de resultados y no en el WHERE que se ejecuta una vez ya esta armado.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #7 (permalink)  
Antiguo 17/06/2014, 00:02
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: checkbox checked por materia de alumno

Tenía la idea de hacer la consulta con LEFT JOIN para así traer a las materias existentes y a las que fueron previamente guardadas y ya en la impresión de datos, hubiera tenido que realizar una condición en la cual evaluaría el valor de la variable correspondiente a la materia guardada y en caso de estar, se marcaba el checkbox, pero haciendo la evaluación en la consulta, es más eficiente. De hecho, eso equivaldría a lo que quería hacer, solo que lo hiciste en MySQL.

Interesante estructura de la condición, como cuando se usan operadores ternarios.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 18/06/2014, 21:44
Avatar de totti026  
Fecha de Ingreso: junio-2011
Mensajes: 150
Antigüedad: 12 años, 10 meses
Puntos: 4
Respuesta: checkbox checked por materia de alumno

Probado y funcionando al 100% ! gracias a todos por su atención y aportes,
y NSD si eres un master, estoy seguro que a muchos les ayudará esto. =)

Etiquetas: checkbox, checked, mysql, select
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 09:40.