Búsqueda personalizada
 
 
 
 
Parámetros en un hipervínculo
   

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($_REQUEST['pos']))
  $inicio=$_REQUEST['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:

if (isset($_REQUEST['pos']))
  $inicio=$_REQUEST['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 $_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 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):

$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:

$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:

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";
 
 
       
       

¿Quienes somos?

Condiciones de uso

Publicidad

Privacidad de la informacion