Foros del Web » Programando para Internet » PHP »

Problemas con los checkbox

Estas en el tema de Problemas con los checkbox en el foro de PHP en Foros del Web. Buenos dias a todos. Tengo dos bucles que son los siguientes BUCLE 1 ($consu1) id | descripcion 1 Rojo 2 Azul 3 verde 4 negro ...
  #1 (permalink)  
Antiguo 16/06/2006, 04:51
Avatar de JuanKa  
Fecha de Ingreso: septiembre-2004
Mensajes: 468
Antigüedad: 20 años, 2 meses
Puntos: 1
Problemas con los checkbox

Buenos dias a todos.
Tengo dos bucles que son los siguientes
BUCLE 1 ($consu1)

id | descripcion
1 Rojo
2 Azul
3 verde
4 negro
5 amarillo
6 rosa
7 violeta
8 fucsia
9 dorado

y en otro tabla tengo almacenado lo siguiente:

BUCLE 2 ($consu2)

id | descripcion
2 Azul
3 verde
6 rosa
9 dorado

Ahora lo que deseo es que me recorra todo $consu1 y que luego me recorra el $consu2, es decir :
while ($c1=mysql_fetch_array($consu1))
{
....while ($c2=mysql_fetch_array($consu2))
.......{
..........if ($c1[id] == $c2[id])
.............{
................echo "<input type='checkbox' name='chk[]' checked value='$c1[id]'>$c1[descripcion]"; .............}
..........else
.............{
................echo "<input type='checkbox' name='chk[]' value='$c1[id]'>$c1[descripcion]";
..............}
........}
}
Con esto DEBERIA OBTENER TODOS LOS COLORES CON SU RESPECTIVOS CHECKBOX PERO LO QUE ME HACE ME MUESTRA SOLO
id | descripcion
2 Azul ...... MARCADO
3 verde..... NO MARCADO
6 rosa......NO MARCADO
9 dorado... NO MARCADO

Y LO QUE SE DESEA ES :
1 Rojo.......NO MARCADO
2 Azul.......MARCADO
3 verde.......MARCADO

4 negro.......NO MARCADO
5 amarillo.......NO MARCADO
6 rosa.......MARCADO
7 violeta.......NO MARCADO
8 fucsia.......NO MARCADO
9 dorado.......MARCADO

Eso es lo que deseo que me salga con su respectivo check box, pero donde esta el error que no lo ubico
Gracias
  #2 (permalink)  
Antiguo 16/06/2006, 09:07
Avatar de JuanKa  
Fecha de Ingreso: septiembre-2004
Mensajes: 468
Antigüedad: 20 años, 2 meses
Puntos: 1
Como se podria realizar esto que ya no se que hacer con esa rutina.

Gracias
  #3 (permalink)  
Antiguo 16/06/2006, 09:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
El problema es tu bucle, no he probado pero en C hay ciclos multiples trata algo asi:
Código PHP:
while ($c1=mysql_fetch_array($consu1) && $c2=mysql_fetch_array($consu2))
{
       if (
$c1[id] == $c2[id])
       {
              echo 
"<input type='checkbox' name='chk[]' checked value='$c1[id]'>$c1[descripcion]";
       }
       else
       {
             echo 
"<input type='checkbox' name='chk[]' value='$c1[id]'>$c1[descripcion]";
        }

ahora aqui la cosa es que ambos tengan la misma longitud, o si no se va a cortar antes el bucle que termine antes.
  #4 (permalink)  
Antiguo 16/06/2006, 09:29
Avatar de JuanKa  
Fecha de Ingreso: septiembre-2004
Mensajes: 468
Antigüedad: 20 años, 2 meses
Puntos: 1
Hola GATORV

Ahora con la rutina que tu me distes solo me muestran lo siguiente

2 Azul
3 verde
6 rosa
9 dorado

pero los 4 desmarcados
pero no me muestra todos.

No se si me deje entender

Pero el checked que estaba en la parte afrimativa lo quite y lo puse en la negativa me dio como resultado lo siguiente:

2 Azul
3 verde
6 rosa
9 dorado

Es decir estos SI estan los 4 marcados pero no me muesta TODO.

Gracias
  #5 (permalink)  
Antiguo 16/06/2006, 14:00
Avatar de Stickmaster2004  
Fecha de Ingreso: septiembre-2004
Ubicación: Barranquilla
Mensajes: 568
Antigüedad: 20 años, 2 meses
Puntos: 0
Checkbox que lio!!!!!!!!!!!

hola.

mira yo tengo algo parecido, y sobre todo es en la actualizacion, por que la insercion me la hace perfecta.

resulta que tengo lo siguiente:

una tabla usuario que tiene una clave principal llamada: act_codigo.
una tabla als_sistema que tiene una clave principal llamada: als_codigo.
una tabla activoxalsis que se compone de las llaves primarias de las dos tablas anteriores:
act_codigo y als_codigo.

ahora bien, un activo puede tener varias alimentaciones del sistema es decir:

tabla:activoxalsis

act_codigo als_codigo
1 1
1 2
1 3

esto quiere decir que un activo tiene varias alimentaciones del sistema y bueno esto se alamacena en la tabla activoxalsis.

yo en la actualizacion tengo que mostrar todas las alimentaciones que hay en el alsistema es decir puedo tener lo siguiente.

tabla:alsistema

als_codigo als_descripcion
1 electrico
2 solar
3 mecanico
4 diesel
5 agua

si en la insercion el usuario con codigo:1 escojio, tres tipos de alimentacion digamos:electrico,solar,mecanico, como se ve reflejado en la tabla activoxalsis, mi pregunta es la siguiente:

yo traigo los valores que se encuentran chekeados, pongo en checked donde es electrico,solar y mecanico y los demas sin chekear, pero mi problema es cuando por ejemplo deseo deschequear uno que se encontraba registrado en la tabla, como reconozco en la otra pagina utlizando POST que yo deschekee ese checkbox valga la redundancia.

por decir, si una persona quita electrico osea que deschekea el checkbox, como hago para decir que elimine eso de la tabla, si supuestamente no se pueden recojer los values de los checkbox que no son checkeados.

espero que me hallan comprendido, mi problema es similar al de juanka, pues tambien utilizo un array de la forma check[].

espero que si tienen un ejemplillo logren ayudarme.

saludos.
__________________
Solo el que se basa en conocimiento basico y cultiva el aprendizaje obtendra sabiduria
  #6 (permalink)  
Antiguo 19/06/2006, 08:32
Avatar de JuanKa  
Fecha de Ingreso: septiembre-2004
Mensajes: 468
Antigüedad: 20 años, 2 meses
Puntos: 1
Alguien me puede ayudar sobre esta rutina que todavia no obtengo la relacion de los checkbox, es decir los marcados y no marcados.

Gracias
  #7 (permalink)  
Antiguo 19/06/2006, 08:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Mira si no te importa usar varios bucles podrias hacer esto:
Código PHP:
$colores = array();
while( 
$row mysql_fetch_array$consul1 ) ) { // obtener todos
    
$colores[$row["id"]] = $row["color"];
}

$marcados = array();
while( 
$row mysql_fetch_array$consul2 ) ) { // obtener los marcados
    
$marcados[] = $row["id"];
}

foreach( 
$colores as $id => $color ) {
    
$template "<input type=\"checkbox\" name=\"colores\" value=\"%s\"%s>%s";
    
$selected "";
    if( 
in_array$id$marcados ) ) $selected " checked=\"checked\"";

    echo 
sprintf$template$id$selected$color );

  #8 (permalink)  
Antiguo 19/06/2006, 08:57
Avatar de JuanKa  
Fecha de Ingreso: septiembre-2004
Mensajes: 468
Antigüedad: 20 años, 2 meses
Puntos: 1
Espera lo voy a ser y te cuento espero que salga con esto porque ya estoy cansadito con esto.

Gracias
  #9 (permalink)  
Antiguo 19/06/2006, 09:18
Avatar de JuanKa  
Fecha de Ingreso: septiembre-2004
Mensajes: 468
Antigüedad: 20 años, 2 meses
Puntos: 1
GatorV

Yeeeeeeeee

Eso era lo que realmente queria.... te pasastes ya me estaba loqueando usaba el while, luego el for, y por ultimo el foreach y no me salia nada,
Es que en el segundo while del que haci yo solo entraba una sola vez y el resto no entraba... ¿ AHora por que no entraba ???? vete a saber porque....

Pero al fin Salio .

Ahora para grabar estas modificaciones te olvidaste el simbolo de arregloes decir:

$template = "<input type=\"checkbox\" name=\"colores[]\" value=\"%s\"%s>%s";


PERO HAY UNA COSA ... QUE REALMENTE NO ENTIENDO ES LA RUTINA

$colores = array();
while( $row = mysql_fetch_array( $consul1 ) ) { // obtener todos
$colores[$row["id"]] = $row["color"];
}
// ESTE $row["color"] ES LA DESCRIPCION DEL COLOR ??????
$marcados = array();
while( $row = mysql_fetch_array( $consul2 ) ) { // obtener los marcados
$marcados[] = $row["id"];
}

Si no es mucha molestia me podrias indicar el funcionamiento de esto.... te agradeceria bastante... !!!

foreach( $colores as $id => $color ) {
$template = "<input type=\"checkbox\" name=\"colores[]\" value=\"%s\"%s>%s";
$selected = "";
if( in_array( $id, $marcados ) ) $selected = " checked=\"checked\"";

echo sprintf( $template, $id, $selected, $color );
}



Gracias
  #10 (permalink)  
Antiguo 19/06/2006, 09:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Cita:
Iniciado por JuanKa
GatorV

Yeeeeeeeee

Eso era lo que realmente queria.... te pasastes ya me estaba loqueando usaba el while, luego el for, y por ultimo el foreach y no me salia nada,
Es que en el segundo while del que haci yo solo entraba una sola vez y el resto no entraba... ¿ AHora por que no entraba ???? vete a saber porque....

Pero al fin Salio .

Ahora para grabar estas modificaciones te olvidaste el simbolo de arregloes decir:

$template = "<input type=\"checkbox\" name=\"colores[]\" value=\"%s\"%s>%s";


PERO HAY UNA COSA ... QUE REALMENTE NO ENTIENDO ES LA RUTINA

$colores = array();
while( $row = mysql_fetch_array( $consul1 ) ) { // obtener todos
$colores[$row["id"]] = $row["color"];
}
// ESTE $row["color"] ES LA DESCRIPCION DEL COLOR ??????
Si, la vdd no conozco la estructura de tu base de datos, pero ahi va el nombre del color, no se que campo es el que estes guardando.
Cita:
Iniciado por JuanKa
$marcados = array();
while( $row = mysql_fetch_array( $consul2 ) ) { // obtener los marcados
$marcados[] = $row["id"];
}

Si no es mucha molestia me podrias indicar el funcionamiento de esto.... te agradeceria bastante... !!!

foreach( $colores as $id => $color ) {
$template = "<input type=\"checkbox\" name=\"colores[]\" value=\"%s\"%s>%s";
$selected = "";
if( in_array( $id, $marcados ) ) $selected = " checked=\"checked\"";

echo sprintf( $template, $id, $selected, $color );
}



Gracias
El foreach lo que hace es ciclar por todo el array de $colores (que sacamos mas arriba), y luego mas abajo comprobamos si existe el $id del color en nuestro array de $marcados, si si lo esta marcamos el checkbox, y ya lo imprimimos, si no existe, pues no lo marcamos y lo imprimimos directo :), espero te sirva.
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 21:14.