PHP - Bucle foreach dentro de otro foreach duplica resultados

 
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

Bucle foreach dentro de otro foreach duplica resultados

Publicado por Milton (6 intervenciones) el 06/09/2018 16:49:51
Buen día amigos
Tengo una dificultad y espero que alguno ´me pueda ayudar.
Tengo un programa que trae datos desde mysql de una tabla que contiene preguntas y a su vez trae las opciones de respuesta a esas preguntas que están en otra tabla, los recorro las dos con bucles foreach anidados, pero por cada vuelta del foreach repite las opciones del resultado anterior, es decir a la pregunta 1 le corresponden 4 opciones que imprimen correctamente, pero a la pregunta 2 le imprimen 8 opciones las cuatro de la pregunta 1 y las 4 de la pregunta dos y así sucesivamente, este es el código si me podéis ayudar les agradecería mucho

$Obtener_pregunta= $Consulta->Get_question($Id_Encuesta);

foreach($Obtener_pregunta as $Datos) {
$Id_Pregunta=$Datos["Id_pregunta"];
$Pregunta=$Datos["Pregunta"];

if($Id_Pregunta!=NULL or $Id_Pregunta!=""){
echo "<h2> : " . $Pregunta . "</h2>";
}

$obtener_options=$Consulta->get_optiones_for_edit($Id_Pregunta);

foreach($obtener_options as $Datos_opciones){
$opcion=$Datos_opciones["Opcion"];
echo "<h4> Op: " . $opcion. "</h4>";
}
}



Captura
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.071
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Bucle foreach dentro de otro foreach duplica resultados

Publicado por Yamil Bracho (888 intervenciones) el 06/09/2018 17:17:50
Las opciones deberian mostrarse si la pregunta no es nulo o no es blanco. Sreia algo como :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$preguntaRows = $Consulta->Get_question($Id_Encuesta);
foreach($preguntaRows as preguntaRow) {
	$Id_Pregunta = preguntaRow["Id_pregunta"];
	$Pregunta = preguntaRow["Pregunta"];
 
	if (strlen($Id_Pregunta)){
		echo "<h2> : " . $Pregunta . "</h2>";
 
		optionRows = $Consulta->get_optiones_for_edit($Id_Pregunta);
		foreach(optionRows as $optionRow){
			$opcion = $optionRow["Opcion"];
			echo "<h4> Op: " . $opcion. "</h4>";
		}
	}
}

Tambien es mas optimo si haces una consulta que te tariga todo, preguntas y sus opciones y asi no vas a la BD tantas veces...
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
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

Bucle foreach dentro de otro foreach duplica resultados

Publicado por Milton (6 intervenciones) el 06/09/2018 17:36:55
Hola Yamil Bracho, muchas gracias por tu respuesta pero obtuve el mismo resultado, las opciones se siguen repitiendo
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
sin imagen de perfil
Val: 1.071
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Bucle foreach dentro de otro foreach duplica resultados

Publicado por Yamil Bracho (888 intervenciones) el 06/09/2018 19:26:39
Revisa el metodo get_optiones_for_edit, la senetcnia SQL que estas usando alli
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
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

Bucle foreach dentro de otro foreach duplica resultados

Publicado por Milton (6 intervenciones) el 06/09/2018 20:00:00
Este es el método esto que retorna el array con todos los datos de las opciones dependiendo de el Id de la pregunta

1
2
3
4
5
6
7
8
9
public function get_optiones_for_edit($Id_question){
    $Consulta_Pregunta=$this->Conect->prepare("SELECT * FROM Opciones WHERE Id_pregunta = ?");
 
    $Consulta_Pregunta->execute(array($Id_question));
    while($Fila=$Consulta_Pregunta->fetch(PDO::FETCH_ASSOC)){
        $this->opciones[]=$Fila;
    }
    return $this->opciones;
}
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
sin imagen de perfil
Val: 1.071
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Bucle foreach dentro de otro foreach duplica resultados

Publicado por Yamil Bracho (888 intervenciones) el 06/09/2018 20:14:18
Estas agregando las $Fila a las opciones, entonces $opciones tiene las opciones de todas las preguntas...
Para que funcione segun quieres haces

1
2
3
4
5
6
7
8
9
10
public function get_optiones_for_edit($Id_question){
    $Consulta_Pregunta=$this->Conect->prepare("SELECT * FROM Opciones WHERE Id_pregunta = ?");
     $Consulta_Pregunta->execute(array($Id_question));
 
    $opciones = [];
    while($Fila=$Consulta_Pregunta->fetch(PDO::FETCH_ASSOC)){
        $opciones[]=$Fila;
    }
    return $opciones;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
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

Bucle foreach dentro de otro foreach duplica resultados

Publicado por Milton (6 intervenciones) el 06/09/2018 20:20:35
Excelente, funciono perfecto, muchas gracias
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