Foros del Web » Programando para Internet » PHP »

problema al no mostrarme los links de una paginacion

Estas en el tema de problema al no mostrarme los links de una paginacion en el foro de PHP en Foros del Web. hola a todos. por motivos de salud deje de programar un tiempo y estoy empezando desde el principio para no perder la practica. implemente una ...
  #1 (permalink)  
Antiguo 11/10/2011, 19:28
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Pregunta problema al no mostrarme los links de una paginacion

hola a todos. por motivos de salud deje de programar un tiempo y estoy empezando desde el principio para no perder la practica.

implemente una paginacion que habia modificado hace un tiempo y de esa paginacion hice una funcion para reducir el codigo para que se entienda. muestro los registros correctamente, pero no me muestra los links de la paginacion. estuve asi desde unos dias y no encuentro una solucion.

este es mi codigo que desarrolle.

Código PHP:
Ver original
  1. // crearemos una funcion para mostrar todos los registros.
  2.     function mostrar_registros($inicio,$registros)
  3.     {
  4.         global $cn;
  5.        
  6.         // declaramos la primera consulta para sacar el total de registros para paginar.
  7.         $sql_total  = "SELECT `id` FROM contactos";
  8.         $rs_sql     = query($sql_total,$cn) or die(mysql_error());
  9.         $total_registros    = num_rows($rs_sql);       
  10.        
  11.         // utilizamos una consulta sql para mostrar los datos. declaramos la variable $sql y utilizamos la funcion LIMIT.  
  12.         $sql_registros   = "SELECT * FROM contactos LIMIT $inicio, $registros";
  13.         $query_registros = query($sql_registros,$cn) or die(mysql_error());
  14.         $total_paginas   = ceil($total_registros / $registros);
  15.        
  16.         return $query_registros;       
  17.        
  18.     }
  19.  
  20.     function paginar($pagina,$total_registros,$num_registros,$enlace)
  21.     {      
  22.        
  23.         $anterior  = ($pagina-1);
  24.         $siguiente = ($pagina+1);
  25.        
  26.         if($total_registros)
  27.         {
  28.    
  29.             if(($pagina-1)>0)
  30.             {
  31.                 $texto_url = "<a href='$enlace$anterior'> < Anterior</a>";
  32.             }
  33.  
  34.    
  35.             for ($i=1;$i<=$total_paginas;$i++)
  36.             {
  37.                 if($pagina==$i)
  38.                 {
  39.                     $texto_url .= "<a href=javascript:void(0);>&nbsp;".$pagina."</a>";
  40.                 }
  41.                 else
  42.                 {
  43.                     $texto_url .= "<a href='$enlace$i'>&nbsp;".$i."</a>";
  44.                 }  
  45.             }
  46.          
  47.             if(($pagina+1)<=$total_paginas)
  48.             {
  49.                 $texto_url .= "<a href='$enlace$siguiente'> Siguiente ></a>";
  50.             }
  51.            
  52.            
  53.         }
  54.        
  55.         return $texto_url;
  56.        
  57.        
  58.     }

el archivo donde muestro los resultados y la funcion paginar()

Código PHP:
Ver original
  1. /* incluiremos el archivo llamado conexion.php con y tambien el archivo paginar.php. */
  2.     include("conexion.php");
  3.     include("paginar.php");
  4.    
  5.     // llamamos a la funcion conexion().
  6.     $cn = Conexion();
  7.    
  8.     // declaramos la variable $registros. le asignamos el valor 5 por el limite de registros a mostrar.
  9.     $registros = 5;
  10.     $pagina    = $_GET['pagina']; // la variable $pagina a enviar es por el metodo $_GET.  
  11.    
  12.     // declaramos la variable $pagina. condicionamos la variable pagina si es true or false.
  13.     if (!$pagina)
  14.     {
  15.         $inicio = 0; // inicia el registro en 0.
  16.         $pagina = 1; // si no hubieran mas registros, se mostraria el numero 1.
  17.     }
  18.     else // caso contrario me mostraria el total de registros a paginar.
  19.     {
  20.         $inicio = ($pagina - 1) * $registros;
  21.     }
  22.    
  23.     // defino la variable $query_registros.
  24.     $rs_registros = mostrar_registros($inicio,$registros);
  25.    
  26.     if(num_rows($rs_registros)>0)
  27.     {  
  28.         while($row = fetch_array($rs_registros))
  29.         {
  30.             echo $row['nombres'].' '.$row['apellidos'];        
  31.         }
  32.        
  33.     }
  34.     else
  35.     {
  36.         echo "No hay resultados para esta consulta.";
  37.     }
  38.    
  39.     // Libero memoria con la funcion mysql_free_result():
  40.     mysql_free_result($rs_registros);
  41.    
  42.     // mostramos la funcion paginar().
  43.     paginar($pagina,$total_registros,$registros,"ejemplo3.php?pagina=");
  44.    
  45.     mysql_close($cn); //cierra la conexion.

en la funcion paginar() asigno los parametros. pero al parecer, en la variable $total_registros donde realiza la condicion, no me muestra los links. parece como si no almacenara la cantidad de registros que hay en mi tabla.

saludos.
  #2 (permalink)  
Antiguo 11/10/2011, 22:55
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: problema al no mostrarme los links de una paginacion

En tu funcion paginar() lo que haces es crear todos los enlaces en una variable y devolver el resultado como cadena, todo lo que necesitas es echo paginar(/* tus parametros de paginacion */);
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 12/10/2011, 07:34
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 5 meses
Puntos: 69
Respuesta: problema al no mostrarme los links de una paginacion

esaenz22, como estás?
Hace varios años escribí una pequeña clase en PHP para realizar paginado de resultados.
Te dejo un link hacia la documentación para que la revises, además que cuenta con algunos ejemplos de uso y un link hacia el código fuente.

http://web-studio.com.ar/proyectos/paginado/

Saludos !
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #4 (permalink)  
Antiguo 12/10/2011, 07:58
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema al no mostrarme los links de una paginacion

gracias por sus respuestas. Triby. ya le hice echo a la funcion paginar y no me muestra los links. no se supone que al llamar a una funcion se imprimen los resultados y no necesariamente se tiene que hacer echo a una funcion.

Webstudio. como estoy empezando desde cero a programar, hice mi propio codigo de paginacion (modificando algunos detalles) para que me dieran una solucion. prefiero no adelantarme a implementar un codigo de paginacion ya realizado. de todas maneras tomare en cuenta el link que enviaste.

alguno de ustdes me podrian ayudar en mi codigo que he desarrollado ?.

saludos.

Última edición por esaenz22; 12/10/2011 a las 08:05 Razón: correccion del tema.
  #5 (permalink)  
Antiguo 12/10/2011, 08:45
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 5 meses
Puntos: 69
Respuesta: problema al no mostrarme los links de una paginacion

esaenz22, no te paso el código para que lo implementes. Te lo paso para que lo leas y veas como lo hice yo en su momento. :)
Es la mejor ayuda que te puedo dar, sin tener que ponerme a escribir exactamente lo mismo que escribí escribiendo el paginador :P

Abrazos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #6 (permalink)  
Antiguo 12/10/2011, 08:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problema al no mostrarme los links de una paginacion

Si usas tu propio código, la función paginar, te regresa un string (al final dice return $texto_url), por lo que es forzoso que hagas un echo paginar(); para mostrarlos.

Si los quieres mostrar dentro de la función reemplaza el return final por un echo $texto_url;.

Saludos.
  #7 (permalink)  
Antiguo 12/10/2011, 10:52
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema al no mostrarme los links de una paginacion

Cambiandole el return por el echo, no me muestra los links de la paginacion GatorV. Como mencione antes, el problema radica en la variable $total_registros y no esta almacenado el total de registros en la tabla contactos.

Código PHP:
Ver original
  1. $sql_total  = "SELECT `id` FROM contactos";
  2. $rs_sql     = query($sql_total,$cn) or die(mysql_error());
  3. $total_registros    = num_rows($rs_sql);

El archivo paginar.php

Código PHP:
Ver original
  1. if($total_registros)
  2. {
  3. ...
  4.    
  5. }
  6.  
  7. echo $texto_url;

Última edición por esaenz22; 12/10/2011 a las 11:42 Razón: correccion del tema.
  #8 (permalink)  
Antiguo 12/10/2011, 13:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problema al no mostrarme los links de una paginacion

Ah eso es porque $total_registros la estas definiendo en tu función mostrar_registros. Recuerda que las variables que definas dentro de una función no son globales por defecto.

Para "sacar" una variable de una función tienes 3 opciones:

- Definirla como global (no recomendado)
- Regresarla usando el comando "return" desde tu función
- Pasar un parámetro por referencia a la función que modifique ese valor.

En tu caso yo optaría por pasar el parámetro por referencia, ya que ya estas regresando el resultset.

Saludos.
  #9 (permalink)  
Antiguo 12/10/2011, 13:16
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema al no mostrarme los links de una paginacion

y como pasaria un parametro que modifique ese valor GatorV ?.

saludos.
  #10 (permalink)  
Antiguo 12/10/2011, 13:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problema al no mostrarme los links de una paginacion

Deberías de ver en el Manual de PHP es muy claro en eso:
Código PHP:
Ver original
  1. function algo(&$algo) {
  2.      $algo = "cambiado";
  3. }
  4.  
  5. $foo = "hola";
  6. algo($foo);
  7. echo $foo; // cambiado

Saludos.
  #11 (permalink)  
Antiguo 12/10/2011, 14:09
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema al no mostrarme los links de una paginacion

ok. habia duplicado por error mi respuesta y mi pregunta es como haria entonces para que me devuelva los links de las paginas con la funcion paginar GatorV ?.

seria de esta manera:

Código PHP:
Ver original
  1. function mostrar_registros(&$num_registros)
  2. {
  3.     global $cn;
  4.    
  5.     // declaramos la primera consulta para sacar el total de registros para paginar.
  6.     $sql_total  = "SELECT `id` FROM contactos";
  7.     $rs_sql     = query($sql_total,$cn) or die(mysql_error());
  8.     $total_registros    = num_rows($rs_sql);
  9.    
  10.     return $num_registros;
  11.    
  12. }
  13.  
  14.  
  15. mostrar_registros($total_registros);

saludos.
  #12 (permalink)  
Antiguo 12/10/2011, 14:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problema al no mostrarme los links de una paginacion

Usa tu función mostrar_registros como la tienes y solo agrega un global $total_registros, ya que de por sí estas usando global par $cn, que agregues otra variable no creo que te cause muchos problemas.

En un futuro evita trabajar con variables globales, hacen tu código mucho más difícil de mantener.

Saludos.
  #13 (permalink)  
Antiguo 12/10/2011, 14:26
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema al no mostrarme los links de una paginacion

aun asi colocando global $total_registros, me sigue dando el mismo resultado.

Código PHP:
Ver original
  1. function mostrar_registros($inicio,$registros)
  2. {
  3.     global $total_registros;
  4.    
  5.     // declaramos la primera consulta para sacar el total de registros para paginar.
  6.     $sql_total  = "SELECT `id` FROM contactos";
  7.     $rs_sql     = query($sql_total,$cn) or die(mysql_error());
  8.     $total_registros    = num_rows($rs_sql);       
  9.    
  10.     // utilizamos una consulta sql para mostrar los datos. declaramos la variable $sql y utilizamos la funcion LIMIT.  
  11.     $sql_registros   = "SELECT * FROM contactos LIMIT $inicio, $registros";
  12.     $query_registros = query($sql_registros,$cn) or die(mysql_error());
  13.     $total_paginas   = ceil($total_registros / $registros);
  14.    
  15.     return $query_registros;       
  16.    
  17. }

saludos.
  #14 (permalink)  
Antiguo 12/10/2011, 14:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problema al no mostrarme los links de una paginacion

No debes de quitar global $cn, dije agrega global $total_registros.

Saludos.
  #15 (permalink)  
Antiguo 12/10/2011, 14:44
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema al no mostrarme los links de una paginacion

Agregue la variable $total_registros y esto es lo que modifique en la funcion.

Código PHP:
Ver original
  1. function mostrar_registros($inicio,$registros)
  2. {
  3.     global $cn, $total_registros;
  4.    
  5.     // declaramos la primera consulta para sacar el total de registros para paginar.
  6.     $sql_total  = "SELECT `id` FROM contactos";
  7.     $rs_sql     = query($sql_total,$cn) or die(mysql_error());
  8.     $total_registros    = num_rows($rs_sql);       
  9.    
  10.     // utilizamos una consulta sql para mostrar los datos. declaramos la variable $sql y utilizamos la funcion LIMIT.  
  11.     $sql_registros   = "SELECT * FROM contactos LIMIT $inicio, $registros";
  12.     $query_registros = query($sql_registros,$cn) or die(mysql_error());
  13.     $total_paginas   = ceil($total_registros / $registros);
  14.    
  15.     return $query_registros;       
  16.    
  17. }

y no me muestra los links de la paginacion.

Aqui muestro los registros en este dominio que he alojado. paginacion.
  #16 (permalink)  
Antiguo 12/10/2011, 15:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problema al no mostrarme los links de una paginacion

Revisa nuevamente que estes haciendo un echo a paginar(), o que tengas el echo dentro de la función, llama a var_dump($total_registros) después de llamar a mostrar_registros.
  #17 (permalink)  
Antiguo 13/10/2011, 08:09
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema al no mostrarme los links de una paginacion

llame a la variable $total_registros con var_dump, me muestra int(12). significa que es un numero entero. tambien le quite el echo a la funcion paginar y no me muestra aun los links de las paginas.

saludos.
  #18 (permalink)  
Antiguo 13/10/2011, 08:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problema al no mostrarme los links de una paginacion

¿Lo hiciste fuera de mostrar_registros? No necesitas quitar el echo, todo depende de como dejes la función, si haces un return es forzoso que hagas el echo para mostrarlos, si no haces el return entonces debes de hacer el echo.

Estas cosas son demasiado básicas, te recomiendo que pases por el wiki del foro, en el hay un buen Manual de PHP para principantes donde puedes empezar con las bases, ya que a prueba y error no llegarás muy lejos si no tienes las bases de lo que quieres hacer.

Saludos.
  #19 (permalink)  
Antiguo 13/10/2011, 08:58
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema al no mostrarme los links de una paginacion

si. tiene razon. no llegare lejos si no reviso nuevamente mi problema. imprimi las varibales que podria ser que no me mostraban los links de paginas. esto es el resultado.

Código TEXT:
Ver original
  1. [B]Pagina:[/B]
  2. int(1)
  3.  
  4. [B]anterior:[/B]
  5. NULL
  6.  
  7. [B]siguiente:[/B]
  8. NULL
  9.  
  10. [B]total de registros:[/B]
  11. int(12)
  12.  
  13. [B]total de paginas:[/B]
  14. NULL

al parecer las variables $pagina y $total_registros me muestran los valores. en cambio las variables $anterior, $siguiente y $total_paginas me muestran como NULL. creo que por eso no me muestra los links de las paginas.

de todas maneras revisare nuevamente el manual de wiki de php. como dije antes, deje de desarrollar y programar en php por motivos de salud. le agradezco por haberme ayudado GatorV.

saludos y buen dia.
  #20 (permalink)  
Antiguo 13/10/2011, 09:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problema al no mostrarme los links de una paginacion

Pues ahí tienes el problema, dentro de tu función paginar estas usando también la variable $total_paginas la cual solo es local para mostrar_registros, de nuevo estas mezclando los conceptos, y tienes que hacer el mismo proceso para sacar la variable $total_paginas de función mostrar_registros.

Solo que aquí no la pasas como variable, la vas a tener que re-declarar con global de nuevo o pasarla como parámetro.

Saludos.
  #21 (permalink)  
Antiguo 13/10/2011, 09:31
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema al no mostrarme los links de una paginacion

comprendo. va ser tedioso re-declarar nuevamante las variables. para terminar con este tema, en su respuesta dijo acerca de Definirla como global (no recomendado), es decir, definir la varaible nuevamente. mi pregunta es porque no es recomendable usar variables globales dentro de una funcion GatorV ?.
  #22 (permalink)  
Antiguo 13/10/2011, 09:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problema al no mostrarme los links de una paginacion

La razón es que empiezas a meter variables "intocables" como necesitas esa variable global para obtener cierto proceso, si en un futuro por alguna razón decides usar esa variable para algo diferente vas a meter bugs a tu sistema porque ya la habías declarado como global para otra cosa.

Esa es la razón principal, hace complicado el diseño, el debug y el mantenimiento del sistema.
  #23 (permalink)  
Antiguo 14/10/2011, 08:20
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: problema al no mostrarme los links de una paginacion

ya queme con mi codigo. de todas maneras le dare nuevamente una revisada.

saludos.

Última edición por esaenz22; 14/10/2011 a las 08:21 Razón: correccion del texto.

Etiquetas: links, mostrarme, mysql, paginacion, registro, sql, tabla, variables
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 13:02.