Paginación con PHP y MySQL. Ejemplo 2

Mostramos un script para realizar la paginación de resultados con PHP y MySQL. Ofrecemos el script para descarga con instrucciones para ponerlo en marcha.
La paginación de resultados con PHP es uno de los talleres más interesantes y prácticos que se pueden hacer con esta tecnología. Casi todos los sitios web que implementan algún tipo de búsqueda deben en algún momento utilizar la paginación de resultados para no arrojar una cantidad desmesurada de datos en una única página. Como se ha visto desde siempre en los buscadores tipo Google, es mucho mejor presentar los resultados en varias páginas distintas y colocar en la parte de abajo una lista de las páginas de resultados que la búsqueda ha encontrado.

Para realizar este ejercicio se ha utilizado una base de datos MySQL y programación utilizando la tecnología PHP.

Podemos ver el resultado que vamos a conseguir con este artículo ahora y así tendremos más facilidad de identificar las distintas partes del código que vamos a comentar.

Nota: La paginación de resultados ya se ha visto en un artículo anterior de PHP. En este caso ofrecemos otro ejemplo realizado por otro programador que seguro que nos sirve para hacernos una idea más global sobre como afrontar este tipo de problemas.

El código de este ejercicio, junto con algunas instrucciones para ponerlo en marcha, se puede descargar en este enlace.

Poner en marcha el ejemplo

En el propio código de la paginación se encuentran las instrucciones para ponerlo en marcha y explicaciones sobre el funcionamiento del script. En este texto se preproducen algunas de las notas ofrecidas para ponerlo en marcha.

1.- Copiar el fichero busqueda.php en cualquier directorio del servidor web
2.- Crear una base de datos llamado 'tpv' (si es diferente, deberíais cambiar el código)
3.- Cambiar los datos de conexión si son diferentes.
4.- Cargar la siguiente tabla en la base de datos:

CREATE TABLE comercios (
    co_id varchar(10) NOT NULL default '',
    co_nombre varchar(30) NOT NULL default '',
    co_pais varchar(30) NOT NULL default '',
    UNIQUE KEY co_id (co_id)
    ) TYPE=MyISAM;

5.- Realizar los siguientes insert


INSERT INTO comercios VALUES ('ESGR000002', 'PRUEBA 2', 'ESPAÑA');
INSERT INTO comercios VALUES ('ESGR000001', 'PRUEBA 1', 'ESPAÑA');
INSERT INTO comercios VALUES ('516', 'JUAN PEREZ', 'MEXICO');
INSERT INTO comercios VALUES ('984', 'ANTONIO RODRIGUEZ', 'MEXICO');
INSERT INTO comercios VALUES ('996', 'INDALECIO TRAVIANNI', 'ARGENTINA');
INSERT INTO comercios VALUES ('975', 'ABELARDO SAINZ', 'PERU');
INSERT INTO comercios VALUES ('111', 'JOSE TOLTACA', 'PERU');
INSERT INTO comercios VALUES ('332', 'RAIMUNDO ALONSO', 'ARGENTINA');
INSERT INTO comercios VALUES ('123', 'JUN JUANES', 'BRASIL');
INSERT INTO comercios VALUES ('585', 'JOAO PAMINHIO', 'BRASIL');
INSERT INTO comercios VALUES ('23432432', 'JOAQUIN DIAZ', 'ESPAÑA');

Por supuesto estos datos pueden ser los que queráis, solo sirve de ejemplo.

Una vez realizados todos estos pasos, ejecutar el fichero busqueda php... y a probar... :D

Nota: Al ser este un pequeño ejemplo, en el formulario de busqueda he dejado que busque el valor introducido en todos los campos.

El código del script se puede ver a continuación:

<?
    mysql_connect("localhost","root","");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>ejemplo de paginación de resultados</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Pragma" content="no-cache" />
<style type="text/css">
<!--
a.p:link {
    color: #0066FF;
    text-decoration: none;
}
a.p:visited {
    color: #0066FF;
    text-decoration: none;
}
a.p:active {
    color: #0066FF;
    text-decoration: none;
}
a.p:hover {
    color: #0066FF;
    text-decoration: underline;
}
a.ord:link {
    color: #000000;
    text-decoration: none;
}
a.ord:visited {
    color: #000000;
    text-decoration: none;
}
a.ord:active {
    color: #000000;
    text-decoration: none;
}
a.ord:hover {
    color: #000000;
    text-decoration: underline;
}
-->
</style>
</head>
<body bgcolor="#FFFFFF">
<script language="JavaScript">
function muestra(queCosa)
{
    alert(queCosa);
}
</script>
<div align="center"><strong><font color="#000000" size="2" face="Verdana, Arial, Helvetica, sans-serif">Paginación
de Resultados de una consulta SQL (sobre MySQL)<br><br><p><a href="http://www.pclandia.com">www.pclandia.com</a></p> </font></strong> </div>
<hr noshade style="color:CC6666;height:1px">
<br>
<?
//inicializo el criterio y recibo cualquier cadena que se desee buscar
$criterio = "";
$txt_criterio = "";
if ($_GET["criterio"]!=""){
   $txt_criterio = $_GET["criterio"];
   $criterio = " where co_id like '%" . $txt_criterio . "%' or co_nombre like '%" . $txt_criterio . "%' or co_pais like '%" . $txt_criterio . "%'";
}


$sql="SELECT * FROM tpv.comercios ".$criterio;
$res=mysql_query($sql);
$numeroRegistros=mysql_num_rows($res);
if($numeroRegistros<=0)
{
    echo "<div align='center'>";
    echo "<font face='verdana' size='-2'>No se encontraron resultados</font>";
    echo "</div>";
}else{
    //////////elementos para el orden
    if(!isset($orden))
    {
       $orden="co_id";
    }
    //////////fin elementos de orden

    //////////calculo de elementos necesarios para paginacion
    //tamaño de la pagina
    $tamPag=5;

    //pagina actual si no esta definida y limites
    if(!isset($_GET["pagina"]))
    {
       $pagina=1;
       $inicio=1;
       $final=$tamPag;
    }else{
       $pagina = $_GET["pagina"];
    }
    //calculo del limite inferior
    $limitInf=($pagina-1)*$tamPag;

    //calculo del numero de paginas
    $numPags=ceil($numeroRegistros/$tamPag);
    if(!isset($pagina))
    {
       $pagina=1;
       $inicio=1;
       $final=$tamPag;
    }else{
       $seccionActual=intval(($pagina-1)/$tamPag);
       $inicio=($seccionActual*$tamPag)+1;

       if($pagina<$numPags)
       {
          $final=$inicio+$tamPag-1;
       }else{
          $final=$numPags;
       }

       if ($final>$numPags){
          $final=$numPags;
       }
    }

//////////fin de dicho calculo

//////////creacion de la consulta con limites
$sql="SELECT * FROM tpv.comercios ".$criterio." ORDER BY ".$orden.",co_id ASC LIMIT ".$limitInf.",".$tamPag;
$res=mysql_query($sql);

//////////fin consulta con limites
echo "<div align='center'>";
echo "<font face='verdana' size='-2'>encontrados ".$numeroRegistros." resultados<br>";
echo "ordenados por <b>".$orden."</b>";
if(isset($txt_criterio)){
    echo "<br>Valor filtro: <b>".$txt_criterio."</b>";
}
echo "</font></div>";
echo "<table align='center' width='80%' border='0' cellspacing='1' cellpadding='0'>";
echo "<tr><td colspan='3'><hr noshade></td></tr>";
echo "<th bgcolor='#CCCCCC'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina = ".$pagina."&orden=co_id&criterio=".$txt_criterio."'>Código</a></th>";
echo "<th bgcolor='#CCCCCC'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina = ".$pagina."&orden=co_nombre&criterio=".$txt_criterio."'>Nombre</a></th>";
echo "<th bgcolor='#CCCCCC'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina = ".$pagina."&orden=co_pais&criterio=".$txt_criterio."'>País</a></th>";
while($registro=mysql_fetch_array($res))
{
?>
   <!-- tabla de resultados -->
    <tr bgcolor="#CC6666" onMouseOver="this.style.backgroundColor='#FF9900';this.style.cursor='hand';" onMouseOut="this.style.backgroundColor='#CC6666'"o"];" onClick="javascript:muestra('<? echo "[".$registro["co_id"]."] ".$registro["co_nombre"]." - ".$registro["co_pais"]; ?>');">
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registro["co_id"]; ?></b></font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registro["co_nombre"]; ?></b></font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registro["co_pais"]; ?></b></font></td>
    </tr>
   <!-- fin tabla resultados -->
<?
}//fin while
echo "</table>";
}//fin if
//////////a partir de aqui viene la paginacion
?>
    <br>
    <table border="0" cellspacing="0" cellpadding="0" align="center">
    <tr><td align="center" valign="top">
<?
    if($pagina>1)
    {
       echo "<a class='p' href='".$_SERVER["PHP_SELF"]."?pagina=".($pagina-1)."&orden=".$orden."&criterio=".$txt_criterio."'>";
       echo "<font face='verdana' size='-2'>anterior</font>";
       echo "</a> ";
    }

    for($i=$inicio;$i<=$final;$i++)
    {
       if($i==$pagina)
       {
          echo "<font face='verdana' size='-2'><b>".$i."</b> </font>";
       }else{
          echo "<a class='p' href='".$_SERVER["PHP_SELF"]."?pagina=".$i."&orden=".$orden."&criterio=".$txt_criterio."'>";
          echo "<font face='verdana' size='-2'>".$i."</font></a> ";
       }
    }
    if($pagina<$numPags)
   {
       echo " <a class='p' href='".$_SERVER["PHP_SELF"]."?pagina=".($pagina+1)."&orden=".$orden."&criterio=".$txt_criterio."'>";
       echo "<font face='verdana' size='-2'>siguiente</font></a>";
   }
//////////fin de la paginacion
?>
    </td></tr>
    </table>
<hr noshade style="color:CC6666;height:1px">
<div align="center"><font face="verdana" size="-2"><a class="p" href="index.php">::Inicio::</a></font></div>

<form action="busqueda.php" method="get">
Criterio de búsqueda:
<input type="text" name="criterio" size="22" maxlength="150">
<input type="submit" value="Buscar">
</form>

</body>
</html>
<?
    mysql_close();
?>


Se puede descargar aquí.

Compartir

Comentarios

Miguel Anguita

21/5/2004
Sería muy útil que se ampliara el artículo con la explicación de cómo hacer una búsqueda avanzada. El usuario escribe diversas palabras en varios campos y el programa busca en la BD los registros aque cumplen las condiciones, se podría usar AND, OR y > o bien < para los campos numéricos. Gracias.

Martin

11/10/2004
Este scrip esta excelente !!! No solo funciona perfectamente sino que es sencillo y además tiene un buscador muy bueno...

j0s

11/2/2006
si ta bueno el articulo ,, pero deberian corregir la parte del sql ...
donde co_id no debe ser de campo (varchar) si no de campo " int "(entero)
bueno.,porque tuve problemas al subir...menos mal me di cuenta :D jejje...saludos (y)

Nestor

23/7/2007
Muy práctico el ejemplo.<br />
Sin embargo no me corre del todo bien.<br />
La primera vez que despliego buscar.php me indica<br />
Notice: Undefined index: criterio in ... line 64<br />
En dicha línea se encuentra<br />
if ($_GET[&quot;criterio&quot;]!=&quot;&quot;)<br />
Cuando asigno criterio en el formulario, ya funciona bien. El problema es la primera vez.<br />
<br />
Probé quitando la expresión &quot;!&quot; de if ($_GET[&quot;criterio&quot;]!=&quot;&quot;) y quedó así:<br />
if ($_GET[&quot;criterio&quot;]=&quot;&quot;)<br />
Ya no da error en la primera página pero entonces en las subsecuentes búsquedas siempre da lo mismo que si fuera la primera vez y no respeta el criterio, aunque en la dirección del navegador se puede ver que si lo tomó en cuenta. Por ejemplo, su escribí mi nombre &quot;nestor&quot; (sin comuillas, claro), se ve<br />
(nombre de la pagina.php?criterio=nfs<br />
<br />
<br />

Javier

06/11/2007
Gracias por vuestro artículo. Me ha ayudado mucho.

JOSE MARTIN

08/11/2007
esta muy interesante amigo te pasaste gracias

PORFIRIO ONOFRE

15/11/2007
eSTA EXCELENTE EL SCRIPT MIS MAS SINCERAS FELICITACIONES. ME SIRVIO DE MUCHO GRACIAS

Aina

22/3/2009
Excelente tutorial... Andaba loca porque no me funcionaba el paginado de mi buscador y lo pude arreglar gracias a este artículo.<br />
<br />
Muchas gracias por la aportación.<br />
<br />
Un saludo

CinthiA

08/4/2009
gracias
Hola muy bueno este Articulo por cierto me ha ayudado a compaginar mi listado de datos que tenia en mi sistema excelente Articulo thanks!!!

Manuel

13/6/2009
Funciona
Funciona perfectamente; me ha venido genial. Gracias.

luis lopez

15/8/2009
El scrip de pagiacion esta perfecto
la verda me corrio a la perfeccion le cambien algunas cosillas pera esta

apel

18/10/2009
excelente articulo
Buenos dias!!
El articulo excelente, secillo y al grano!!!


Gracias!

juan_juanjuan

30/10/2009
no funciona
a mi no me funciona para nada

foxdog

10/11/2009
excelente
mejor no podria ser, te botastes hasta con buscador por cualquier campo sin especificar, the best of the best

edith_venegas

22/11/2009
Excelente artículo
¡Muy buen artículo! Gracias!

innovartic

27/12/2009
cogido
debes corregir esta linea
if(!isset($_GET["pagina"]))
{
$pagina=1;
$inicio=1;
$final=$tamPag;
}else{
$pagina = $_GET["pagina"];
}

sine

10/2/2010
separar el formulario de los resultados
Me gustaría que los resultados no se muestren hasta que el usuario introduzca el "criterio" de búsqueda (tal como está configurado ahora, se muestran todos los registros de la tabla y se indica el total de registros sin haber buscado nada) ¿Alguien puede ayudarme en esto?

MABM

18/2/2010
Excelente!!! justo lo que buscaba
Amigo buen dia, realmente me sirvio este articulo, solo que se deben realizar unos cambios en el para que cuando ejecutemos el archivo busqueda.php no se generen errores al inicio.
1.- Antes que nada debemos colocar bien el codigo de apertura de php, en el archivo aparece como: <? solamente, lo que debemos hacer es colocarlo asi <?php y listo.
2.- Undefined index: criterio in http://localhost/busqueda.php on line 104 o en la 62 cuando quitan los comentarios. Este error se presenta al cargar busqueda.php, esto se produce porque estamos capturando el valor de la variable criterio ($_GET["criterio"]) y esta variable lleva valor una vez que damos clic en el boton buscar. Entonces que hacer? cuando llamen al archivo busqueda.php agreguen ?criterio, quedando asi: http://localhost/busqueda.php?criterio y listo eliminamos ese error.
3.- Con el problema que no nos funciona la paginacion, es decir si damos clic en la pag. 2 el resultado es el mismo de la pagina en que nos encontramos, entonces debemos cambiar el codigo que se encuentra en la linea 130 y 136 que dice:
//pagina actual si no esta definida y limites
if(!isset($pagina))
{
$pagina=1;
$inicio=1;
$final=$tamPag;
}
este codigo lo debemos cambiar por:
//pagina actual si no esta definida y limites
if(!isset($_GET["pagina"]))
{
$pagina=1;
$inicio=1;
$final=$tamPag;
}
else
{
$pagina = $_GET["pagina"];
}

4.- Por ultimo, debemos eliminar las siguientes lineas:
<?
mysql_close();
?>
Estas cierran la conexion a la base de datos y son las ultimas 3 lineas del codigo, las quitamos y ya no deberian de presentarnos problemas.

Les agradezco que compartieran este codigo con nosotros, por lo mismo me vi obligado a realizar mis comentarios.

Saludos, desde Honduras.

20/2/2010
No Funciona
No funciona el tutorial....lo probe copiandolo y descargandolo.....cueck!!!

pepodero

09/3/2010
payuda con la paginacion
para aquellos q le funciono correctamente me podrian pasar el codigo, todavia no la tengo tan clara con el php ,, pero lo probre le modifique el Get y funciona la primera paginacion pero cuando utilizo el buscador no pasa de la primera pagina aparecen las siguiente paginas pero cuando quiero ir a ellas directamente no pasa nada ,por favor a aquellos webmaster URGENTE AYUDA les paso el codigo ta basado en el ejemplo adaptado a mi tabla, me pueden corregir el error no lo encuentro y no se como hacerlo.
<?php

mysql_connect("localhost","root","");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Consultas Sobre Productos</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Pragma" content="no-cache" />
<style type="text/css">
<!--
a.p:link {
color: #0066FF;
text-decoration: none;
}
a.p:visited {
color: #0066FF;
text-decoration: none;
}
a.p:active {
color: #0066FF;
text-decoration: none;
}
a.p:hover {
color: #0066FF;
text-decoration: underline;
}
a.ord:link {
color: #000000;
text-decoration: none;
}
a.ord:visited {
color: #000000;
text-decoration: none;
}
a.ord:active {
color: #000000;
text-decoration: none;
}
a.ord:hover {
color: #000000;
text-decoration: underline;
}


-->
</style>
</head>
<body bgcolor="#FFFFFF">

<script language="JavaScript">
function muestra(queCosa)
{
alert(queCosa);
}
</script>
<div align="center" class=
"Estilo4">
<strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><br>

</font></strong><font color="#000000">
<p><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="http://www.insitegroup.com.ar">www.insitegroup.com.ar</a></font></strong></p>
</font> </div>
<hr noshade style="color:6699ff;height:1px">
<br>
<?
//inicializo el criterio y recibo cualquier cadena que se desee buscar
$criterio = "";
$txt_criterio = "";
if ($_GET["criterio"]!=""){
$txt_criterio = $_GET["criterio"];
$criterio = " where co_id like '%" . $txt_criterio . "%' or co_nombre like '%" . $txt_criterio . "%' or co_descrip like '%" . $txt_criterio . "%'";
}


$sql="SELECT * FROM tpv.comercios ".$criterio;
$res=mysql_query($sql);
$numeroRegistros=mysql_num_rows($res);
if($numeroRegistros<=0)
{
echo "<div align='center'>";
echo "<font face='verdana' size='-2'>No se encontraron resultados</font>";
echo "</div>";
}else{
//////////elementos para el orden
if(!isset($orden))
{
$orden="co_nombre";
}
//////////fin elementos de orden

//////////calculo de elementos necesarios para paginacion
//tamaño de la pagina
$tamPag=10;

//pagina actual si no esta definida y limites
if(!isset($_GET["pagina"]))
{
$pagina=1;
$inicio=1;
$final=$tamPag;
}else{
$pagina = $_GET["pagina"];
}
//calculo del limite inferior
$limitInf=($pagina-1)*$tamPag;

//calculo del numero de paginas
$numPags=ceil($numeroRegistros/$tamPag);
if(!isset($pagina))
{
$pagina=1;
$inicio=1;
$final=$tamPag;
}else{
$seccionActual=intval(($pagina-1)/$tamPag);
$inicio=($seccionActual*$tamPag)+1;

if($pagina<$numPags)
{
$final=$inicio+$tamPag-1;
}else{
$final=$numPags;
}

if ($final>$numPags){
$final=$numPags;
}
}

//////////fin de dicho calculo

//////////creacion de la consulta con limites
$sql="SELECT * FROM tpv.comercios ".$criterio." ORDER BY ".$orden.",co_nombre ASC LIMIT ".$limitInf.",".$tamPag;
$res=mysql_query($sql);

//////////fin consulta con limites
echo "<div align='center'>";
echo "<font face='verdana' size='-2'>encontrados ".$numeroRegistros." resultados<br>";
echo "ordenados por <b>".$orden."</b>";
if(isset($txt_criterio)){
echo "<br>Valor filtro: <b>".$txt_criterio."</b>";
}
echo "</font></div>";
echo "<table align='center' width='100%' border='0' cellspacing='1' cellpadding='0'>";
echo "<tr><td colspan='3'><hr noshade></td></tr>";
echo "<th bgcolor='#99ccff'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina=".$pagina."&orden=co_id&criterio=".$txt_criterio."'>Código</a></th>";
echo "<th bgcolor='#99ccff'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina=".$pagina."&orden=co_nombre&criterio=".$txt_criterio."'>Producto</a></th>";
echo "<th bgcolor='#99ccff'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina=".$pagina."&orden=co_descript&criterio=".$txt_criterio."'>Descripcion</a></th>";
echo "<th bgcolor='#99ccff'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina=".$pagina."&orden=co_precios=".$txt_criterio."'>Precio</a></th>";
echo "<th bgcolor='#99ccff'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina=".$pagina."&orden=Imagen&criterio=".$txt_criterio."'>Imagen</a></th>";
while($registro=mysql_fetch_array($res))
{
?>

<!-- tabla de resultados -->
<tr bgcolor="#6699ff" onMouseOver="this.style.backgroundColor='#33CC33';this.style.cursor='hand';" onMouseOut="this.style.backgroundColor='#6666ff'"o"];" onClick="javascript:muestra('<? echo "[".$registro["co_id"]."] ".$registro["co_nombre"]." - ".$registro["co_descrip"]; ?>');">
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registro["co_id"]; ?></b></font></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registro["co_nombre"]; ?></b></font></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registro["co_descrip"]; ?></b></font></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registro["co_precios"]; ?></b></font></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? echo $registro["Imagen"]; ?></b></font></td>
</tr>
<!-- fin tabla resultados -->
<?
}//fin while
echo "</table>";
}//fin if
//////////a partir de aqui viene la paginacion
?>
<br>
<table border="0" cellspacing="1" cellpadding="0" align="center">
<tr><td align="center" valign="top" bgcolor="#FFFFFF">
<?
$pagina = $_GET["pagina"];
if($pagina>1)
{
echo "<a class='p' href='".$_SERVER["PHP_SELF"]."?pagina=".($pagina-1)."&orden=".$orden."&criterio=".$txt_criterio."'>";
echo "<font face='verdana' size='-2'>anterior</font>";
echo "</a>&nbsp;";
}

for($i=$inicio;$i<=$final;$i++)
{
if($i==$pagina)
{
echo "<font face='verdana' size='-2'><b>".$i."</b>&nbsp;</font>";
}else{
echo "<a class='p' href='".$_SERVER["PHP_SELF"]."?pagina=".$i."&orden=".$orden."&criterio=".$txt_criterio."'>";
echo "<font face='verdana' size='-2'>".$i."</font></a>&nbsp;";
}
}
if($pagina<$numPags)
{
echo "<a class='p' href='".$_SERVER["PHP_SELF"]."?pagina=".($pagina+1)."&orden=".$orden."&criterio=".$txt_criterio."'>";
echo "<font face='verdana' size='-2'>siguiente</font></a>";
}
//////////fin de la paginacion
?>
</td>
</tr>
</table>
<hr noshade style="color:#6699ff;height:1px">
<div align="center"><font face="verdana" size="-2"><a class="p" href="index.php">::Inicio::</a></font></div>

<form action="busqueda.php" method="get">
Criterio de búsqueda:
<input type="text" name="criterio" size="22" maxlength="150">
<input type="submit" value="Buscar">
</form>

</body>
</html>

ose Miguel

06/4/2010
paginador
Nesesito ayuda nesesito un paginador para esta base de datos:

/*
MySQL Data Transfer
Source Host: localhost
Source Database: web
Target Host: localhost
Target Database: web
Date: 06/04/2010 11:29:19 a.m.
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for maguicta
-- ----------------------------
CREATE TABLE `maguicta` (
`id` int(11) NOT NULL auto_increment,
`nombre` varchar(40) collate latin1_general_ci default NULL,
`mail` varchar(50) collate latin1_general_ci default NULL,
`filen` varchar(20) collate latin1_general_ci default NULL,
`vercion` varchar(20) collate latin1_general_ci default NULL,
`Seanson` varchar(15) collate latin1_general_ci default NULL,
`tipofile` varchar(15) collate latin1_general_ci default NULL,
`lick` text collate latin1_general_ci NOT NULL,
`server` varchar(25) collate latin1_general_ci default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

-- ----------------------------
-- Records
-- ----------------------------
y me gustaria mostrar los datos en un paginador si me pueden ayudar se los agradeceria mucho....
de antemano gracias...

abccorp

06/5/2010
Muy Bueno
Esta exelente tu script gracias....y con modificaciones es mucho mas potente

Jorge Escobar

04/7/2010
Excelente
Excelente todo fucnionó de un tiro lo usare de plantilla ... Gracias

mjesore

27/7/2010
de lujo
gracias por este script me funciono muy bien

alvaro

30/7/2010
sujerencia
me parece excelente labor mostrar el codigo pero sabes q se podria hacer
comentar por modulos para q un aprendiz lo entienda mucho mejor aunque es muy claro solo era eso cuitae cualquier cosita me escriben al correo q les dejo

enrique_atala

08/9/2010
correccion
el script es EXCELENTE! un buen ejemplo para comenzar! Pero el error de la paginacion q no slata es que deben inicializar la variable pagina en valor no en 1, ya q al empezar con valor 1 menos 1 (o sea cero) y multiplicar por tampag, siempre su valor sera CERO y no avanzara, por q liminf es CERO, lo estoy probando.... pero en principio asi lo solucioné, Gracias a su Autor y estamso en contacto....
ASI es como me funciona
//pagina actual si no esta definida y limites
if(!isset($_POST["pagina"]))
{
===========================
en esta linea el error (el original dice que el valor es 1)
$pagina=2;
===========================
$inicio=1;
$final=$tamPag;
}else{
$pagina = $_POST["pagina"];
}

enrique_atala

09/9/2010
disculpas
no hagan caso a mi correccion anterior, la solucion fue puntillosamente tomar el fuente y anduvo ok. Seguira evolucionandolo y si lo mejoro lo subo. Muchas Gracias y te felicito!!! Saludos

giancarlo_churrango-619855

14/9/2010
falta seleccionar la base de datos
en este codigo aun falta chekar que base de datos se conecta por lo visto solo dice la tabla comercios y en el buscador es imprescindible colocar la base de datos a que se desea buscar

Wil

20/10/2010
Gracias
Casi no logro ver su funcionamiento, pero gracias a los comentarios lo logre. Muchas gracias por el articulo.

Javier Flores

13/12/2010
A mi me da un error en la linea 80...
$numeroRegistros=mysql_num_rows($res);

Cual sera el error? soy nuevo en PHP y MySQL y estoy buscando un ejemplo con el cual pueda AGREGRAR, ELIMINAR, MOSTRAR información de BDs

Gracias

Manuco

13/2/2011
paginacion
Excelente, estoy iniciando mi aprendizaje y lo probe funciona espectacular. GRacias

JoDiego

15/2/2011
GRACIASS!!!
Excelente articulo, muchas gracias.....funciona a la perfeccion.....hora de adaptarlo

bryan_campos

05/3/2011
No Me funciona del todo
Por mas que qlo e intentado no me funciana correctamente este es el erroe que meda
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:xampphtdocsBitacoraBDSusBCS.php on line 69
Y la verdad nose que hacer si alguie m epuede ayudar llevo dias trabajando y solo ocupo el buscador gracias

fersuas

13/4/2011
paginacion
Sres. he implementado este codigo de paginacion en mi tienda virtual, y cierto que me pagina todos los articulos, pero me esta volviendo loco el hecho que cuando esta tienda virtual no esta paginada, en cada articulo yo puedo ir a la eleccion de cantidad, y sobre todo caracteristicas, asi como stock etc., pero al paginarlo, no puedo redirigir el articulo, en su lugar me sale la ventanita windows con las caracteristicas que hay en el onclick, como hago para que me redireccione cada articulo a su imagen y diferentes caracteristicas particulares de cada articulo.
Gracias

jonathan-ely

17/4/2011
grasias me sirvio
muchas graias a la personaq que subie el codigo esta super pavisimo, mil grasias

pogesma

17/5/2011
Un error común que no se como corregirlo
No logro probarlo por que me aparece el siguiente error:<br />
<br />
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:wampwwwMiSitio2Paginacionpaginator.php on line 145<br />
<br />
while($registro=mysql_fetch_array($res))

salva-navas

17/5/2011
paginación y soluciones simples
Leer otras referencias sobre paginación, también publicadas en desarrolloweb, para cubrir la mayoría de las necesidades sin esfuerzo, por medio de scripts ya realizados.

Por ejemplo tienes el paginator ese y otra serie de scripts potentes que ya hacen la paginación por ti.

Saludos!

salva-navas

17/5/2011
error comun por no haber hecho bien el recorsert
Hola pogesma,

Está claro, por el error que te sale, que no tienes un recordset en la variable $res.
Tu consulta debe dar algún error.

Bergman01

17/5/2011
Muy bueno
Excelente

Krimen

24/5/2011
problema
hola bueno mi problema es ya cree la base de datos con su respectiva tabla "comercios" ya cree los insert como dice la tarea.
ahora donde encuentro este paso??? 1:Copiar el fichero busqueda.php en cualquier directorio del servidor web.
no aparece el link de descarga
muchas gracias

leon

29/5/2011
paginacion con htaccess
Hola de nuevo un script de paginacion php muy util.

Me encantaria alguien algun dia hiciera un articulo de paginacion php con archivo htaccess.

muchas gracias.

vasquezader

19/6/2011
Elementos para el orden
//->Bueno excelente ejemplo de paginacion, muy bueno.
//->solo quiero complementar en la LINEAS 118 HASTA LAS 128, CAMBIEN POR ESTO :
//////////elementos para el orden
if(!isset($_GET["orden"]))
{
$orden='cod_personal';//'cod_personal' lo pueden cambiar por el q deseen.
}
else {

$orden=$_GET["orden"];

}
//////////fin elementos de orden

//->y tambien tienen q cambiar en LA LINEA: 174 Y DEJARLO ASI:

$sql="SELECT * FROM hospital.personal ".$criterio." ORDER BY ".$orden. " ASC LIMIT ".$limitInf.",".$tamPag;

gabriel_ibarra-404764

15/7/2011
NO FUNCIONA PAGINACION
Hola, la busqueda la realiza de manera excelente, pero cuando quiero mostrar la informacion de la sig. página, no pasa nada. Mi version de php es la 6.0.0-dev que viene con el appserv. Será que esta version genera alguna incompatibilidad?

AnaCM

22/8/2011
cual es la mejor opcion para paginación
Se trata sobre paginación en web.
Quiero saber que método resulta más óptimo en cuanto a tiempo de carga, cual es recomendable.

Si tengo n registros en una BD (por ejemplo trabajadores), llamar al total de estos registros al cargar la página y mostrarlos en un grid (usando javascript) según el tamaño de página que quiero usar, por ejemplo 10 registros en la primera página y al clickear en la 2da página mostrar los siguientes 10 y ocultar los 10 primeros y el resto, y asi por el resto de páginas.

En este primer caso la llamada a la BD es una sola vez, la primera vez que carga la página y para mostrar los datos los oculto o los hago visibles, usando javascript, según crea necesario.

La segunda opción sería la siguiente: la primera vez que carga la página cargo en un grid el número de registros que indica mi tamaño de página, por ejemplo 20, es decir hago la consulta a la BD por los primeros 20 registros, y si clickean en la página 2 hago nuevamente la consulta a la BD por los siguientes 20 registros y así con el resto de páginas.

En este segundo caso se estaría accediendo a la base de datos por cada consulta a cada página, pero la cantidad de información que cargaría sería menor.

¿Cual resulta más óptimo?.

También deseo saber cómo realiza la paginación el GridView del ASP, y el RADGridView del Telerik, ya que estos son objeto del servidor, si por cada vez que se hace click en un nro de página van al servidor, o es que hacen inicialmente la carga total de los datos y usan javascript para mostrar y ocultar datos.

De antemano gracias por aclarar mis dudas.

Ana.

CLuiz1020

31/8/2011
duda
Disculpa las molestias pero he echo todo lo que indicas pero me tira un error

"; echo "No se encontraron resultados"; echo ""; }else{ //////////elementos para el orden if(!isset($orden)) { $orden="co_id"; } //////////fin elementos de orden //////////calculo de elementos necesarios para paginacion //tamaño de la pagina $tamPag=3; //pagina actual si no esta definida y limites if(!isset($pagina)) { $pagina=1; $inicio=1; $final=$tamPag; } //calculo del limite inferior $limitInf=($pagina-1)*$tamPag; //calculo del numero de paginas $numPags=ceil($numeroRegistros/$tamPag); if(!isset($pagina)) { $pagina=1; $inicio=1; $final=$tamPag; }else{ $seccionActual=intval(($pagina-1)/$tamPag); $inicio=($seccionActual*$tamPag)+1; if($pagina<$numPags) { $final=$inicio+$tamPag-1; }else{ $final=$numPags; } if ($final>$numPags){ $final=$numPags; } } //////////fin de dicho calculo //////////creacion de la consulta con limites $sql="SELECT * FROM proyecto.comercios ".$criterio." ORDER BY ".$orden.",co_id ASC LIMIT ".$limitInf.",".$tamPag; $res=mysql_query($sql); //////////fin consulta con limites echo "
"; echo "encontrados ".$numeroRegistros." resultados
"; echo "ordenados por ".$orden.""; if(isset($txt_criterio)){ echo "
Valor filtro: ".$txt_criterio.""; } echo "
"; echo ""; echo ""; echo ""; echo ""; echo ""; while($registro=mysql_fetch_array($res)) { ?> ');"> "; }//fin if //////////a partir de aqui viene la paginacion ?>
Código Nombre País

1) { echo ""; echo "anterior"; echo " "; } for($i=$inicio;$i<=$final;$i++) { if($i==$pagina) { echo "".$i." "; }else{ echo ""; echo "".$i." "; } } if($pagina<$numPags) { echo " "; echo "siguiente"; } //////////fin de la paginacion ?>
ya le he movido pero no le encuentro tienes alguna sugerencia=?

marisabel

05/10/2011
no me funciona
alguien me podria ayudar porque no me funciona el codigo y quiero probarlo para que pueda ser el mio porfavor alguien me podria ayudar gracias

Mary

21/10/2011
No Salen errores, pero no cambia de pagina
No salen errores, se muestran las pagina pero no cambia de pagina, he revisado y no encuentro el error.

Gracias por la ayuda..

Gonzavi

24/10/2011
Gracias por es codigo es muy util
OJO con el codigo el delimitador esta con estilo ASP, es decir, "<?" si no esta habilitada esta modalidad en el php.ini, debe declararse como "<?php"

Posterior en los comentarios hay cambios al codigo para paginar y sortear los registros, haciendo estos cambios si funciona el codigo.

Si en los querys no hacemos referencia al nombre de la base de datos recuerden cambiar el codigo para referir la base que se va a utilizar.

Algo como esto:

<?php
$con = mysql_connect("localhost","usuario","");
mysql_select_db("base de datos", $con);

Tambien cambien la linea de codigo de resultado de la consulta.....

$res = mysql_query($sql,$con);

Debe funcionar si problemas es muy util este codigo....

el_quick

23/11/2011
Recomendación de paginación
Bueno yo les recomiendo esta clase para paginaciones, está muy buena y fácil de usar se llama kpaginate este es el link http://www.aprender-a-programar.com/paginacion-php <a href="http://www.aprender-a-programar.com/paginacion-php">Paginación PHP</a>, [url="http://www.aprender-a-programar.com/paginacion-php"]Paginación PHP[/url]

Alf

10/12/2011
Paginación de Resultados de una consulta SQL (sobre MySQL)
Saludes Amigos
Yo hice la prueba y me funciona a medias ya que me sale el siguiente mensaje de error :
Warning: mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client in f:appservwwwusqueda.php on line 2

Army

19/12/2011
paginación y htaccess
Como tendría que generarse el htaccess para que $pag recoja el valor de la paginación?
http://www.midominio.com/seccion.php?pag=9

marianito

30/12/2011
TUTO... REMIXADO Y FUNCANDO !!!
Despues del comentario del colega de arriba logre remixarlo y magicamente... FUNCO !!
Lo pongo con esta euforia porq no tengo demaciada idea de php, mysql y la re q lo pa...


<?php
$con = mysql_connect("localhost","root","root");
mysql_select_db("tpv", $con);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>ejemplo de paginación de resultados</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Pragma" content="no-cache" />
<style type="text/css">
<!--
a.p:link {
color: #0066FF;
text-decoration: none;
}
a.p:visited {
color: #0066FF;
text-decoration: none;
}
a.p:active {
color: #0066FF;
text-decoration: none;
}
a.p:hover {
color: #0066FF;
text-decoration: underline;
}
a.ord:link {
color: #000000;
text-decoration: none;
}
a.ord:visited {
color: #000000;
text-decoration: none;
}
a.ord:active {
color: #000000;
text-decoration: none;
}
a.ord:hover {
color: #000000;
text-decoration: underline;
}
-->
</style>
</head>
<body bgcolor="#FFFFFF">
<script language="JavaScript">
function muestra(queCosa)
{
alert(queCosa);
}
</script>
<div align="center"><strong><font color="#000000" size="2" face="Verdana, Arial, Helvetica, sans-serif">Paginación
de Resultados de una consulta SQL (sobre MySQL)<br><br><p><a href="http://www.pclandia.com">www.pclandia.com</a></p> </font></strong> </div>
<hr noshade style="color:CC6666;height:1px">
<br>
<?php
//inicializo el criterio y recibo cualquier cadena que se desee buscar
$criterio = "";
$txt_criterio = "";
if ($_GET["criterio"]!=""){
$txt_criterio = $_GET["criterio"];
$criterio = " where co_id like '%" . $txt_criterio . "%' or co_nombre like '%" . $txt_criterio . "%' or co_pais like '%" . $txt_criterio . "%'";
}
$sql="SELECT * FROM tpv.comercios".$criterio;
$res = mysql_query($sql,$con);
$numeroRegistros=mysql_num_rows($res);
if($numeroRegistros<=0)
{
echo "<div align='center'>";
echo "<font face='verdana' size='-2'>No se encontraron resultados</font>";
echo "</div>";
}else{
//////////elementos para el orden
if(!isset($orden))
{
$orden="co_id";
}
//////////fin elementos de orden

//////////calculo de elementos necesarios para paginacion
//tamaño de la pagina
$tamPag=3;

//pagina actual si no esta definida y limites
if(!isset($_GET["pagina"]))
{
$pagina=1;
$inicio=1;
$final=$tamPag;
}else{
$pagina = $_GET["pagina"];
}
//calculo del limite inferior
$limitInf=($pagina-1)*$tamPag;

//calculo del numero de paginas
$numPags=ceil($numeroRegistros/$tamPag);
if(!isset($pagina))
{
$pagina=1;
$inicio=1;
$final=$tamPag;
}else{
$seccionActual=intval(($pagina-1)/$tamPag);
$inicio=($seccionActual*$tamPag)+1;

if($pagina<$numPags)
{
$final=$inicio+$tamPag-1;
}else{
$final=$numPags;
}

if ($final>$numPags){
$final=$numPags;
}
}

//////////fin de dicho calculo

//////////creacion de la consulta con limites
$sql="SELECT * FROM tpv.comercios ".$criterio." ORDER BY ".$orden.",co_id ASC LIMIT ".$limitInf.",".$tamPag;
$res=mysql_query($sql);

//////////fin consulta con limites
echo "<div align='center'>";
echo "<font face='verdana' size='-2'>encontrados ".$numeroRegistros." resultados<br>";
echo "ordenados por <b>".$orden."</b>";
if(isset($txt_criterio)){
echo "<br>Valor filtro: <b>".$txt_criterio."</b>";
}
echo "</font></div>";
echo "<table align='center' width='80%' border='0' cellspacing='1' cellpadding='0'>";
echo "<tr><td colspan='3'><hr noshade></td></tr>";
echo "<th bgcolor='#CCCCCC'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina = ".$pagina."&orden=co_id&criterio=".$txt_criterio."'>Código</a></th>";
echo "<th bgcolor='#CCCCCC'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina = ".$pagina."&orden=co_nombre&criterio=".$txt_criterio."'>Nombre</a></th>";
echo "<th bgcolor='#CCCCCC'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina = ".$pagina."&orden=co_pais&criterio=".$txt_criterio."'>País</a></th>";
while($registro=mysql_fetch_array($res))
{
?>
<!-- tabla de resultados -->
<tr bgcolor="#CC6666" onMouseOver="this.style.backgroundColor='#FF9900';this.style.cursor='hand';" onMouseOut="this.style.backgroundColor='#CC6666'"o"];" onClick="javascript:muestra('<?php echo "[".$registro["co_id"]."] ".$registro["co_nombre"]." - ".$registro["co_pais"]; ?>');">
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><?php echo $registro["co_id"]; ?></b></font></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><?php echo $registro["co_nombre"]; ?></b></font></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><?php echo $registro["co_pais"]; ?></b></font></td>
</tr>
<!-- fin tabla resultados -->
<?php
}//fin while
echo "</table>";
}//fin if
//////////a partir de aqui viene la paginacion
?>
<br>
<table border="0" cellspacing="0" cellpadding="0" align="center">
<tr><td align="center" valign="top">
<?php
if($pagina>1)
{
echo "<a class='p' href='".$_SERVER["PHP_SELF"]."?pagina=".($pagina-1)."&orden=".$orden."&criterio=".$txt_criterio."'>";
echo "<font face='verdana' size='-2'>anterior</font>";
echo "</a> ";
}

for($i=$inicio;$i<=$final;$i++)
{
if($i==$pagina)
{
echo "<font face='verdana' size='-2'><b>".$i."</b> </font>";
}else{
echo "<a class='p' href='".$_SERVER["PHP_SELF"]."?pagina=".$i."&orden=".$orden."&criterio=".$txt_criterio."'>";
echo "<font face='verdana' size='-2'>".$i."</font></a> ";
}
}
if($pagina<$numPags)
{
echo " <a class='p' href='".$_SERVER["PHP_SELF"]."?pagina=".($pagina+1)."&orden=".$orden."&criterio=".$txt_criterio."'>";
echo "<font face='verdana' size='-2'>siguiente</font></a>";
}
//////////fin de la paginacion
?>
</td></tr>
</table>
<hr noshade style="color:CC6666;height:1px">
<div align="center"><font face="verdana" size="-2"><a class="p" href="index.php">::Inicio::</a></font></div>

<form action="busqueda.php" method="get">
Criterio de búsqueda:
<input type="text" name="criterio" size="22" maxlength="150">
<input type="submit" value="Buscar">
</form>

</body>
</html>
<?php
mysql_close();
?>

dfsfsvs

13/1/2012
dgvsg
dfgdsrgbdrfg

ruben

20/1/2012
mas opcion en el buscador
Podrias explicar como poner otra opcion mas de busqueda y que funcione?
porque he puesto yo una opcion de una menu desplegable... parece que lo hace todo bien me saca resultados, y me muestra cuantas paginas tienen resultados, pero al cambiar de una pagina a otra se me pierden sale que no encontro resultados...
como puede ser esto?


Gracias

LUPITA

23/3/2012
no me funciona la paginacion
ya realice el ejemplo pero solo me muestra 5 registros y cuando le doy sisuiente no me enlaza a la paginado 2 donde se supone que me debe mostrar mis demas registros

danielesmar

10/7/2012
Me funciono al 100
gracias a "marianito" por el codigo que nos regalo ya funcionando, me ha servido de mucha ayuda, soy nuevo en esto, excelente web

nonusuario

19/7/2012
Excelente Codigo
Excelente Código, Funciona muy bien y además tiene un buscador que filtra los resultados y hace más fácil encontrar información en consultas extensas!! Muy bueno, Muchas Gracias !!

El código esta muy bien explicado!! y fácil de entender !!

Lestat

04/7/2013
Busqueda óptima
Hola AnaCM

Te comento que la mejor opcion para realizar la busquedas en la paginacion es el segundo caso que mencionas ya que para grandes cantidades de registro
le costara mucho a la base de datos consultar toda esa informacion y cargarla es mejor que haga una consulta por cada pagina ya que traera menor cantidad
de registros y el trabajo de la bd sera mucho menor asi como el gasto dle ancho de banda. Como complemento les puedo decir que es una muy buena opcion agregar
un boton para la descarga de la busqueda es decir una exportacion a excel con los resultados de la búsqueda, no es nada dificil.
Saludos

Gustavo

21/4/2014
php
intentare ejecutarlo gracias

JohnnyMx

14/3/2016
De lujo !
Muchas gracias Matias por el aporte, haz creado un código limpio, sencillo y al mismo tiempo funcional totalmente.
Saludos :D

gismodes37

08/4/2016
Tengo este error al ejecutar el script
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:AppServwww uevo_sistemavariospaginadorusqueda.php on line 112

y no doy con el problema, por favor necesito ayuda......

bastian

02/5/2017
MVC
Hola me funciona normal, pero el lío es que estoy trabajando con el modelo MVC, y no pude acoplar lo que tienes con lo que ya esta, me pone problemas con las rutas, ¿alguno sabe de una forma de hacerlo en MVC?