我在使用php查询后收到了26个结果。我想对这些结果进行分页,每页显示5个。
问题在于,为了发送查询,我必须使用我填写的表单信息进行http发布。
前5个结果显示,但接下来的页面会给我一些未定义变量的错误 - 来自原始请求的变量。
以下是表单代码:
<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>
该数据将发送到results.php
,其中提取帖子并使用此代码进行分页:
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);
在该代码下面,我生成了将我链接到下一页的数据:
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>";
该代码有效,但后续页面不起作用。我尝试在网址上传递数据:
&titulo=$titulo&issn=$issn&autor=$autor&anio=
但它无效
答案 0 :(得分:0)
您应该将POSTed数据设置为会话变量,以便在将来的页面加载时使用它们。
答案 1 :(得分:0)
通过get
提交表单,然后根据$_GET
创建一个查询字符串:
$querystring = "";
foreach ($_GET as $key => $val) {
if ($key != 'paginanum') {
$querystring .= ($querystring == "" ? "" : "&") . "$key=$val";
}
}
然后将查询字符串附加到您的链接网址。
它不是很安全,但它有效。
<强>更新强>
Sam Dufel刚刚提醒我PHP的http_build_query()
功能,这更好:
$vals = $_GET;
unset($vals['paginanum']);
$querystring = http_build_query($vals);
答案 2 :(得分:0)
另一种方法是将查询传递给LIMIT参数。这是一个偏移和记录计数。像这样:
SELECT * FROM table WHERE 1=1 LIMIT 0,10 --for the first 10 records
SELECT * FROM table WHERE 1=1 LIMIT 10,10 --for the next 10 records
这使您的查询只返回您想要的内容,并且编码更清晰。然后使用下一组十个循环遍历每个分页链接。