Comunidad de diseño web y desarrollo en internet online

Error en una paginacion de resultados

Citar            
MensajeEscrito el 25 Sep 2011 11:20 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 28 Sep 2011 02:09 am
La solución sería que todo este código lo movieras dentro de la función "mostrar_registros" ya que muchas variables que quieres utilizar sólo están declaradas dentro de esa función.

Código PHP :

   // 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); 


Espero haberte ayudado.

Por zarkiel

Claber

340 de clabLevel

4 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 04 Oct 2011 05:49 pm
gracias por la respuesta @Zarkielx. he corregido mi codigo y ya no me muestra error. en la funcion mostrar_registros() no le habia dado un return a la variable $query_registros y en el archivo donde mostraba los resultados no defini la variable donde me almacenaba el fetch_array().

me muestra los registros correctamente, pero ahora no me muestra los links de la paginacion. este es lo que corregi de mi codigo.

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_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);
      
      return $query_registros;      
      
   }

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

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


el archivo ejemplo3.php.

Código 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; 
   }
   
   // defino la variable $query_registros para luego almacenarlo en el fetch_array().
   $query_registros = mostrar_registros($inicio,$registros);
   
   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."; 
   }
   
   // Libero memoria con la funcion mysql_free_result():
   mysql_free_result($query_registros);
   
   // mostramos la funcion paginar().
   paginar($pagina,$total_registros,$registros,"ejemplo3.php?pagina=");
   
   mysql_close($cn); //cierra la conexion.   


saludos.

Por esaenz22

9 de clabLevel



 

firefox

 

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