Temas > Programacion > Php > Paginacion de registros en php
Julio

Paginación de registros
En situaciones en las cuales una consulta retorna muy muchos 
datos, en vez de enviarlos todos al navegador, se puede enviar 
un conjunto limitado de registros. Luego, mediante hipervínculos,
ver el resto de datos. Por ejemplo, cuando hacemos búsquedas con 
el servidor google, generalmente no nos retorna todas las direcciones 
donde se encuentran los resultados buscados, nos retorna páginas
con 10 enlaces por página (pensemos el tiempo de transferencia si
nos retornara 1.000.000 de enlaces).
Bueno, ahora resolvamos con el lenguaje PHP este problema de 
paginación:
<?php
if (isset($_POST[`pos`]))
  $inicio=$_POST[`pos`];
else
  $inicio=0;
?>
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysql_connect("localhost","root","z80") or
  die("Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die("Problemas en la selección de la base de datos");
$registros=mysql_query("select alu.codigo as
               codigo,nombre,mail,codigocurso,
               nombrecur from alumnos as alu
               inner join cursos as cur on cur.codigo=alu.codigocurso
               limit $inicio,2", $conexion) or
  die("Problemas en el select:".mysql_error());
$impresos=0;
while ($reg=mysql_fetch_array($registros))
{
  $impresos++;
  echo "Codigo:".$reg[`codigo`]."<br>";
  echo "Nombre:".$reg[`nombre`]."<br>";
  echo "Mail:".$reg[`mail`]."<br>";
  echo "Curso:".$reg[`nombrecur`]."<br>";
  echo "<hr>";
}
mysql_close($conexion);
if ($inicio==0)
  echo "anteriores ";
else
{
  $anterior=$inicio-2;
  echo "<a href="pagina1.php?pos=$anterior">Anteriores </a>";
}
if ($impresos==2)
{
  $proximo=$inicio+2;
  echo "<a href="pagina1.php?pos=$proximo">Siguientes</a>";
}
else
  echo "siguientes";
?>
</body>
</html>
Hay muchas cosas importantes en este ejemplo, lo primero que
vemos es el bloque que rescata a partir de qué registro ir mostrando:
<?php
if (isset($_POST[`pos`]))
  $inicio=$_POST[`pos`];
else
  $inicio=0;
?>
La función isset retorna verdadero si existe la variable que le
pasamos como parámetro, en este caso le estamos pasando la 
componente pos del vector asociativo $_POST. Cuando llamamos 
por primera vez a esta página, lo hacemos : pagina1.php sin 
parámetros, por lo que el if se verifica como falso. Es decir la variable

$inicio se carga con el valor 0. Otro concepto importante es la cláusula 
limit que es propiedad del gestor MySQL. Mediante esta cláusula 
limitamos la cantidad de registros que retorna el select. El primer valor 
del limit indica a partir de cual registro y el segundo la cantidad de 
registros. Es decir si un select sin limit retorna 100 registro, luego 
utilizando por ejemplo la sintaxis limit 50,25 nos retornará, de esa lista

de 100 registros, a partir del registro de la posición 50, 25 registros.
En nuestro problema indicamos que retorne desde valor que tenga la 
variable $inicio y como cantidad 2 (páginas con 2 registros):
<?php
$registros=mysql_query("select alu.codigo as
                codigo,nombre,mail,codigocurso,
                nombrecur from alumnos as alu
                inner join cursos as cur on cur.codigo=alu.codigocurso
                limit $inicio,2", $conexion) or
?>
Seguidamente mostramos todos los registros retornados y además 
los contamos:
<?php
$impresos=0;
while ($reg=mysql_fetch_array($registros))
{
  $impresos++;
  echo "Codigo:".$reg[`codigo`]."<br>";
  echo "Nombre:".$reg[`nombre`]."<br>";
  echo "Mail:".$reg[`mail`]."<br>";
  echo "Curso:".$reg[`nombrecur`]."<br>";
  echo "<hr>";
}
?>
Ahora vemos dónde dispondremos los hipervínculos, hacia 
adelante o atrás:
<?php
if ($inicio==0)
  echo "anteriores ";
else
{
  $anterior=$inicio-2;
  echo "<a href="pagina1.php?pos=$anterior">Anteriores </a>";
}
?>
Si la variable $inicio vale 0 significa que no hay registros antes 
de éste, por lo que sólo mostramos un texto "anteriores". En caso 
que la variable $inicio sea distinta de 0, se ejecuta el else, donde
disponemos un hipervínculo con la misma página e inicializando el 
parámetro pos con el valor de $inicio menos 2.
Si el contador $impresos tiene el valor 2 significa que posiblemente
hay más registros por mostrar y debemos disponer un hiper vínculo
con la misma página pero inicializando el parámetro pos con el
valor de $inicio más 2:
<?php
if ($impresos==2)
{
  $proximo=$inicio+2;
  echo "<a href="pagina1.php?pos=$proximo">Siguientes</a>";
}
else
  echo "siguientes";
?>













¿Has olviado tu contraseña?

Pulsa aquí para registrate




Google






LunMarMieJueVieSabDom
    123
45678910
11121314151617
181920 21222324
252627282930 

Jueves 21 de Noviembre 2024
Semana 47

..............................................................................................................................................................................................................................................
(Contacto)..
Esta web utiliza cookies para obtener datos estadísticos de la navegación de sus usuarios. Política de privacidad y Aviso legal