Comunidad de diseño web y desarrollo en internet online

Error en una paginacion de resultados

Citar            
MensajeEscrito el 25 Sep 2011 11:21 pm
buenas a todos. escribo este tema sobre paginacion de resultados en php si alguna persona desea ayudarme con mi tema.

he implementado una paginacion de resultados. cree las funciones paginar() y mostrar_datos(). al mostrar los resultados, me muestra el siguiente error.

Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in /home/peruarte/public_html/paginacion/conexion.php on line 40

en mi archivo conexion.php declaro la conexion de la bd y las funciones query y fetch_array.

Código PHP :

   // ejecuta la query cargada en $sql.
   function query($sql)
   {
      global $cn;
      $query = mysql_query($sql,$cn);
      return $query;
   }
   
   // retorna el numero de filas del result_set ($result)
   function fetch_array($result)
   {
      $fila = mysql_fetch_array($result);
      return $fila;
   }
   
   // retorna el numero de filas del result_set ($result)
   function num_rows($result)
   {
      $num_rows = mysql_num_rows($result);
      return $num_rows;
   }


en el archivo paginar.php declare la funcion mostrar_registros() y paginar().

Código PHP :

   // crearemos una funcion para mostrar todos los registros.
   function mostrar_registros($inicio,$registros)
   {
      global $cn;      
      
      // declaramos la primera consulta para sacar el total de registros para paginar.
      $sql       = "SELECT id FROM contactos";
      $rs_sql    = query($sql,$cn) or die(mysql_error());
      $total_registros    = num_rows($rs_sql);      
      
      // utilizamos una consulta sql para mostrar los datos. declaramos la variable $sql y utilizamos la funcion LIMIT.   
      $sql_registros = "SELECT * FROM contactos LIMIT $inicio, $registros";
      $query_registros = query($sql_registros,$cn) or die(mysql_error());
      
      $total_paginas = ceil($total_registros / $registros);
      
   }

   function paginar($total_registros,$registros,$pagina,$total_paginas)
   {      
      
      if($total_registros) 
      {
   
         if(($pagina - 1) > 0) 
         {
            echo "<a href=\"ejemplo.php?pagina=".($pagina-1)."\"> < Anterior</a>";
         }

   
         for ($i=1; $i<=$total_paginas; $i++){ 
            if ($pagina == $i) 
            {
               echo "<a href = javascript:void(0);>&nbsp;".$pagina."</a>"; 
            } 
            else
            {
               echo "<a href=\"ejemplo.php?pagina=".$i."\">&nbsp;".$i."</a>";
            }   
         }
        
         if(($pagina + 1)<=$total_paginas) 
         {
            echo "<a href=\"ejemplo.php?pagina=".($pagina+1)."\"> Siguiente ></a>";
         }
         
         
      }      
      
   }


y en mi archivo ejemplo.php muestro los resultados con un while.

Código PHP :

   /* incluiremos el archivo llamado conexion.php con y tambien el archivo paginar.php. */ 
   include("conexion.php"); 
   include("paginar.php"); 
   
   // llamamos a la funcion conexion(). 
   $cn = Conexion(); 
   
   // declaramos la variable $registros. le asignamos el valor 5 por el limite de registros a mostrar. 
   $registros = 5; 
   $pagina = $_GET['pagina']; // la variable $pagina a enviar es por el metodo $_GET.    
   
   // declaramos la variable $pagina. condicionamos la variable pagina si es true or false. 
   if (!$pagina)  
   {  
        $inicio = 0; // inicia el registro en 0. 
        $pagina = 1; // si no hubieran mas registros, se mostraria el numero 1. 
   } 
   else // caso contrario me mostraria el total de registros a paginar. 
   {  
    
   } 
   
   mostrar_registros($inicio,$registros); 
       
   // mustro los datos en un while. 
   while($row = fetch_array($query_registros)) 
   { 
      // los campos a mostrar. 
   } 
   
   // Libero memoria con la funcion mysql_free_result(): 
   mysql_free_result($query_registros); 
   
   // mostramos la funcion paginar(). 
   paginar($total_registros,$registros,$pagina,$total_paginas); 
    
    mysql_close($cn); //cierra la conexion.



he testeado el sql y no me muestra error en la sintaxis. lo que si me muestra es el error del while. cual es el error que no me muetra lo registros ?.

les estare agradecido si me ayudan con mi tema.

Por esaenz22

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Sep 2011 11:38 pm
Hola, ese error te indica que en algun punto cuando llamas a la funcion fetch array lo haces desde una consulta sql que no contiene resultados, es decir , le pasas una variable con el resultado de una consulta que al no obtener ninguna fila , es NULL .

Debes comprobar que siempre que llames a fetch_array() el parametro que le pasas sea una consulta valida, es decir una consulta cuyo resultado es de 1 o mas filas.

un saludo

Por bray

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Sep 2011 02:49 pm
gracias por tu respuesta bray. como compruebo si la funcion fetch_array() tiene 1 ó mas filas ?.

saludos.

Por esaenz22

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Sep 2011 03:47 pm
comproando que num_rows() es mayor que 0 antes de llamar a fetch_array() si no lo es, es que la consulta no ha tenido resultados y por lo tanto no se ha creado una variable con las filas, lo que hace que fetch_array() devuelva ese error.

Por bray

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Sep 2011 04:41 pm
creo que no se entendio mi consulta. en la funcion que he creado.

Código PHP :

   // crearemos una funcion para mostrar todos los registros.
   function mostrar_registros($inicio,$registros)
   {
      // declaramos la primera consulta para sacar el total de registros para paginar.
      $sql_total  = "SELECT id FROM contactos";
      $rs_sql    = query($sql_total,$cn) or die(mysql_error());
      $total_registros    = num_rows($rs_sql);      
      
      // utilizamos una consulta sql para mostrar los datos. declaramos la variable $sql y utilizamos la funcion LIMIT.   
      $sql_registros     = "SELECT * FROM contactos LIMIT $inicio, $registros";
      $query_registros = query($sql_registros,$cn) or die(mysql_error());
      
      $total_paginas = ceil($total_registros / $registros);
      
   }


la funcion mostrar_registros() la he llamado en mi archivo ejemplo.php.

Código PHP :

   /* incluiremos el archivo llamado conexion.php con y tambien el archivo paginar.php. */  
   include("conexion.php");  
   include("paginar.php");  
   
   // llamamos a la funcion conexion().  
   $cn = Conexion();  
   
   // declaramos la variable $registros. le asignamos el valor 5 por el limite de registros a mostrar.  
   $registros = 5;  
   $pagina = $_GET['pagina']; // la variable $pagina a enviar es por el metodo $_GET.     
   
   // declaramos la variable $pagina. condicionamos la variable pagina si es true or false.  
   if (!$pagina)   
   {   
      $inicio = 0; // inicia el registro en 0.  
      $pagina = 1; // si no hubieran mas registros, se mostraria el numero 1.  
   }  
   else // caso contrario me mostraria el total de registros a paginar.  
   {   
      $inicio = ($pagina - 1) * $registros;    
   }  
   
   // llamo a la funcion mostrar_registros().
   mostrar_registros($inicio,$registros);  
      
   // mustro los datos en un while.  
   while($row = fetch_array($query_registros))  
   {  
     // los campos a mostrar.
     echo $row['nombres'].' '.$row['apellidos'];
   }  
   
   // Libero memoria con la funcion mysql_free_result():  
   mysql_free_result($query_registros);  
   
   // mostramos la funcion paginar().  
   paginar($total_registros,$registros,$pagina,$total_paginas);  
    
   mysql_close($cn); //cierra la conexion.


yo asumo que esa funcion me debio haber mostrado los registros. parece que el error estaria en las funciones query y fetch_array.

Código PHP :

   // ejecuta la query cargada en $sql.
   function query($sql)
   {
      global $cn;
      $result = mysql_query($sql,$cn);
      return $result;
   }
   
   // retorna el numero de filas del result_set ($result)
   function fetch_array($result)
   {
      $fila = mysql_fetch_array($result);
      return $fila;
   }


saludos.

Por esaenz22

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Sep 2011 05:45 pm

Código PHP :

// mustro los datos en un while.   
   while($row = fetch_array($query_registros))   
   {   
     // los campos a mostrar. 
     echo $row['nombres'].' '.$row['apellidos']; 
   }


Antes de esto no hay nada que compruebe que $query_registros tiene alguna fila.

Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in /home/peruarte/public_html/paginacion/conexion.php on line 40

El error te indica que se ha llamado a fetch_array() pasandole una variable null
antes de este trozo de código comprueba que $query_registros tenga algún valor, y de esa forma no debería aparecerte el error. Si el error aparece siempre aunque $query_registros deba tener resultados entonces imprime con un echo las consultas sql antes de ralizarlas y comprueba que se va a realizar tal y como tu quieres.

un saludo

Por bray

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Sep 2011 10:54 pm
bray, he imprimido las 2 consultas sql en el phpmyadmin y no me muestra ningun error. el tema que postee era para que alguna persona me oriente. tampoco no le voy a decir que me solucione mi problema. usted solo me esta diciendome los errores que me imprime y ver si puedo solucionarlo.

de todas maneras, gracias por el interes en ayudarme. en mi opinion, el tema queda cerrado.

saludos y buen dia.

Por esaenz22

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Sep 2011 12:19 pm
esaenz22:
bray te ha dicho la causa del problema y cómo solucionarlo y yo concuerdo con él. Tú, antes de ejecutar el while que recorre los resultados, deberías comprobar que hay resultados en primer lugar, es tan simple como;

Código PHP :

if (num_rows($query_registros) > 0) {
   while($row = fetch_array($query_registros)) {
       echo $row['nombres'].' '.$row['apellidos'];
   }
} else {
   echo "No hay resultados para esta consulta.";
}

Y listo.

Que hayas probado las consultas en phpmyadmin no es garantía de nada porque se ve claramente que la consulta la construyes usando parámetros ¿acaso probaste todos los casos posibles?.

Y para finalizar, la consulta que luego quieres recorrer la haces dentro de una función (mostrar_registros()) pero no estás devolviendo el resultado de esa consulta fuera de la función, por tanto cuando llegas al while, tal como está tu código, la variable $query_registros está indefinida, si creías que esa $query_registros es la misma variable que está dentro de la función te equivocas.

En la función mostrar_registros() al final debes poner un:

Código PHP :

return $query_registros;

Y luego cuando llamas a esa función:

Código PHP :

$query_registros = mostrar_registros($inicio,$registros);

Así sí tendrás apuntados los resultados de la consulta.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 27 Sep 2011 02:51 pm
estuve revisando la consulta y la verdad, bray me indico bien cuales eran mi errores. no sabia que cuando una consulta sql la sintaxis este mal, el phpmyadmin no da la garantia y la certeza suficiente que si estoy usando bien los parametros.

pense que llamando a la funcion mostrar_registros(), me mostraba los datos sin tener que declarar una variable como indico DriverOp. en parte es mi culpa por no revisar bien mi codigo. deje de programar varios meses por motivos personales, pero eso no justifica que no haya revisado bien mi codigo.

pido disculpas a bray si no he revisado bien la causa de mi problema.

cambiando de tema, ya me muestra bien los datos, pero lo que no me muestra es el numero de paginas.

Código PHP :

   function paginar($total_registros,$registros,$pagina,$total_paginas)
   {      
      
      if($total_registros) 
      {
   
         if(($pagina-1)>0) 
         {
            echo "<a href=\"ejemplo3.php?pagina=".($pagina-1)."\"> < Anterior</a>";
         }

   
         for ($i=1; $i<=$total_paginas; $i++){ 
            if($pagina==$i) 
            {
               echo "<a href = javascript:void(0);>&nbsp;".$pagina."</a>"; 
            } 
            else
            {
               echo "<a href=\"ejemplo3.php?pagina=".$i."\">&nbsp;".$i."</a>";
            }   
         }
        
         if(($pagina+1)<=$total_paginas) 
         {
            echo "<a href=\"ejemplo3.php?pagina=".($pagina+1)."\"> Siguiente ></a>";
         }
         
         
      }
      
      return $total_registros;
      
   }


saludos.

Por esaenz22

9 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.