Foros del Web » Programando para Internet » PHP »

Lista completa de checkbox y marcar los seleccionados

Estas en el tema de Lista completa de checkbox y marcar los seleccionados en el foro de PHP en Foros del Web. Buenas… Necesito resolver este problemilla: Lista completa de checkbox desde mysql y marcar los seleccionados Dispongo de 3 tablas MySQL: Lista_empresas, lista_servicios, relación_empresas_servicios Cada empresa ...
  #1 (permalink)  
Antiguo 08/10/2010, 17:34
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Pregunta Lista completa de checkbox y marcar los seleccionados

Buenas…
Necesito resolver este problemilla: Lista completa de checkbox desde mysql y marcar los seleccionados
  • Dispongo de 3 tablas MySQL:
Lista_empresas, lista_servicios, relación_empresas_servicios

Cada empresa puede tener disponible varios tipos de servicios, para tal fin tenemos la tabla que mantiene la relación de empresas con los tipos de servicios.

Partiendo de que estamos en un formulario de una determinada empresa para modificar datos. A dicha empresa le mostramos todos servicios disponibles de la tabla “lista_servicios” en una lista de <input type="checkbox"> y queremos que salgan marcados los servicios que tiene activos.

Esto es la estructura de las 3 tablas:
Lista_empresas: id_empresa |nombre_empresa
Lista_servicios: id_servicio | nombre_servicio
Relación_empresas_servicios: id_r | id_empresa | id_servicio


Este es el código PHP que tengo hasta el momento sin lograr el resultado final:
Código PHP:
<?php
 
include('conexio.php');

 echo 
"Empresa por URL: ".$_GET[id_empresa]."<hr>";
 
 
$sql =  " SELECT * FROM tipo_servicios ORDER BY nombre_servicio "  ;
$res mysql_query($sql);
while(
$r mysql_fetch_array($res)){


   
$sql2 " SELECT * FROM relacion_empresas_servicios WHERE id_empresa = '$_GET[id_empresa]' ";
   
$res2=mysql_query($sql2);
   while(
$r2=mysql_fetch_array($res2)){

        if( 
$r2[id_empresa] == $_GET[id_empresa]) { $checked "checked";} else { $checked ""; }

        } 
// de while r2
      

 
$num=$num+1;
  print(
"
<input type=\"checkbox\" name=\"actividades[',$num,']\" value=\"$r[id_servicio]\" class=\"corto\" $checked /> <label for=\"$r[nombre_servicio]\">$r[nombre_servicio]</label> <br />
       "
);
if(
$num%2==0) { print("<br />"); }


              

// de while $r
?>
He probado distintas consultas MysQL trabajando con uniones sin obtener el resultado deseado, en unos casos me salen los tipos de servicios repetidos, en otros solo sale el último servicio marcado, en otros me salen todos, en otros ninguno… estoy dando palos de ciego sin lograr resolver el problema.

Espero que se comprenda el objetivo final.
  #2 (permalink)  
Antiguo 08/10/2010, 19:11
Avatar de carmagedon  
Fecha de Ingreso: junio-2005
Ubicación: Argentina
Mensajes: 794
Antigüedad: 18 años, 10 meses
Puntos: 23
Respuesta: Lista completa de checkbox y marcar los seleccionados

Hola,

Antes que nada, ése código te funciona bien? O sea, me refiero a los datos que se devuelven de la base de datos.
Mirá, ahí te lo acomodé, pero me parece que faltaba limpiarlo bastante, y otra cosa, hay algo que no sé si está permitido hacer, porque jamaz se me hubiese ocurrido, y es en la parte ésta:

Código HTML:
Ver original
  1. <input type='checkbox' name='actividades[',".$num.",']' ..>


Y luego al código, te lo acomodé un poco, usalo así si te gusta.

Código PHP:
Ver original
  1. <?php
  2. include('conexio.php');
  3. echo "Empresa por URL: ".$_GET["id_empresa"]."<hr>";
  4.  
  5. $sql = "SELECT * FROM tipo_servicios ORDER BY nombre_servicio";
  6. $res = mysql_query($sql);
  7. while($r = mysql_fetch_array($res)) {
  8.     $sql2 = "SELECT * FROM relacion_empresas_servicios WHERE id_empresa = '".$_GET["id_empresa"]."'";
  9.     $res2=mysql_query($sql2);
  10.     while($r2=mysql_fetch_array($res2)) {
  11.         if($r2["id_empresa"] == $_GET["id_empresa"]) {
  12.             $checked = "checked";
  13.         } else {
  14.             $checked = "";
  15.         }
  16.     } // de while r2
  17.     $num=$num+1;
  18.     echo "<input type='checkbox' name='actividades[".$num."]' value='".$r["id_servicio"]."' class='corto' ".$checked." />";
  19.     echo "<label for='".$r["nombre_servicio"]."'>".$r["nombre_servicio"]."</label> <br />";
  20.     if($num &#37; 2==0) {
  21.        echo "<br />";
  22.     }
  23. } // de while $r
  24. ?>

Si te sigue sin funcionar, avisa, quizás otro usuario entienda cual es el problema.
Saludos.

EDIT: Guarda que a veces éstos quotes no lo hacen 100% bien, si mirás está mal transformado en if($num % 2==0) { y es lo mismo que tenés en tu código, asique si lo copías, mirá bien que esté bien copiado el código.
__________________
Freelance - Aplicaciones Web
  #3 (permalink)  
Antiguo 08/10/2010, 20:09
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Lista completa de checkbox y marcar los seleccionados

Gracias carmagedon
Cita:
Iniciado por carmagedon Ver Mensaje
Hola,

Antes que nada, ése código te funciona bien? O sea, me refiero a los datos que se devuelven de la base de datos.
Si, los datos se son extraídos bien de la base de datos sin problema.
El asunto que una determinada empresa, (id_empresa = 1) muestre en la lista de los checkbox los servicios (id_servicios) seleccionados que se encuentren en la tabla de relaciones.
Tal como está el código, me muestra todos los checkbox seleccionados y repetidos 3 veces.
Id_empresa contienen 3 servicios, debería mostrar en el listado de los checkbox, solamente 3 checkbox seleccionados, el resto de los checkbox desmarcados.
  #4 (permalink)  
Antiguo 08/10/2010, 20:55
Avatar de carmagedon  
Fecha de Ingreso: junio-2005
Ubicación: Argentina
Mensajes: 794
Antigüedad: 18 años, 10 meses
Puntos: 23
Respuesta: Lista completa de checkbox y marcar los seleccionados

Hola,

Mmm, lo unico que le encontré medio raro fue acá:

Código PHP:
Ver original
  1. <?php
  2. include('conexio.php');
  3. echo "Empresa por URL: ".$_GET["id_empresa"]."<hr>";
  4.  
  5. $sql = "SELECT * FROM tipo_servicios ORDER BY nombre_servicio";
  6. $res = mysql_query($sql);
  7. while($r = mysql_fetch_array($res)) {
  8.     $sql2 = "SELECT * FROM relacion_empresas_servicios WHERE id_empresa = '".$_GET["id_empresa"]."'";
  9.     $res2=mysql_query($sql2);
  10.     //Todo bien hasta acá....
  11.    
  12.     while($r2=mysql_fetch_array($res2)) {
  13.         if($r2["id_empresa"] == $_GET["id_empresa"]) {
  14.             $checked = "checked";
  15.         } else {
  16.             $checked = "";
  17.         }
  18.     } // de while r2
  19.    
  20.     /*
  21.      * OBSERVACIÓN:
  22.      * Lo que se almacenará en checked será el último $r2, es decir,
  23.      * cuando termina el while, ese valor va a parar al checked...
  24.      */
  25.    
  26.     $num=$num+1;
  27.     echo "<input type='checkbox' name='actividades[".$num."]' value='".$r["id_servicio"]."' class='corto' ".$checked." />";
  28.     echo "<label for='".$r["nombre_servicio"]."'>".$r["nombre_servicio"]."</label> <br />";
  29.     if($num % 2==0) {
  30.         echo "<br />";
  31.     }
  32. } // de while $r
  33. ?>

Está comentado.
Es el tema del checked, es que al estar dentro de un while, se queda cargado con el registro del último, o sea, es un bucle que la variable se va reactualizando y termina con el ultimo.

Pero no sé que decirte ya, quizás espera a otro usuario que te de una mano...

Suerte..
__________________
Freelance - Aplicaciones Web
  #5 (permalink)  
Antiguo 09/10/2010, 17:13
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Lista completa de checkbox y marcar los seleccionados

Cita:
Iniciado por carmagedon Ver Mensaje
Está comentado.
Es el tema del checked, es que al estar dentro de un while, se queda cargado con el registro del último, o sea, es un bucle que la variable se va reactualizando y termina con el ultimo.

Pero no sé que decirte ya, quizás espera a otro usuario que te de una mano...

Suerte..
oppp... gracias por las pista, voy a mirar el WHILE.

Gracias de nuevo
  #6 (permalink)  
Antiguo 11/10/2010, 09:33
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Respuesta: Lista completa de checkbox y marcar los seleccionados

buenas!!

y si inicializas la variable antes de cada consulta??

osea que antes de la consulta dejas $cheked = ""

un saludo!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #7 (permalink)  
Antiguo 12/10/2010, 07:38
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Lista completa de checkbox y marcar los seleccionados

Cita:
Iniciado por HalconVigia Ver Mensaje
buenas!!

y si inicializas la variable antes de cada consulta??

osea que antes de la consulta dejas $cheked = ""

un saludo!!
Gracias por responder.
Sigo con el mismo problema aun que inicie la variable antes de las consultas.

El tema esta en el ultimo WHILE como bien ha comentado el amigo carmagedon
aun sigo intentado comprender como hacer esto.

Un saludo.

Etiquetas: checkbox, lista, mysql
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 08:30.