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, mostraremos dos alumnos por página:
<?php if (isset($_REQUEST['pos'])) $inicio=$_REQUEST['pos']; else $inicio=0; ?> <html> <head> <title>Problema</title> </head> <body> <?php $conexion=mysqli_connect("localhost","root","","base1") or die("Problemas con la conexión"); $registros=mysqli_query($conexion,"select alu.codigo as codigo, nombre, mail, codigocurso, nombrecurso from alumnos as alu inner join cursos as cur on cur.codigo=alu.codigocurso limit $inicio,2") or die("Problemas en el select:".mysqli_error($conexion)); $impresos=0; while ($reg=mysqli_fetch_array($registros)) { $impresos++; echo "Codigo:".$reg['codigo']."<br>"; echo "Nombre:".$reg['nombre']."<br>"; echo "Mail:".$reg['mail']."<br>"; echo "Curso:".$reg['nombrecurso']."<br>"; echo "<hr>"; } 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"; mysqli_close($conexion); ?> </body> </html>
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 $_REQUEST. 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 propia 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):
$registros=mysqli_query($conexion,"select alu.codigo as codigo, nombre, mail, codigocurso, nombrecurso from alumnos as alu inner join cursos as cur on cur.codigo=alu.codigocurso limit $inicio,2") or die("Problemas en el select:".mysqli_error($conexion));
Seguidamente mostramos todos los registros retornados y además los contamos:
$impresos=0; while ($reg=mysqli_fetch_array($registros)) { $impresos++; echo "Codigo:".$reg['codigo']."<br>"; echo "Nombre:".$reg['nombre']."<br>"; echo "Mail:".$reg['mail']."<br>"; echo "Curso:".$reg['nombrecurso']."<br>"; echo "<hr>"; }
Ahora vemos dónde dispondremos los hipervínculos, hacia adelante o atrás:
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 hipervínculo con la misma página pero inicializando el parámetro pos con el valor de $inicio más 2:
if ($impresos==2) { $proximo=$inicio+2; echo "<a href=\"pagina1.php?pos=$proximo\">Siguientes</a>"; } else echo "siguientes";
Copiar el contenido de este cuadro de texto al NotePad++ y grabarlo en la carpeta c:\wamp\www con un nombre con extensión php (si hay varios cuadros
de texto grabar cada uno en un archivo distinto).
luego abrir el navegador (Chrome, FireFox, IExplorer etc.) y en la barra de direcciones tipear: http://localhost/pagina1.php (o el nombre del
archivo que le dió)
Confeccionar un programa que muestre los registros de la tabla "cursos" con páginas de 3 registros.