PHP - problema para marcar checkbox

 
Vista:
sin imagen de perfil
Val: 14
Ha aumentado su posición en 14 puestos en PHP (en relación al último mes)
Gráfica de PHP

problema para marcar checkbox

Publicado por paux (4 intervenciones) el 14/11/2019 01:00:20
modif_vela

Hola, tengo un problema que me esta volviendo loca. Necesito que en la pantalla de modificar, me carguen checkbox marcados con los datos que tengo guardados en mysql. solo pude conseguir q me traiga el primero de los colores.
Con "producto" y "tamaño" no tuve problemas ya que se guardan los id en la tabla "velas", y "colores" se guardan en la tabla "coloresxvela" y ahi es donde me mareo.

esta es una parte del php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$id = $_GET['id'];
 
//esta tabla guarda id_ velas y id_colores
$consulta_coloresxvela = "SELECT * FROM coloresxvela WHERE activo = 1 and id_vela = $id";
$datos_coloresxvela = $mysqli->query($consulta_coloresxvela);
 
//esta tabla guarda id  y nombres de colores
$consulta_colores = "SELECT * FROM colores WHERE activo = 1 order by nombre asc";
$datos_colores = $mysqli->query($consulta_colores);
 
 
//la parte del form donde deberia mostrarme como checked lo que me viene de las consultas
<div class="form-group">
    <label for="colores" class="col-sm-2 control-label">colores</label>
    <div class="col-sm-10">
        <div class="verde">
            <?php
            while ($fila2 =mysqli_fetch_array($datos_coloresxvela)) {
                while ($fila =mysqli_fetch_array($datos_colores)) { ?>
 
                <label class="checkbox-inline">
                    <input type="checkbox" id="colores[]" name="colores[]" value="<?php echo $fila['id'];?>"
 
 
                        <?php if(strrpos($fila['id'], $fila2['id_color'])!== false) echo 'checked'; ?>><?php echo $fila['nombre'];?>
 
                </label>
                <?php } ?>
            <?php } ?>
        </div>
    </div>
</div>

//se conecta, y solo me muestra checked un solo color, y deberia marcar 3.
agradeceria infinitamente si pueden marcarme que estoy haciendo mal. muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
Imágen de perfil de Lawliet
Val: 478
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema para marcar checkbox

Publicado por Lawliet (351 intervenciones) el 14/11/2019 05:24:49
Hola!!!

Veo que haces dos consultas separadas, no tienes relación entre ellas para hacer solo una consulta o una tabla intermedia que las relacione para que puedas imprimir en una sola consulta los checkbox marcados.

Sin más que comentar, quedo al pendiente de cualquier duda y/o comentario.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 14
Ha aumentado su posición en 14 puestos en PHP (en relación al último mes)
Gráfica de PHP

problema para marcar checkbox

Publicado por paux (4 intervenciones) el 14/11/2019 16:41:02
gracias Lawliet por tu respuesta y tu tiempo.

Hago 2 consultas separadas porque una es para listar todos los colores, porque es una pantalla para modificar y necesito todas las opciones, la otra consulta es para traer los colores ya seleccionados, para que los muestre marcados en los checkboxes y asi poder elegir seleccionar mas colores, o desmarcar alguno, o todos, etc..Tengo problemas trayendo los colores seleccionados o reflejandolo en los checkboxes porque solo marca uno de los colores y en realidad deberia marcarme 3 en ese caso porque seria el "id_vela" 5.

coloresxvela
colores
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 14
Ha aumentado su posición en 14 puestos en PHP (en relación al último mes)
Gráfica de PHP

problema para marcar checkbox

Publicado por paux (4 intervenciones) el 15/11/2019 00:37:34
He tenido un avance, auque no esta del todo resuelto. Logre que al menos me marque todas las casillas correctas. Ahora el tema es que me repite los checkboxes. Alguna sugerencia de como resolverlo?

este es el nuevo codigo del form

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<div class="form-group">
    <label for="colores" class="col-sm-2 control-label">colores</label>
    <div class="col-sm-10">
        <div class="verde">
 
            <?php
             while ($fila =mysqli_fetch_array($datos_colores)) {
 
                foreach($datos_coloresxvela as $d_cxv ) {?>
 
                    <label class="checkbox-inline">
                        <input type="checkbox" id="colores[]" name="colores[]" value="<?php echo $fila['id'];?>" <?php
 
                    if($fila['id'] == $d_cxv['id_color'])
                       echo 'checked'; ?> > <?php echo $fila['nombre'] ;?></label>
 
                    <?php }
                 } ?>
        </div>
    </div>
</div>

//y se muestra asi

mod_vela2

saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Lawliet
Val: 478
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema para marcar checkbox

Publicado por Lawliet (351 intervenciones) el 15/11/2019 07:18:34
Hola!!!

Antes que nada deja que haga un pequeño comentario. He visto personas que por encontrar un problema, se detienen esperando respuestas, incluso me ha tocado ver que comentan su propia pregunta con el fin de que alguien les de la solución directamente... En tu caso, decidiste comentar nuevamente tu pregunta pero con un código el cual demuestra tu progreso por resolver el problema por ti misma, por ello te felicito porque el esfuerzo de tu parte es muy evidente. Estoy seguro que un poquito más de tiempo y hubieras encontrado la respuesta por tu propia cuenta... Sigue con ese ritmo y estoy seguro que aprenderás mucho, ¡Felicidades!

Volviendo nuevamente a tu pregunta... El error se debe a que haces un ciclo dentro un ciclo, por cada elemento del primer ciclo se itera el segundo N veces, he ahí la razón del porque se repiten varias veces. La solución es colocar una bandera el cual nos permita controlar en que momento hacemos la impresión de los checkbox.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
	$mysqli = new mysqli("localhost","root","","lawliet");
	$sql = "SELECT id,nombre FROM colores WHERE activo = 1 ORDER BY nombre ASC";
	$result = $mysqli->query($sql);
	$colores = [];
	while ($color = $result->fetch_assoc()) {
        array_push($colores, ["id" => $color["id"],"nombre" => $color["nombre"]]);
    }
 
	$sql = "SELECT id_color FROM coloresxvela WHERE activo = 1 AND id_vela = 5";
	$result = $mysqli->query($sql);
	$coloresVela = [];
	while ($color = $result->fetch_assoc()) {
        array_push($coloresVela, $color["id_color"]);
    }
 
	$existeColor = False;
	foreach($colores as $i => $color) {
		foreach($coloresVela as $i => $colorVela) {
			if($color["id"] == $colorVela) {
				$existeColor = True;
				break;
			} else {
				$existeColor = False;
			}
		}
 
		if($existeColor) {
			echo "<input type='checkbox' name='colores' value='".$color["id"]."' checked/><label>".$color["nombre"]."</label>";
		} else {
			echo "<input type='checkbox' name='colores' value='".$color["id"]."'/><label>".$color["nombre"]."</label>";
		}
	}
?>

Yo personalmente preferí sacar los elementos de ambas consultas en arreglos diferentes para posteriormente manipularlos de mejor forma, así podremos usar esos mismos arreglos en cualquier momento sin necesidad de volver a ejecutar nuestras consultas.

En la primera consulta creo un array asociativo en la línea 5 el cual voy llenando en la línea 7.
En la segunda consulta creo un array simple en la línea 12 el cual voy llenando en la línea 14.

La línea 17 es la bandera que comentaba al inicio, en base a esa bandera nosotros decidimos si marcamos o no nuestros checkbox. La validación la hacemos en la línea 20, en caso de coincidir nuestros id de los colores nosotros colocamos nuestra bandera como verdadera como se ve en la línea 21 y en la linea 22, terminamos esa iteración la cual corresponde al segundo ciclo, esto es importante ya que al no hacerlo nuestra bandera nunca cambiaría de estado, debido a que en la línea 24 nosotros tenemos nuestra bandera como falsa. Fuera del segundo ciclo en la línea 28 nosotros realizamos la validación de nuestra bandera y en base a eso marcamos o no nuestro checkbox.

Sin más que comentar, quedo al pendiente de cualquier duda y/o comentario.

Saludos!

P.D. Si no quedo muy claro la explicación, puedes comentar tu inquietud sin problemas e intentaré hacer una descripción gráfica para entenderlo de mejor forma.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 14
Ha aumentado su posición en 14 puestos en PHP (en relación al último mes)
Gráfica de PHP

problema para marcar checkbox

Publicado por paux (4 intervenciones) el 15/11/2019 18:54:51
Muchas gracias por tus palabras. La verdad es que cuando uno hace lo que le apasiona, no le queda otra que no darse por vencido y buscarle la vuelta siempre. Y algunos no se conforman solo con eso, si no que también ayudan al resto, como veo que haces tú, las felicitaciones son para ti!.

Funciona a la prefección!.

Y lejos de no haber quedado clara la explicación, creo que fué impecable. Además con código y todo, que no hacía falta (pero se agradece con el alma).

Muchas gracias por tu tiempo y dedicación para ayudarme!!.

Saludos!.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar