HTML5 Demostración y EjemplosLenguaje PHP

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.

paginador PHP y MySQL
paginador PHP y MySQL

¿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)'>&lt;&lt;</a></li>";
			else
				$pagina2.="<li class='paginador-first'><a href='$url$params$first'>&lt;&lt;</a></li>";
			if($pagina==$previous)
				$pagina2.="<li class='paginador-previous paginador-disabled'><a href='javascript:void(0)'>&lt;</a></li>";
			else
				$pagina2.="<li class='paginador-previous'><a href='$url$params$previous'>&lt;</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)'>&gt;</a></li>";
			else
				$pagina2.="<li class='paginador-next'><a href='$url$params$next'>&gt;</a></li>";
			if($pagina==$last)
				$pagina2.="<li class='paginador-last paginador-disabled'><a href='javascript:void(0)'>&gt;&gt;</a></li>";
			else
				$pagina2.="<li class='paginador-last'><a href='$url$params$last'>&gt;&gt;</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.

Paginación PHP con MySQL Concepto y ejemplos
Paginación PHP con MySQL Concepto y ejemplos
Descargar Código Fuente

Referencia

Método GET

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

3 comentarios

  1. 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

  2. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba