Paginación con PHP y MySQL + 3 estilos

Categorías: MySQL, PHP, Tutoriales - Tags: , , ,

En este tutorial les voy a enseñar el método que utilizo para hacer paginación en mis diseños.Pero para empezar ¿A que se le llama paginación? Esto es simplemente el índice que aparece abajo del todo que algunas veces contiene números y otras no, y nos sirve para cambiar de página. Es muy útil cuando tenemos muchos datos para mostrar y ya resulta feo que aparezca todo en la misma página.

Típica estructura:

estructura paginación

La estructura más comun suele contar con 2 botones (Previous y next) más otros tantos con los números de las páginas que tengamos(variable segun la cantidad de datos). El número resaltado indica en que página nos encontramos actualmente , y si no hay más páginas hacia abajo o hacia arriba se deshabilitaran los botones de Previous y Next respectivamente. Por último tenemos el selector de números que nos permitira saltar directamente a cualquier página sin necesidad de pasar una a una.

Para diseñar esta estructura usaremos una lista HTML (<ul>) que a su vez contendra tantos elementos de lista (<li>) como sea necesario. A cada lista le vamos a asignar un ID que definirá su estilo. A continuación paso a explicar más detalladamente.

Paginación al estilo de Flickr:

En este caso vamos a diseñar la paginación al estilo de Flickr y se verá del siguiente modo:

flicrk

El código HTML que vamos a usar es muy simple y nos servira como esqueleto para cualquier estilo , ya que solo necesitaremos cambiar el ID de la lista que en el siguiente caso será “pagination-flickr”.

1
2
3
4
5
6
7
8
9
10
11
<ul id="pagination-flickr">
	<li class="previous-off">«Previous</li>
	<li class="active">1</li>
	<li><a href="?page=2">2</a></li>
	<li><a href="?page=3">3</a></li>
	<li><a href="?page=4">4</a></li>
	<li><a href="?page=5">5</a></li>
	<li><a href="?page=6">6</a></li>
	<li><a href="?page=7">7</a></li>
	<li class="next"><a href="?page=8">Next »</a></li>
</ul>

Ahora solo nos queda agregar el código CSS para darle estilo a nuestra lista:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* -------------------------------------------- */
/* ------------- Pagination: Flickr -----------	*/
/* -------------------------------------------- */
ul    { border:0; margin:0; padding:0; }
#pagination-flickr li          { border:0; margin:0; padding:0; font-size:11px; list-style:none; /* savers */ float:left; }
#pagination-flickr a           { border:solid 1px #DDDDDD; margin-right:2px; }
#pagination-flickr .previous-off,
#pagination-flickr .next-off   { color:#666666; display:block; float:left; font-weight:bold; padding:3px 4px; }
#pagination-flickr .next a,
#pagination-flickr .previous a { font-weight:bold; border:solid 1px #FFFFFF; }
#pagination-flickr .active     { color:#ff0084; font-weight:bold; display:block; float:left; padding:4px 6px; }
#pagination-flickr a:link,
#pagination-flickr a:visited   { color:#0063e3; display:block; float:left; padding:3px 6px; text-decoration:none; }
#pagination-flickr a:hover     { border:solid 1px #666666; }

Paginación al estilo de DIGG:

digg

La estructura como pueden ver es la misma. Solo cambiamos el atributo ID de la lista.

1
2
3
4
5
6
7
8
9
10
11
<ul id="pagination-digg">
	<li class="previous-off">«Previous</li>
	<li class="active">1</li>
	<li><a href="?page=2">2</a></li>
	<li><a href="?page=3">3</a></li>
	<li><a href="?page=4">4</a></li>
	<li><a href="?page=5">5</a></li>
	<li><a href="?page=6">6</a></li>
	<li><a href="?page=7">7</a></li>
	<li class="next"><a href="?page=8">Next »</a></li>
</ul>

Y nuevamente añadiremos el estilo correspondiente. Como vereis los elementos son los mismos, solo cambiamos algunos atributos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* -------------------------------------------- */
/* ----------- Pagination: Digg Style --------- */
/* -------------------------------------------- */
ul    { border:0; margin:0; padding:0; }
#pagination-digg li          { border:0; margin:0; padding:0; font-size:11px; list-style:none; /* savers */ float:left; }
#pagination-digg a           { border:solid 1px #9aafe5; margin-right:2px; }
#pagination-digg .previous-off,
#pagination-digg .next-off   { border:solid 1px #DEDEDE; color:#888888; display:block; float:left; font-weight:bold; margin-right:2px; padding:3px 4px; }
#pagination-digg .next a,
#pagination-digg .previous a { font-weight:bold; }
#pagination-digg .active     { background:#2e6ab1; color:#FFFFFF; font-weight:bold; display:block; float:left; padding:4px 6px; /* savers */ margin-right:2px; }
#pagination-digg a:link,
#pagination-digg a:visited   { color:#0e509e; display:block; float:left; padding:3px 6px; text-decoration:none; }
#pagination-digg a:hover     { border:solid 1px #0e509e; }

Estilo de paginación limpio:

clean

Para crear un estilo un poco más limpio y menos cargado podemos usar el siguiente codigo CSS. Recordar que tienen que cambiar el ID del elemento <ul> por “pagination-clean” :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* -------------------------------------------- */
/* ------------- Pagination: Clean ------------ */
/* -------------------------------------------- */
#pagination-clean li          { border:0; margin:0; padding:0; font-size:11px; list-style:none; /* savers */ float:left; }
/* savers #pagination-clean li,*/
#pagination-clean a           { border-right:solid 1px #DEDEDE; margin-right:2px; }
#pagination-clean .previous-off,
#pagination-clean .next-off   { color:#888888; display:block; float:left; font-weight:bold; padding:3px 4px; }
#pagination-clean .next a,
#pagination-clean previous a  { border:none; font-weight:bold; }
#pagination-clean .active     { color:#000000; font-weight:bold; display:block; float:left; padding:4px 6px; /* savers */ border-right:solid 1px #DEDEDE; }
#pagination-clean a:link,
#pagination-clean a:visited   { color:#0e509e; display:block; float:left; padding:3px 6px; text-decoration:underline; }
#pagination-clean a:hover     { text-decoration:none; }

Con esto ya tenemos unas listas y su correspondientes estilos para que nuestra paginación quede de una forma profesional. El siguiente paso es añadir el codigo PHP necesario para crear el índice de acuerdo a la cantidad de datos que tengamos y poder así modificar la consulta SQL para que nos muestre ciertos resultados. Para las conexiones a la base de datos voy a seguir los pasos descritos en este artículo.

Para empezar necesitamos hacer 2 consultas SQL en lugar de 1. La primera va a ser para recuperar TODOS los datos y asi poder calcular cuantas páginas vamos a necesitar. La segunda consulta va a mostrar un rango de resultados según en que página estemos.

Por ejemplo digamos que queremos mostrar una tabla con datos de películas donde nos muestre el nombre de la película, el año de creación , etc. La tabla SQL esta compuesto por los siguientes campos: idPelicula(int(5)), nombre(VARCHAR(150)), director(VARCHAR(100)), anio(DATE).

A continuación como seria el código:

<?php
//INCLUYO LA HOJA DE ESTILOS en el header si es posible
?>
<link href="css/paginacion.css" type="text/css" rel="stylesheet">
<?php
include('config/db.php');
$conn=get_db_conn();
 
//AL PRINCIPIO COMPRUEBO SI HICIERON CLICK EN ALGUNA PÁGINA 
if(isset($_GET['page']))
{
    $page= $_GET['page'];
}
else
{
	//SI NO DIGO Q ES LA PRIMERA PÁGINA
    $page=1;
}
 
//ACA SE SELECCIONAN TODOS LOS DATOS DE LA TABLA
$consulta="SELECT * FROM peliculas";
$datos=mysql_query($consulta,$conn);
 
//MIRO CUANTOS DATOS FUERON DEVUELTOS
$num_rows=mysql_num_rows($datos);
 
//ACA SE DECIDE CUANTOS RESULTADOS MOSTRAR POR PÁGINA , EN EL EJEMPLO PONGO 15
$rows_per_page= 15;
 
//CALCULO LA ULTIMA PÁGINA
$lastpage= ceil($num_rows / $rows_per_page);
 
//COMPRUEBO QUE EL VALOR DE LA PÁGINA SEA CORRECTO Y SI ES LA ULTIMA PÁGINA
$page=(int)$page;

if($page > $lastpage)
{
    $page= $lastpage;
}

if($page < 1)
{
    $page=1;
}
 
//CREO LA SENTENCIA LIMIT PARA AÑADIR A LA CONSULTA QUE DEFINITIVA
$limit= 'LIMIT '. ($page -1) * $rows_per_page . ',' .$rows_per_page;
 
//REALIZO LA CONSULTA QUE VA A MOSTRAR LOS DATOS (ES LA ANTERIO + EL $limit)
$consulta .=" $limit";
$peliculas=mysql_query($consulta,$conn);
 
if(!$peliculas)
{
        //SI FALLA LA CONSULTA MUESTRO ERROR
        die('Invalid query: ' . mysql_error());
}
else
{
      //SI ES CORRECTA MUESTRO LOS DATOS 
      ?> <table>
      		<thead>
	      		<tr><th>Título</th><th>Director</th><th> A&ntilde;o de producci&oacute;n</th></tr>
	      	</thead>
	      	<tbody>
    <?php while($row = mysql_fetch_assoc($peliculas))
    	  {  ?>
        
        	<tr><td><?php echo $row['nombre']; ?> </td><td> <?php echo $row['director']; ?> </td><td> <?php echo $row['anio']; ?> </td></tr>
   <?php  } ?>
      		</tbody>
      	</table>
<?php
	//UNA VEZ Q MUESTRO LOS DATOS TENGO Q MOSTRAR EL BLOQUE DE PAGINACIÓN SIEMPRE Y CUANDO HAYA MÁS DE UNA PÁGINA
	 
	if($numrows != 0)
	{
	   $nextpage= $page +1;
	   $prevpage= $page -1;
	
	   ?><ul id="pagination-digg"><?php
		   //SI ES LA PRIMERA PÁGINA DESHABILITO EL BOTON DE PREVIOUS, MUESTRO EL 1 COMO ACTIVO Y MUESTRO EL RESTO DE PÁGINAS
		   if ($page == 1) 
		   {
		 	?>
		      <li class="previous-off">&laquo; Previous</li>
		      <li class="active">1</li> 
		 <?php
			  for($i= $page+1; $i<= $lastpage ; $i++)
			  {?>
			  	<li><a href="busquedas.php?page=<?php echo $i;?>"><?php echo $i;?></a></li>
		<?php }
	      
	       //Y SI LA ULTIMA PÁGINA ES MAYOR QUE LA ACTUAL MUESTRO EL BOTON NEXT O LO DESHABILITO
			if($lastpage >$page )
			{?>		
		    	<li class="next"><a href="busquedas.php?page=<?php echo $nextpage;?>" >Next &raquo;</a></li><?php
			}
			else
			{?>
				<li class="next-off">Next &raquo;</li>
		<?php
			}
		} 
		else 
		{
	
			//EN CAMBIO SI NO ESTAMOS EN LA PÁGINA UNO HABILITO EL BOTON DE PREVIUS Y MUESTRO LAS DEMÁS
		?>
		 	<li class="previous"><a href="busquedas.php?page=<?php echo $prevpage;?>">&laquo; Previous</a></li><?php
			 for($i= 1; $i<= $lastpage ; $i++)
			 {
	                       //COMPRUEBO SI ES LA PÁGINA ACTIVA O NO
		  		if($page == $i)
		  		{
			?>		<li class="active"><?php echo $i;?></li><?php
				}
				else
				{
			?>		<li><a href="busquedas.php?page=<?php echo $i;?>" ><?php echo $i;?></a></li><?php
				}
			}
	         //Y SI NO ES LA ÚLTIMA PÁGINA ACTIVO EL BOTON NEXT		
	        if($lastpage >$page )
	        {	?>	
	        	<li class="next"><a href="busquedas.php?page=<?php echo $nextpage;?>">Next &raquo;</a></li><?php
		    }
		    else
		    {
		?> 		<li class="next-off">Next &raquo;</li><?php
		  	}
		}	  
	?></ul></div><?php
	} 
}

?>

Seguramente esta última parte del codigo se pueda mejorar ya que la escribí un poco “rapido”, así que estoy abierto a sugerencias. De todas formas a mi me funciona todo correctamente. Espero que les haya servido de ayuda, ya que en su día me costo mucho encontrar un buen tutorial sobre la paginación y ninguno de los que encontre venia completo. Un saludo!!!

Descargar ejemplo

Damián Logghe

Programador freelancer y emprendedor en sueños. Contento de ser mi jefe y poder hacer lo que me gusta. WordPress es mi principal fuente de ingreso y me escribo tanto para ayudar como para tener una guia de memoria. Quieres contratarme? Déjame un mensaje.

More Posts - Website

Follow Me:
TwitterFacebookLinkedInGoogle Plus

  • daniel

    deberias pulir un poco mas tu codigo, ademas falta que cerres una llave }.

    Y corregi tu mysql_fecth_assoc

  • jorge

    Concuerdo con Daniel. Pero de todas maneras me ayudó mucho adaptandolo a mi propio código. Ahora lo modificaré para todo tipo de consultas en php. Gracias por el tutorial.

  • neo80

    me da un error pero no logro encontrar en que parte

  • Daniela

    Por primera vez un script tuyo no me funcionó, voy a intentarlo con tu ejemplo a ver que hice mal!

  • http://masquewordpress.com Damian

    Cualquier cosa escriban el error que les da a ver si logramos desifrarlo. En esta epoca andaba cambiado de plugin para mostrar código en wordpress y a veces se come algun signo que simple vista no veo.

    Saludos!

  • Daniela

    Hola Damian, mirá, volví a probar pero con tu ejemplo, cree la base con los campos como indicas y me da esto (ni idea cuál es el error)

    $lastpage){ $page= $lastpage; } if($page < 1){ $page=1; } //CREO LA SENTENCIA LIMIT PARA A?ADIR A LA CONSULTA QUE DEFINITIVA $limit= 'LIMIT'. ($page -1) * $rows_per_page . ',' .$rows_per_page; //REALIZO LA CONSULTA QUE VA A MOSTRAR LOS DATOS (ES LA ANTERIO + EL $limit) $consulta .=" $limit"; $peliculas=mysql_query($consulta,$conn); if(!$peliculas){ //SI FALLA LA CONSULTA MUESTRO ERROR die('Invalid query: ' . mysql_error()); }else{ //SI ES CORRECTA MUESTRO LOS DATOS ?>
    T?tuloDirectorA?o de producci?n

    * « Previous
    * 1
    *
    * $page ){?> Next »
    * Next »
    * « Previous
    *
    *
    $page ){ ?>

  • Daniela

    Hola, despues de dar algunas vueltas descubri cual es el problema, es en el archivo de conección con la base de datos especificamente en PROTEGER SQL INJECT, no sé como resolverlo asi que lo quite, espero que no pase nada!

    • http://masquewordpress.com Damian

      Efectivamente hay un error en mi otro post acerca de como usar la función cleanQuery

      function cleanQuery

      Busca la parte de if (phpversion() <= '4.3.0')

      y cambiala por if (phpversion() >= '4.3.0')

      Saludos y disculpen el error.

  • Jorge-1409

    hola amigos encontre algunos errores y los corregi. ya todo me esta funcionando bn..
    inserte unos datos son 84 o algo asi. son datos a la carrera (copiar y pegar).
    Descarguen el zip y lo veran. ah!!!!! algunas funciones las elimine no vi necesidad de dejarlas. y modifique algunas. Saludos desde colombia
    http://www.mediafire.com/?p1hakcyeygabr4q

    • macdo

      gracias jorch… me ayode del aporte de ambos, ahora a seguir ayundo a los demas. (Y)

    • Abi06

      gracias me has salvadoo, me funciono con tus correcciones

    • david

      Muchas gracias!!! me ayudaste mucho. Gracias

    • Eva_parrales

      No me funciona, me aparece el siguiente error ayudame Jorge-1409

      $lastpage){ $page= $lastpage; } if($page

      Título
      Director
      Autor

      « Previous
      1
      $page ){?>
      Next »
      Next »
      «
      Previous

      $page ){ ?>
      Next »
      Next »

  • Daniela

    Gracias Damián, ahora si funciono a la perfección!!

  • Pingback: SoloUsalo v1.0 - » » Clase Pagination para php5+Mysql, paginando de forma facil.()

  • http://www.infodisfap.com infodisfap

    la de jorge si funciona
    Jorge-1409
    informacion al personal discapacitado de las fuerzas armadas del peru

  • http://www.sinapsisweb.com Ricardo Chumpitaz

    hola me parece genial tu tutorial , pero quiero hacerte una consulta cuando traes la data y realizas un select * from peliculas para ver la cantidad de paginas no seria mas optimo realizar un select count(*) from peliculas , ya que al realizar esa consulta te traes toda la data de la tabla si existen 10000000 de datos tendrias un problema de performance.. me gustaria q comentes algo de eso por favor.. a ver si estoy en lo cierto.

    • pitogrillo

      Estás totalmente en lo cierto. La primera regla de oro de un programador profesional de bases de datos es precisamente obtener SOLAMENTE la información que se necesite y ni un dato más. Si cuentas registros, DEBES usar la funcion COUNT. Otra regla es que es mucho mejor hacer muchos selects pequeñitos que uno solo muy grande.

  • Walter desde cuba

    como lo adapto a un paginado basico que ya tenia en mi sitio??

  • Awer

    Como podría establecer un orden de resultados, es decir, que aparezcan en varias columnas, en vez de todo en horizontal. Si sacas 12 registros de la tabla, pues ordenarlos de 4 en 4,

  • http://www.pharalax.com Alberto Magno

    Hola, el error esta en el nombre de la variable para el contador. En la seccion de paginacion se utiliza la variable $numrows mientras que en el inico del script se utiliza la variable $num_rows para saber el total de registros. ademas de que le sobr un '}'

  • wilson zauma

    existen errores para el codigo inicial al principio me salia:
    $lastpage){ $page= $lastpage; } if($page < 1){ $page=1; } //CREO LA SENTENCIA LIMIT PARA A?ADIR A LA CONSULTA QUE DEFINITIVA $limit= 'LIMIT'. ($page -1) * $rows_per_page . ',' .$rows_per_page; //REALIZO LA CONSULTA QUE VA A MOSTRAR LOS DATOS (ES LA ANTERIO + EL $limit) $consulta .=" $limit"; $peliculas=mysql_query($consulta,$conn); if(!$peliculas){ //SI FALLA LA CONSULTA MUESTRO ERROR die('Invalid query: ' . mysql_error()); }else{ //SI ES CORRECTA MUESTRO LOS DATOS ?>
    T?tuloDirectorA?o de producci?n

    pero descubri q cambiando como dice DAMIAN

    en la pagina db.php en la linea
    function cleanQuery
    Busca la parte de if (phpversion() <= '4.3.0')
    y cambiala por if (phpversion() >= '4.3.0')
    sin el punto y coma
    xq ami me salia asi : (phpversion()&gt;>= '4.3.0');
    entonces corregi el error

    ADEMAS alberto encontro otro error en la paginacion.php
    resulta q en la linea donde dice

    if($numrows!=0)
    cambiarla por la linea:
    if($num_rows!=0)
    es xq las variables son diferentes x el simple echo de escribir mal.

    y como PUNTO FINAL
    a las lineas:
    </tbody>
    </table>
    <?php
    despues del php le hace falta un corchete para que cierre la consulta del ELSE
    despues de eso el resto solo es mover la BD que desean mostrar

  • http://twitter.com/jdrg_ @jdrg_

    Me sirvió muchísimo el ejemplo que pusiste. Muchísimas gracias

  • joivan

    Me sirvio full todo ok. pero tengo una duda que pasa si tengo miles de resultados los números de la paginacion s me hacen por ejemplo 100 y me muestra toditos como se podria arreglar para q muestre una línea y a medida q uno avanza muestra los otros.

  • joivan

    Les mando el ejemplo para que lo vean como va la cosa http://www.bibliocomunidad.com/web2/catcomp.php

  • http://www.facebook.com/JoseIvanAguilar Ivan Aguilar Carranza

    Me sirvio full todo ok. pero tengo una duda que pasa si tengo miles de resultados los números de la paginacion s me hacen por ejemplo 100 y me muestra toditos como se podria arreglar para q muestre una línea y a medida q uno avanza muestra los otros.

  • http://imperiokainraziel.blogspot.com kain_raziel

    gracias por los métodos yo tenia uno mas complejo y menos configurable, voy a probarlo para ver que tal me funciona ; )

  • Sergio

    Excelente tutorial,pero meda un error:

    Invalid query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0,5' at line 1

    les agradecere mucho su ayuda, creo que el error es al agregar el limte + la cnsulta

  • http://admin1234.com Juanla

    Una observación, esta línea:
    $limit= 'LIMIT'. ($page -1) * $rows_per_page . ',' .$rows_per_page;

    Debería contener un espacio tras el LIMIT, para que no haya problemas
    $limit= 'LIMIT '. ($page -1) * $rows_per_page . ',' .$rows_per_page;

    Muy útil el código, gracias :)

  • jmancilla

    Invalid query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0,5' at line 1
    les agradecere mucho su ayuda

  • Rikochett

    Amigos, a mi me funcionó de maravillas y creo que me vendrá de pelos para más de algún proyecto. Si a algunos no les funciona quizás es porque el volcado de la base de datos está con errores; le falta una comilla simple, tienen que buscar. Corregí el problema y cero rollo. Miren, el problema es éste:

    'Jorge-1409 <— le falta la comila. Debe quedar así:
    'Jorge-1409'

    Y listo!

    Ah, por cierto, excelente el blog! Felicitaciones, ya está entre mis favoritos!

    Saludos!

  • fernando

    Hola gente. me funciono 10puntos, ahora tengo una consulta como se podria hacer cuando son muchos registros y debe poner varias paginas para que trabaje tipo la paginacion de google por ejemplo?.
    saludos

  • http://www.lestergudiel.com LESTER

    MUY BUEN EJEMPLO PERO NO ME FUNCIONO A LA PERFECCION.
    $lastpage){ $page= $lastpage; } if($page < 1){ $page=1; } //CREO LA SENTENCIA LIMIT PARA AÑADIR A LA CONSULTA QUE DEFINITIVA $limit= 'SELECT * FROM '.$GLOBALS['DB_TBL'].' LIMIT '. ($page -1) * $rows_per_page . ',' .$rows_per_page; //REALIZO LA CONSULTA QUE VA A MOSTRAR LOS DATOS (ES LA ANTERIO + EL $limit) $consulta = $limit; $peliculas=mysql_query($consulta); if(!$peliculas){ //SI FALLA LA CONSULTA MUESTRO ERROR die('Invalid query: ' . mysql_error()); }else{ //SI ES CORRECTA MUESTRO LOS DATOS ?>

    ESTE ES EL ERROR//

  • federico

    Hola, como puedo poner esto ? me explican ?

  • tcdaza

    hola amigos el error del codigo esta en la linea 64: esta if($numrows != 0){
    y deberia de ser if($num_rows != 0){
    por eso es q a algunos no les corre.

  • tcdaza

    me tome la molestia de pulir el codigo y crear una sola secuencia de php. haber si les gusta. particularmente soy nuevo en php pero puedo entender mejor el codigo de esta manera:

    <?php
    /* estos parametro no modifique */
    header('Cache-Control: no-cache'); // no uso cache
    header('Pragma: no-cache');
    date_default_timezone_set("America/Lima"); //defino el rango horario
    include "../tcd/config.php"; //cargo mis funcones
    include "../tcd/funciones.php"; //cargo mis funcones
    //checarSeccion('../logout.php');
    //ojo paaginador
    if (isset($_GET['page'])) {
    $page = $_GET['page'];
    } else {
    $page = 1;
    }
    $consulta = "SELECT * FROM familia";
    $datos = mysql_query($consulta);
    $num_rows = mysql_num_rows($datos);
    $rows_per_page = 15;

    $lastpage = ceil($num_rows / $rows_per_page);
    $page = (int) $page;

    if ($page > $lastpage) {
    $page = $lastpage;
    }
    if ($page < 1) {
    $page = 1;
    }

    $limit = ' LIMIT ' . ($page – 1 ) * $rows_per_page.' , ' . $rows_per_page . ' ';
    $consulta .= $limit;
    $peliculas = mysql_query($consulta);

    if (!$peliculas) {
    ! die('Invalid query: ' . mysql_error());
    } else {
    echo '
    <html><head><link href="../css/lista.css" rel="stylesheet" type="text/css" />
    </head><body><table><thead>
    <tr><th>Cod</th><th>Director</th></tr></thead>
    <tbody>';
    while ($row = mysql_fetch_assoc($peliculas)) {
    echo '<tr><td>' . $row['idfamilia'] . '</td>
    <td>' . $row['fam_nombre'] . ' </td></tr>';
    }
    echo '</tbody></table>';
    if ($num_rows != 0) {
    $nextpage = $page + 1;
    $prevpage = $page – 1;
    echo '<ul id="pagination-clean">';
    if ($page == 1) {
    echo '<li class="previous-off">&laquo; Previous
    <li class="active">1';

    for ($i = $page + 1; $i <= $lastpage; $i++) {
    $tcd.= '<a href="frmlstarticulos.php?page=' . $i . '>' . $i . '';
    }
    if ($lastpage > $page) {
    echo '<li class="next"><a href="frmlstarticulos.php?page=' . $nextpage . '" >Next &raquo;';
    } else {
    echo '<li class="next-off">Next &raquo;';
    }
    } else {
    echo '<li class="previous"><a href="frmlstarticulos.php?page=' . $prevpage . '" >&laquo; Previous';
    for ($i = 1; $i <= $lastpage; $i++) {
    if ($page == $i) {
    echo '<li class="active">' . $i . '';
    } else {
    echo '<a href="frmlstarticulos.php?page=' . $i . '" >' . $i . '';
    }
    }
    if ($lastpage > $page) {
    echo '<li class="next"><a href="frmlstarticulos.php?page=' . $nextpage . '">Next &raquo;';
    } else {
    echo '<li class="next-off">Next &raquo;';
    }
    }
    echo '</div>';
    }
    echo '</body></html>';
    }
    ?>

    • JosyFG

      Hola a todos, el código me fue útil después de algunas modificaciones para adaptarlo a lo que necesitaba. sin embargo no consigo que aparezca centrado, se va todo al lado izquierdo. alguien puede decirme la solución a esto?

  • Juan Carlos

    Haciendo algunos ajustes y funciona muy bien

  • Martín

    Hola, muchas gracias por el tutorial, lo adapte y me sirvió muchisimo.

    Saludos de Lima, Perú
    Martín

  • Daniel

    }
    }
    ?></div><?
    }// me alega este corche error

  • Masca

    Muchas gracias.
    Me estaba volviendo loco para implementar una paginacion al la forma extraña de pagina que tengo y lo tuyo me ha valido muy bien, retocando algunas cosillas y eliminando otras.
    Muchas gracias.

  • http://www.tabam.host22.com tabam

    Exelente, me gusto el estilo aplicado a la paginacion, ya lo estoy usando. Gracias!

  • Laura Brey

    Hola, muchisimas gracias por este tutorial. He estado dando vueltas por la red buscando una solución a este problema y creo que he conseguido una guia de como hacerlo gracias a tu tuto. Mi problema es que tengo una libreria montada en un oscommerce y el cliente quiere que en el apartado de novedades le ponga paginación. Esto funcionará en un oscommerce? Agradeceria mucho tu respuesta. mi email [email protected]. Mi nobre es Laura Brey, me registraré ya. Un cordial saludo

  • Gaston

    Muchas gracias por el ejemplo, lo aplique y funciona de 10. solo tengo un problema: en la misma tabla tengo varios registros con un campo variable segun el que tenga (1, 2 o 3) le doy prioridad en el listado de consulta, la idea es que se muestren primero los que poseen valor (1) luego los de (2) y finalmente los de valor (3) logicamente todo haciendo uso de la paginacion.
    digamos que tengo 20 registros con valor de campo (1) luego otros 10 con valor (2) y unos 50 con valor (3). desde ya gracias y espero se me entienda! Saludos dejo mi mail: [email protected]

  • Beuses

    Hola, tengo una duda…
    Me preguntaba hasta que anchura llegan esos numeros de paginacion?? es decir, que si tengo 50 paginas me saldran las 50??

  • Ismaelivan

     Me daba flojera hacer una paginacion porque pensaba que era complicado y al ver tus comentarios en el codigo me anime, y ya no es tan complicado si copio y pego jejeje. Me lie un poco con las aperturas y cierres de z? ?> asi que los reemplace por echo “codigohtml”; para no confundirme y aunque no se si hay desventajas de hacerlo asi pues por el momento me funciono xD, despues me lie porque le daba siguiente y nomas cambiaba el numero, habia que agregar la otra variable de busqueda search=$search?page=$page y quedo de maravilla, muchisimas gracias por el code!!! si es posible utilizarlo tal cual???

  • Eva_parrales

    $lastpage){ $page= $lastpage; } if($page

    Título
    Director
    Autor

    « Previous
    1
    $page ){?>
    Next »
    Next »
    «
    Previous

    $page ){ ?>
    Next »
    Next »

  • ThenKing

    Hola?… este codigo funcuiona con SQL 2000 porq lo estoy planteando y sale muchos errores en la caso del Limit… no funca en sql 2000, poro con el msyql todo anda bien… gracias alguien tiene esta paginacion pero con una db de sql 2000.. saludos…

  • ThenKing

    Este es codigo para PHP con SQL-2000


     

    $lastpage)
    {
        $page= $lastpage;
    }

    if($page
                  
                      TítuloDirector Año de producción
                  
                  
       
            
                
                
      
                  
              

                  « Anterior
                  1
             <?php
                  for($i= $page+1; $i
                      <a href="busquedas.php?page=”>
            $page )
                {?>        
                    <a href="busquedas.php?page=” >Siguiente »
                    Siguiente »
            
                 <a href="busquedas.php?page=”>« Anterior<?php
                 for($i= 1; $i                <a href="busquedas.php?page=” >$page )
                {    ?>    
                    <a href="busquedas.php?page=”>Siguiente »         Siguiente »

  • Ricardo

    cómo adaptarlo para que funcione con php + oracle10g ?

  • Ricardo

    cómo adaptarlo para que funcione con php + oracle10g ?

  • Paul

    Hola, mi consulta es la siguiente: tengo 2 paginas, en la primera pongo el dato por el cual quiero filtrar una tabla, un apellido por ejemplo. En la segunda proceso el dato ingresado y lo rescato con $_REQUEST[opcion], donde “opcion” es donde ingreso el apellido en la primer pagina. El tema es que cuando quiero hacer la paginacion vuelvo a cargar esta segunda pagina pero no me reconoce el valor “opcion” cargado en la primera. Como tendria que hacer para que no me salte error??
    Agradeceria alguna orientacion, gracias!Aqui el codigo de la pagina cartas3.php que procesa los datos ingresados: 
    <?php
    if (isset($_REQUEST['pos']))
      $inicio=$_REQUEST['pos'];
    else
      $inicio=0;

    –ACA CONECTO A LA BASE DE DATOS–

    $registros=mysql_query("select Nro_carta,Remitente,Nombre,Apellido,Calle,Cp,Localidad,Provincia,Zona,Estado,Fecha_emic,
    Fecha_entr,acuse,Nro_cart2,Sucursal,Socio, Servicio
    from tablacartas where apellido like '%$_REQUEST[opcion]%' order by Nro_carta limit $inicio,10",$conexion) or die('Se ingreso un dato erróneo.');

      while ($reg=mysql_fetch_array($registros))
      {
      echo 'Número de carta: ‘.$reg[‘Nro_carta’].””;
      echo ‘Remitente: ‘.$reg[‘Remitente’].””;
      echo ‘Nombre: ‘.$reg[‘Nombre’].””;
      echo ‘Apellido: ‘.$reg[‘Apellido’].””;
      echo ‘Calle: ‘.$reg[‘Calle’].””;
      echo ‘Código postal: ‘.$reg[‘Cp’].””;
      echo ‘Localidad: ‘.$reg[‘Localidad’].””;
      echo ‘Provincia: ‘.$reg[‘Provincia’].””;
      echo ‘Zona: ‘.$reg[‘Zona’].””;
      echo ‘Estado: ‘.$reg[‘Estado’].””;
      echo ‘Fecha de emisión: ‘.$reg[‘Fecha_emic’].””;
      echo ‘Fecha de entrega: ‘.$reg[‘Fecha_entr’].””;
      echo ‘Acuse: ‘.$reg[‘acuse’].””;
      echo ‘Número de carta 2: ‘.$reg[‘Nro_cart2′].””;
      echo ‘Sucursal: ‘.$reg[‘Sucursal’].””;
      echo ‘Socio: ‘.$reg[‘Socio’].””; 
      echo ‘Servicio: ‘.$reg[‘Servicio’].””;
       } 

    if ($inicio==0)
      echo “anteriores “;
    else
    {
      $anterior=$inicio-10;
      echo “Anteriores “;
    }

    if ($contador==10)
    {
      $proximo=$inicio+10;
      echo “Siguientes“;
    }
    else
      echo “siguientes”;
    ?> 

  • Yea

    Creo que para que no salga la barra de paginación cuando solo hay un registro se debería cambiar la linea:

      //UNA VEZ Q MUESTRO LOS DATOS TENGO Q MOSTRAR EL BLOQUE DE PAGINACIÓN SIEMPRE Y CUANDO HAYA MÁS DE UNA PÁGINA

     if($num_rows != 0)

    por

     if($num_rows > $rows_per_page)

    Saludos

  • Crisk-milo

    amigo hola a mi me sale error en la parte donde ala variable $conn le asigo la funcion de la conexion  me sale este error
    Fatal error: Call to undefined function get_db_conn() in

     que puede ser?

  • Crisk-milo

    bueno ya arregle el problema de la function del aconexion pero ahora me tira este error 
    Invalid query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘5’ at line 1

    esto me hace caer en cuenta que se esta llendo por esta condicion

    if(!$peliculas){        //SI FALLA LA CONSULTA MUESTRO ERROR die(‘Invalid query: ‘ . mysql_error());como arreglo eso amigos que me hace falta espero que me ayude un saludo y que les vaya bien ;

  • Cesar Lanz

    EN VEZ DE:

    $consulta=”SELECT * FROM peliculas”;
    $datos=mysql_query($consulta,$conn);
    $num_rows=mysql_num_rows($datos);

    SE PUEDE HACER:$consulta=”SELECT COUNT(*) cant FROM peliculas”;$datos=mysql_query($consulta,$conn);
    $fila = mysql_fetch_array($datos, MYSQL_ASSOC);$num_rows=$fila[“cant”];ANUNQUE ES UNA LINEA DE CODIGO MAS, ES MAS EFICIENTE YA QUE NO SE TRAE TODA LA DATA DE LA TABLA peliculas SOLO PARA CONTAR LA CANTIDAD DE REGISTROS CON PHP, ES DECIR ES MAS RAPIDO Y EFICIENTE.
     

    • Andjeo

      Ola Cesar, dejame ver como le hago te aviso si funciono. Espero que si….

  • Fco Eris

    Excelente tutorial me funciona a la perfección.
    Gracias!

    Atte.

    Francisco Eris.

  • Miguel

    Hola Damián, en la línea 76…if($numrows != 0) …la variable esta mal invocada…esa variable es $num_rows…..así tu codigo queda perfecto..muchas gracias por la ayuda

    • candy

       tienes toda la razon!!! estuve un buen rato batallando y hasta que vi tu comentario pude ver que no se invoca bien la variable y por lo tanto no genera la funcionalidad, gracias!

  • Andjeo

    el script con la correccion que hizo Miguel funciona pero lo probe con una base de datos con mas de 200 registros y muestra muchos links de paginas, hay forma de mostrar por decir lotes de 6 paginas en los links, ej:  previo 1 2 3 4 5 6 siguiente

  • http://www.facebook.com/branny.hernandez Branny Hernandez

    Excelente tutorial yo también hice una contribución de una clase en php para la paginación de resultados espero que sea de utilidad.

    http://www.web-design.cl/PaginacionBH/

    Tine varias opciones configurables :)

  • Alfadaemon

    Gracias por compartir el código. Me servio muchísimo. Pagina 100% recomendada.

  • haha

    hola

    no consigo que funcione y no me sale ningun error… ayuda!!!

  • haha

    SOY haha mi codigo es:
    $lastpage){    $page= $lastpage;} if($page TítuloDirector Año de producción      « Previous    1 <?php for($i= $page+1; $i         <a href="busquedas.php?page=”>$page ) {?> <a href="busquedas.php?page=” >Next » Next »      <a href="busquedas.php?page=”>« Previous<?php for($i= 1; $i<a href="busquedas.php?page=” >$page ){?><a href="busquedas.php?page=”>Next »       Next »

  • Lorenzoibarrag

    Exelente, me salvaste.
    Un abrazo :D

  • Edgar Mendoza Ortegon

    Mucha Gracias amigo la verdad me sirvio de mucho te lo agradesco