Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Mostrar consulta con POO

Estas en el tema de Mostrar consulta con POO en el foro de PHP en Foros del Web. Hola compañeros.... tengo un problema a la hora de querer mostrar el resultado de una consulta, espero me puedan ayudar... Tengo mi clase conexion, mi ...
  #1 (permalink)  
Antiguo 27/04/2013, 12:56
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años
Puntos: 1
Mostrar consulta con POO

Hola compañeros.... tengo un problema a la hora de querer mostrar el resultado de una consulta, espero me puedan ayudar...
Tengo mi clase conexion, mi clase datos y la index, estoy tratando de mostrar el resultado de una consulta...
Aqui mando a llamar a mi procedimiento(que contiene la consulta) por medio de mi clase de Datos y almaceno el resultado llamando a mi funcion getDatosBitacora q tambien de encuentra en la clases Datos...
Estas funcionen corren bien, el problema es cuando quiero mostrar los datos, ya intente con foreach y con while...

les muestro el codigo:

Código:
$dml=("call Consulta_Bitacora_Empleado_Fecha('$EmpleadoId', '$TipoActividad', '$FechaI', '$FechaF')");
	$query=$consultar->consulta($dml);
	$resultado=$consultar->getDatosBitacora();
	$error=$consultar->getError();

echo"<table align='center' width='55%'>";
	echo"<tr>
		<td>Actividad</td>
		<td>Hora Inicio</td>
		<td>Descripcion</td>
	</tr>";

		if(strcmp($TipoActividad, 'Servicio')==0){
			foreach($resultado as $datos):
				echo"<tr>";
				echo "<td>".$datos[0]."</td>".
					 "<td>".$datos[1]."</td>".
					 "<td>".$datos[2]."</td>";
				echo"</tr>";
				$i++;
			endforeach;
		}else{
			foreach($resultado as $datos):
				echo "<tr>";
				echo "<td>".$datos[0]."</td>".
					 "<td>".$datos[1]."</td>".
					 "<td>".$datos[2."</td>";
				echo "</tr>";
				$i++;
			endforeach;
		}
	echo"</table>";
con el foreach me muestra lo siguiente:

Código:
Actividad	Hora Inicio	Descripcion
H	i	e
H	i	e
0	9	:
0	9	:
R	e	v
R	e	v
y con while:

Código:
if(strcmp($TipoActividad, 'Servicio')==0){
			while($i<=$tamanio){
				echo"<tr>";
				echo "<td>".$datos[Titulo]."</td>".
					 "<td>".$datos[Hora_Inicio]."</td>".
					 "<td>".$datos[Actividad]."</td>";
				echo"</tr>";
				$i++;
			}
		}else{
			while($i<=$tamanio){
				echo "<tr>";
				echo "<td>".$datos[Nombre_Instalacion]."</td>".
					 "<td>".$datos[Hora_Inicio]."</td>".
					 "<td>".$datos[Actividad]."</td>";
				echo "</tr>";
				$i++;
			}
		}
muestra esto:

Código:
Actividad	Hora Inicio	Descripcion
Hielo Crystal	9:10:00	Revisar DVR
Hielo Crystal	9:10:00	Revisar DVR
Hielo Crystal	9:10:00	Revisar DVR
Hielo Crystal	9:10:00	Revisar DVR
Hielo Crystal	9:10:00	Revisar DVR
Hielo Crystal	9:10:00	Revisar DVR
Hielo Crystal	9:10:00	Revisar DVR

por favor ayuda!
  #2 (permalink)  
Antiguo 27/04/2013, 13:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Mostrar consulta con POO

Bueno, el problema es que nosotros no sabemos que tipo de resultado te entrega getDatosBitacora() y puede que ahí esté la clave, pues para poder iterarse correctamente con foreach() debe devolver un array de arrays.

Con el while() simplemente incrementas el valor de $i pero jamás iteras sobre los resultados, es por eso que te imprime siempre los mismos valores.

Sería interesante ver qué tipo de resultado arroja para ayudarte más, pero es complicado, no somos adivinos.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/04/2013, 13:35
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años
Puntos: 1
Respuesta: Mostrar consulta con POO

ok, disculpen por no saber explicarme... les muestro mis funciones:
Esta funcion se encuentra en mi clase Acceso datos, en esta realiazo todas mis consultas, altas, modificaciones.. etc..
Código:
public function obtenerDatos($sql){
		$baseDatos=new ConectarBaseDatos;
		
        if ($datos=mysqli_query($baseDatos->getConnect(),$sql)) {       
			while ($enviarDatos=mysqli_fetch_array($datos)){
				$this->mostrarDatos=$enviarDatos;
			}
			return $this->getMostrarDatos();
        }else{
            $this->error=mysqli_error($baseDatos->getConnect());
            return false;
        }
    }

public function getMostrarDatos(){
       	return $this->mostrarDatos;
    }
	
    public function getError(){
       	return $this->error;
    }
	
	public function getSalir(){
		$cerrarConexion=new ConectarBaseDatos;
		$salir=$cerrarConexion->salir();	
	}
ahora, esta es mi clase BitacoraEmpleados...


Código:
public function consulta($dml){
        
       $obtenerBitacora=new AccesoDatos;
        $obtener=$obtenerBitacora->obtenerDatos($dml);
        if($obtener){
			$this->datosBitacora=$obtenerBitacora->getMostrarDatos();
        return true;
        }
        else{
			$this->setError($obtenerBitacora->getError());
			return false;
        }
	}

    public function getDatosBitacora(){
        return $this->datosBitacora;
    }
    
    public function getError(){
        return $this->error;
    }
	
    public function setError($errores){
        $this->error=$errores;
    }

Y de aqui mando a llamar a la funcion consulta d mi clase Bitacora, hice algunas modificaciones pero ahora solo me muestra el ultimo registro de la consulta...
Código:
        $consultar=new Bitacora_Empleados;
        $query=$consultar->consulta($dml);
	$datos=$consultar->getDatosBitacora();
	$error=$consultar->getError();
	$tamanio=count(print_r($datos));

if(strcmp($TipoActividad, 'Servicio')==0){
			
			while($i<=$tamanio){
				echo"<tr>";
				echo "<td>".$datos[0]."</td>".
					 "<td>".$datos[1]."</td>".
					 "<td>".$datos[2]."</td>";
				echo"</tr>";
				$i++;
			}
			
		}else{
			while($i<=$tamanio){
				echo "<tr>";
				echo "<td>".$datos[Nombre_Instalacion]."</td>".
					 "<td>".$datos[Hora_Inicio]."</td>".
					 "<td>".$datos[Actividad]."</td>";
				echo "</tr>";
				$i++;
			}
		}
  #4 (permalink)  
Antiguo 27/04/2013, 13:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Mostrar consulta con POO

Efectivamente tienes un problema al procesar los resultados, aquí:
Código PHP:
while ($enviarDatos=mysqli_fetch_array($datos)){
  
$this->mostrarDatos=$enviarDatos;

Ahí lo que sucede es que en cada vuelta sobreescribes la variable $this->mostrarDatos con $enviarDatos, de ninguna forma estás acumulando todos los resultados, por eso es que únicamente obtienes un único array que sería un sólo resultado.

¿Se entiende?

Lo que debes hacer es ir acumulando los resultados en un array y devolver dicho array, finalmente debes obtener una lista con todos los resultados.

Código PHP:
$this->mostrarDatos = array();
while (
$enviarDatos=mysqli_fetch_array($datos)){
  
$this->mostrarDatos []= $enviarDatos;

Observa que uso el operador []= para ir agregando $enviarDatos al array, creando la lista.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 29/04/2013, 08:50
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años
Puntos: 1
Respuesta: Mostrar consulta con POO

Muchas gracias, y disculpa por responder hasta ahora... y tienes razon, ese era el problema!!!
de esta manera muestro la informacion:

Código:
$consultar=new Bitacora_Empleados;
	$arrayEmpleado=explode(" ", $Empleado, 2);
	$EmpleadoId=$arrayEmpleado[0];
	
	$dml=("call Consulta_Bitacora_Empleado_Fecha('$EmpleadoId', '$TipoActividad', '$FechaI', '$FechaF')");
	$query=$consultar->consulta($dml);
	$datos=$consultar->getDatosBitacora();
	$error=$consultar->getError();
	
foreach($datos as $datos2):
				echo"<tr>";
				echo "<td>".$datos2[Titulo]."</td>".
					 "<td>".$datos2[Hora_Inicio]."</td>".
					 "<td>".$datos2[Actividad]."</td>";
				echo"</tr>";
				
			endforeach;

Última edición por tanliz; 29/04/2013 a las 17:10

Etiquetas: poo
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:05.