Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema al extraer datos y mostrarlos

Estas en el tema de Problema al extraer datos y mostrarlos en el foro de PHP en Foros del Web. Hola a todos Soy nuevo en el mundillo del php y mysql y tengo un problema a la hora de representar unos valores por pantalla ...
  #1 (permalink)  
Antiguo 28/10/2015, 13:05
Avatar de agusax  
Fecha de Ingreso: junio-2011
Ubicación: Puerto Real (Cádiz)
Mensajes: 74
Antigüedad: 12 años, 10 meses
Puntos: 3
Problema al extraer datos y mostrarlos

Hola a todos
Soy nuevo en el mundillo del php y mysql y tengo un problema a la hora de representar unos valores por pantalla de la base de datos.

El problema se me plantea cuando intento presentar las preguntas de cada dimensión, pero aunque haga la comparación, todas aparecen dentro de la 1ª dimensión.

¿Podrían orientarme un poco a que se debe?


Código:
// Nº de filas de cada tabla
	$ndim= mysqli_num_rows($consulta_dimension);
	$npreg= mysqli_num_rows($consulta_preguntas);

	if ($ndim > 0){ // && $npreg > 0
		print ("<TABLE>");
		for ($i=0; $i<$ndim; $i++){
			$res_dim = mysqli_fetch_array ($consulta_dimension);
			print ("<TR>\n");
			print ("<TH>" . $res_dim['nombre'] . "</TH>\n");
			print ("</TR>\n");
			for($j=0; $j<$npreg; $j++){
				$res_preg = mysqli_fetch_array ($consulta_preguntas);
				if($res_preg['id_Dimensiones']==$i){
					print ("<TR>\n");
					print ("<TD>" . $res_preg['pregunta'] . "</TD>\n");
					print ("</TR>\n");
				}

			}
		}
		print("</TABLE>");
	}else{
		print ("No hay preguntas disponibles");
	}
  #2 (permalink)  
Antiguo 28/10/2015, 15:29
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Problema al extraer datos y mostrarlos

Saludo
Eso es porque solo se está leyendo la primera posición del fetch array,
se podría manejar con while.
Ej
Código PHP:
Ver original
  1. if($ndim)
  2. {
  3. while($res_dim = mysqli_fetch_array($consulta_dimension))
  4. {
  5.   echo '</br>La dimensión actual es '.$res_dim['nombre'];
  6.   while($res_preg = mysqli_fetch_array($consulta_preguntas))
  7.   {
  8.       if ( $res_dim['id_dimension'] == $res_preg['id_Dimensiones'] )
  9.          echo '</br>La pregunta es '.$res_preg['pregunta'];
  10.   }
  11. }
  12. }
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 28/10/2015, 16:02
Avatar de agusax  
Fecha de Ingreso: junio-2011
Ubicación: Puerto Real (Cádiz)
Mensajes: 74
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: Problema al extraer datos y mostrarlos

Cita:
Iniciado por mortiprogramador Ver Mensaje
Saludo
Eso es porque solo se está leyendo la primera posición del fetch array,
se podría manejar con while.
Ej
Código PHP:
Ver original
  1. if($ndim)
  2. {
  3. while($res_dim = mysqli_fetch_array($consulta_dimension))
  4. {
  5.   echo '</br>La dimensión actual es '.$res_dim['nombre'];
  6.   while($res_preg = mysqli_fetch_array($consulta_preguntas))
  7.   {
  8.       if ( $res_dim['id_dimension'] == $res_preg['id_Dimensiones'] )
  9.          echo '</br>La pregunta es '.$res_preg['pregunta'];
  10.   }
  11. }
  12. }
Ante todo muchas gracias por responder, pero solo muestra la pregunta de primera dimensión, de las demás no:

La dimensión actual es Datos del usuario
La pregunta es Tipo de usuario
La dimensión actual es Valor del servicio
La dimensión actual es La biblioteca como espacio
La dimensión actual es Control de la informacion


Edito:

A ver si el fallo va a estar en la búsqueda xD

"SELECT id,nombre FROM dimensiones ORDER BY id ASC"
"SELECT id,id_Dimensiones,pregunta FROM preguntas ORDER BY id ASC"


Código PHP:
Ver original
  1. while($res_dim = mysqli_fetch_array($consulta_dimension)){
  2.             echo '</br>La dimensión actual es '.$res_dim['nombre'];
  3.             //echo '</br>La dimensión actual es '.$res_dim['id'];
  4.             while($res_preg = mysqli_fetch_array($consulta_preguntas)){
  5.                 if ( $res_dim['id'] == $res_preg['id_Dimensiones'] )
  6.                     echo '</br>La pregunta es '.$res_preg['pregunta'];
  7.                     echo '</br>Dimension de pregunta '.$res_preg['id_Dimensiones'];
  8.             }
  9.         }
La dimensión actual es Datos del usuario
La pregunta es Tipo de usuario
Dimension de pregunta 1
Dimension de pregunta 2
La pregunta es Nombre
Dimension de pregunta 1
Dimension de pregunta 4
La dimensión actual es Valor del servicio
La dimensión actual es La biblioteca como espacio
La dimensión actual es Control de la informacion

No debería mostrarme las lineas de dimension 2 y 4 y esas mostrarlas en las otras dimensiones, ¿no?

Última edición por agusax; 28/10/2015 a las 16:38
  #4 (permalink)  
Antiguo 28/10/2015, 17:16
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Problema al extraer datos y mostrarlos

Saludo
Te falta abrir y cerrar el if con {}

Mi ejemplo era de una sola línea, y por eso funciona sin problema,
pero cuando se manejan más líneas, se deben cerrar esas líneas
en la estructura del if.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 28/10/2015, 17:43
Avatar de agusax  
Fecha de Ingreso: junio-2011
Ubicación: Puerto Real (Cádiz)
Mensajes: 74
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: Problema al extraer datos y mostrarlos

DIOS!!! QUÉ FALLO TAN TONTO!!! xD

Bueno, se ha solucionado solo el que nombren esas dos id de las otras preguntas, pero no aparecen en dichas dimensiones:

La dimensión actual es Datos del usuario
La pregunta es Tipo de usuario
Dimension de pregunta 1
La pregunta es Nombre
Dimension de pregunta 1
La dimensión actual es Valor del servicio
La dimensión actual es La biblioteca como espacio
La dimensión actual es Control de la informacion
  #6 (permalink)  
Antiguo 28/10/2015, 17:55
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Problema al extraer datos y mostrarlos

Saludo

Pues eso es porque el if no da resultado verdadero

Código PHP:
if ( $res_dim['id_dimension'] == $res_preg['id_Dimensiones'] ) 
Se tendrá que realizar antes del if, una escritura de estos dos datos
para ver el por qué no se visualiza la información.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 29/10/2015, 05:16
Avatar de agusax  
Fecha de Ingreso: junio-2011
Ubicación: Puerto Real (Cádiz)
Mensajes: 74
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: Problema al extraer datos y mostrarlos

El problema está en que en la línea
Código PHP:
Ver original
  1. while($res_preg = mysqli_fetch_array($consulta_preguntas)){
ha recorrido todo el registro de preguntas, por lo que cuando avanza a la siguiente posición de dimensión, este no empieza otra vez desde el principio.
  #8 (permalink)  
Antiguo 29/10/2015, 05:24
Avatar de agusax  
Fecha de Ingreso: junio-2011
Ubicación: Puerto Real (Cádiz)
Mensajes: 74
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: Problema al extraer datos y mostrarlos

He conseguido solucionarlo de una manera fea:
Código PHP:
Ver original
  1. if($ndim){
  2.         while($res_dim = mysqli_fetch_array($consulta_dimension)){
  3.             echo '</br>La dimensión actual es '.$res_dim['id'];
  4.             $consulta_preguntas = mysqli_query ($conexion, $instruccion_preguntas)
  5.                 or die("s");
  6.             while($res_preg = mysqli_fetch_array($consulta_preguntas)){
  7.                 if ( $res_dim['id'] == $res_preg['id_Dimensiones'] ){
  8.                     echo '</br>La pregunta actual es '.$res_preg['pregunta'].' de la dimension '.$res_preg['id_Dimensiones'];
  9.                 }
  10.             }
  11.         }
  12.     }else{
  13.         print ("No hay preguntas disponibles");
  14.     }

Lo que hago es en cada iteración realizar la búsqueda en la base de datos para así tener seleccionada la primera fila de la tabla.
De este modo me pone cada pregunta en su respectiva dimensión, pero tiene el inconveniente de realizar muchas veces la misma búsqueda.
  #9 (permalink)  
Antiguo 29/10/2015, 05:39
Avatar de agusax  
Fecha de Ingreso: junio-2011
Ubicación: Puerto Real (Cádiz)
Mensajes: 74
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: Problema al extraer datos y mostrarlos

He encontrado una solución mas "bonita" en el cual solo realiza 4 veces el recorrido de las preguntas y no las 4 consultas y 4 recorridos:

Código PHP:
Ver original
  1. while($preguntas = mysqli_fetch_array($consulta_preguntas)){
  2.         $res_preg[] = $preguntas;
  3.     }
  4.     if($ndim){
  5.         while($res_dim = mysqli_fetch_array($consulta_dimension)){
  6.             echo '</br>La dimensión actual es '.$res_dim['id'];
  7.             for($i=0; $i< sizeof($res_preg); $i++){
  8.                 if ( $res_dim['id'] == $res_preg[$i]['id_Dimensiones'] ){
  9.                     echo '</br>La pregunta actual es '.$res_preg[$i]['pregunta'].' de la dimension '.$res_preg[$i]['id_Dimensiones'];
  10.                 }
  11.             }
  12.         }
  13.     }else{
  14.         print ("No hay preguntas disponibles");
  15.     }

Esta es mi solución. Y marco el post como SOLUCIONADO

Etiquetas: mysql, tabla
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 00:41.