I receive for example 26 results after a query using php. I want to paginate those results, showing 5 per-page.
The problem is that in order to send the query I have to do an http post using the information of a form I fill.
The first 5 results show, but then the next page will give me errors about some variables not being defined — the variables that came from the original request.
Here is the form code:
<form name="formulario" action="resultados.php" method="POST">
<input name="titulo" type="text" id="cajatitulo" class="cuadrobusqueda" placeholder="Título de la publicación (Ej: La fotosíntesis y sus procesos)">
<input name="anio" type="text" id="cajaanio" class="cuadrobusqueda" placeholder="Año">
<br><br>
<input name="autor" type="text" id="cajaautor" class="cuadrobusqueda" placeholder="Apellido del autor (Ej: Rojas, J; Rojas; J)">
<input name="issn" type="text" id="cajaissn" class="cuadrobusqueda" placeholder="ISSN">
<br><br>
<input type="radio" name="tipo_busqueda" value="1" checked>
<span onmouseover="title='Busca todos los parámetros seleccionados en un artículo.'">BÚSQUEDA EXACTA</span>
<input type="radio" name="tipo_busqueda" value="2">
<span onmouseover="title='Busca cualquiera de los parámetros seleccionados en un artículo.'">BÚSQUEDA FLEXIBLE</span>
</br></br>
<input type="submit" name="boton" id="botonenviar" value="Procesar">
</form>
That data is sent to the results.php, where the post is extracted and paginated with this code:
extract($_POST);
include("conectar.php");
$conexion= conectarse();
$consulta="";
$tipo="";
if($tipo_busqueda=="1")
$tipo="AND";
else
$tipo="OR";
if($titulo && $consulta == "" )
$consulta=" web.titulo_paper_web LIKE '%$titulo%'";
$consulta = '
SELECT
*
FROM
acw_papers_web web
WHERE
'.$consulta.'
ORDER BY
web.probabilidad DESC';
$resultado= mysql_query($consulta, $conexion);
if (!isset($paginanum))
$paginanum = 1;
$mostrar_resultados = 5;
$filas = mysql_num_rows($resultado);
$ultima = ceil($filas/$mostrar_resultados);
if ($paginanum < 1)
$paginanum = 1;
elseif ($paginanum > $ultima)
$paginanum = $ultima;
$max = 'LIMIT '.(paginanum - 1) * $mostrar_resultados .',' .$mostrar_resultados;
$consulta = $consulta . " $max";
$resultado= mysql_query($consulta, $conexion);
Below that code I generate the data that links me to the next page:
if ($paginanum != 1) {
echo "<a class='navegar' href='{$_SERVER['PHP_SELF']}?paginanum=1'> <b><<</b> Primera</a> ";
echo " ";
$anterior = $paginanum-1;
echo " <a class='navegar' href='{$_SERVER['PHP_SELF']}?paginanum=$anterior'> <b><</b> Anterior</a> ";
}
if ($paginanum != $ultima) {
$siguiente = $paginanum+1;
echo " <a class='navegar' href='{$_SERVER['PHP_SELF']}?paginanum=$siguiente'>Siguiente <b>></b> </a> ";
echo " <span> </span>";
echo " <a class='navegar' href='{$_SERVER['PHP_SELF']}?paginanum=$ultima'>Última <b>>></b> </a> ";
}
echo "</br>";
That code works, but subsequent pages do not work. I tried passing that data on the url:
&titulo=$titulo&issn=$issn&autor=$autor&anio=
but it did not work
Submit your form via
getthen create a querystring based on$_GET:Then append the querystring to your link URL.
It’s not very secure, but it works.
Update:
Sam Dufel just reminded me of PHP’s
http_build_query()function, which is better: