Paginación PHP con MySQL: Concepto y ejemplos
Paginación PHP con MySQL. Estimo que ya ha sucedido cuando trabajamos con bastantes datos en MySQL, necesitamos obligatoriamente un paginador hecho en PHP para mostrar los resultados de la consulta en varias páginas, esto se puede aplicar en páginas web, como también en plataformas web que últimamente se eleva su uso por su flexibilidad.
Veamos un ejemplo, si tenemos una página web con bastantes artículos, sería un caos si en una sola pantalla apareciera los miles de publicaciones, generando excesivo consumo de recursos, por consiguiente, nuestra web va lenta.
Paginación PHP con MySQL: Concepto y ejemplos
Para solucionar estos inconvenientes se crea un paginador de resultados, en distintas páginas con conjuntos de registros gestionadas por el administrador del sitio. Podríamos mostrar los resultados en páginas de 10 registros o 20, dependiendo de nuestras necesidades y el tipo de datos que se estén presentando.
¿Cómo crear una paginación para mis resultados MySQL?
Lo que necesitamos es un servidor local, en este caso me apoyo en la plataforma que me simula un servidor real, por ejemplo, Vertrigo (Apache y MySQL con PHPMyAdmin) en Windows, sin embargo, existen muchos más (XAMPP, WAMP, etc.).
Esta paginación que explicaremos funciona bajo el método GET de la petición HTTP para comprobar el paginado que recibe es numérica.
Paso #01 Crear la base de datos y la tabla.
CREATE TABLE IF NOT EXISTS `pais` ( `pais_id` int(12) NOT NULL auto_increment, `pais_name` varchar(80) NOT NULL, `pais_code2` char(2) NOT NULL, `pais_code3` char(3) NOT NULL, `direccion_id` int(12) NOT NULL, PRIMARY KEY (`pais_id`), KEY `IDX_COUNTRIES_NAME` (`pais_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Tabla Paises' AUTO_INCREMENT=240 ; -- -- Volcar la base de datos para la tabla `pais` -- INSERT INTO `pais` (`pais_id`, `pais_name`, `pais_code2`, `pais_code3`, `direccion_id`) VALUES (1, 'Afghanistan', 'AF', 'AFG', 1), (2, 'Albania', 'AL', 'ALB', 1), (3, 'Algeria', 'DZ', 'DZA', 1), (4, 'American Samoa', 'AS', 'ASM', 1), (5, 'Andorra', 'AD', 'AND', 1), (6, 'Angola', 'AO', 'AGO', 1), (7, 'Anguilla', 'AI', 'AIA', 1), (8, 'Antarctica', 'AQ', 'ATA', 1), (9, 'Antigua and Barbuda', 'AG', 'ATG', 1), (10, 'Argentina', 'AR', 'ARG', 1), (11, 'Armenia', 'AM', 'ARM', 1), (12, 'Aruba', 'AW', 'ABW', 1), (13, 'Australia', 'AU', 'AUS', 1), (14, 'Austria', 'AT', 'AUT', 5), (15, 'Azerbaijan', 'AZ', 'AZE', 1), (16, 'Bahamas', 'BS', 'BHS', 1), (17, 'Bahrain', 'BH', 'BHR', 1), (18, 'Bangladesh', 'BD', 'BGD', 1), (19, 'Barbados', 'BB', 'BRB', 1), (20, 'Belarus', 'BY', 'BLR', 1);
Paso #02 Conexion con la Base. (db.php)
<?php $host="localhost"; $username="root"; $password="Contraseña"; $db="BaseDeDatos"; $con=mysql_connect($host,$username,$password) or die("No se puede acceder a la base de datos"); mysql_select_db($db,$con); ?>
Paso #03 Crear Tablas HTML y extraccion de Datos. (index.php)
Implementaremos Lenguaje HTML y PHP
<?php require_once("db.php"); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Paginación PHP con MySQL: Concepto y ejemplos</title> <style type="text/css"> ul.paginador { } ul.paginador li { float:left; } ul.paginador li a { float:left; } ul.paginador li.paginador-active a, ul.paginador li a:hover { background-color: #337ab7; border-color: #337ab7; color:#FFFFFF; } ul.paginador li.paginador-disabled a, ul.paginador li.paginador-disabled a:hover { cursor:default; } ul.paginador li.paginador-current { } </style> <link type="text/css" href="bootstrap.min.css" rel="stylesheet"> <style> table { border-collapse: collapse; width: 100%; } th, td { text-align: left; padding: 4px; } tr:nth-child(even){background-color: #f2f2f2} th { background-color: #4CAF50; color: white; } .main-wrapper{ width:80%; margin:0 auto; } hr { margin-top: 5px; margin-bottom: 5px; border: 0; border-top: 1px solid #eee; } </style> </head> <body> <div class="main-wrapper"> <br> <h1>Paginación PHP con MySQL</h1> <br> <table width="90%" border="0" cellspacing="3" cellpadding="0"> <tr> <th width="10%"><strong>ID</strong></th> <th width="70%"><strong>Nombre de Pais</strong></th> <th width="10%"><strong>Código 2</strong></th> <th width="10%"><strong>Código 3</strong></th> </tr> <?php include("class.pagina.php"); $sql="select pais_id,pais_name,pais_code2,pais_code3 from pais order by pais_name"; $PAGINADOR=new PAGINADOR($sql); $sql=$PAGINADOR->sql; $res=mysql_query($sql) or die($sql." - ".mysql_error()); while($row=mysql_fetch_array($res)) { ?> <tr> <td><?php echo $row[0]?></td> <td><?php echo $row[1]?></td> <td><?php echo $row[2]?></td> <td><?php echo $row[3]?></td> </tr> <?php } ?> </table> <hr /> <div><?php echo $PAGINADOR->ver_pagina("index.php")?></div> </div> </body> </html>
Paso #04 Llamar a la clase. (class.pagina.php)
<?php class PAGINADOR { var $sql,$records,$pages; /* Variables that are passed via constructor parameters */ var $pagina,$total,$limit,$first,$previous,$next,$last,$start,$end; /* Variables that will be computed inside constructor */ function PAGINADOR($sql,$records=10,$pages=8) { if($pages%2==0) $pages++; $res=mysql_query($sql) or die($sql." - ".mysql_error()); $total=mysql_num_rows($res); $pagina=isset($_GET["pagina"])?$_GET["pagina"]:1; $limit=($pagina-1)*$records; $sql.=" limit $limit,$records"; $first=1; $previous=$pagina>1?$pagina-1:1; $next=$pagina+1; $last=ceil($total/$records); if($next>$last) $next=$last; $start=$pagina; $end=$start+$pages-1; if($end>$last) $end=$last; if(($end-$start+1)<$pages) { $start-=$pages-($end-$start+1); if($start<1) $start=1; } if(($end-$start+1)==$pages) { $start=$pagina-floor($pages/2); $end=$pagina+floor($pages/2); while($start<$first) { $start++; $end++; } while($end>$last) { $start--; $end--; } } $this->sql=$sql; $this->records=$records; $this->pages=$pages; $this->pagina=$pagina; $this->total=$total; $this->limit=$limit; $this->first=$first; $this->previous=$previous; $this->next=$next; $this->last=$last; $this->start=$start; $this->end=$end; } function ver_pagina($url,$params="") { $pagina2=""; if($this->total>$this->records) { $pagina=$this->pagina; $first=$this->first; $previous=$this->previous; $next=$this->next; $last=$this->last; $start=$this->start; $end=$this->end; if($params=="") $params="?pagina="; else $params="?$params&pagina="; $pagina2.="<ul class='pagination paginador'>"; $pagina2.="<li class='paginador-current btn btn-primary'>Página $pagina de $last</li>"; if($page_no==$first) $pagina2.="<li class='paginador-first paginador-disabled'><a href='javascript:void(0)'><<</a></li>"; else $pagina2.="<li class='paginador-first'><a href='$url$params$first'><<</a></li>"; if($pagina==$previous) $pagina2.="<li class='paginador-previous paginador-disabled'><a href='javascript:void(0)'><</a></li>"; else $pagina2.="<li class='paginador-previous'><a href='$url$params$previous'><</a></li>"; for($p=$start;$p<=$end;$p++) { $pagina2.="<li"; if($pagina==$p) $pagina2.=" class='paginador-active'"; $pagina2.="><a href='$url$params$p'>$p</a></li>"; } if($pagina==$next) $pagina2.="<li class='paginador-next paginador-disabled'><a href='javascript:void(0)'>></a></li>"; else $pagina2.="<li class='paginador-next'><a href='$url$params$next'>></a></li>"; if($pagina==$last) $pagina2.="<li class='paginador-last paginador-disabled'><a href='javascript:void(0)'>>></a></li>"; else $pagina2.="<li class='paginador-last'><a href='$url$params$last'>>></a></li>"; $pagina2.="</ul>"; } return $pagina2; } } ?>
También utilizaremos librerías de estilo bootstrap.min.css para dar más elegancia a nuestro paginador. Pero lo más importante si te sirvió, por favor suscríbete y compártelo.
Descargar Código FuenteReferencia
Buenas noches, tengo treinta años trabajando con programación, sus ejemplos me ahorra trabajo y tiempo, todo lo puedo hacer pero menos elegante y con más pasos y más tiempo en terminar los proyectos, si tuviera dinero te compro todo lo que tenga de codigos, vivo en un pais donde la crisis es fuerte se llama Venezuela, Carlo Julio
Gracias amigo, tu ejemplo me ayudó mucho!
Tengo este par de errores, me podrían colaborar?
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PAGINADOR has a deprecated constructor in C:\wamp64\www\paginador\class.pagina.php on line 2
Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\wamp64\www\paginador\class.pagina.php on line 15
Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\wamp64\www\paginador\class.pagina.php on line 15