0

在使用 php 进行查询后,我收到例如 26 个结果。我想对这些结果进行分页,每页显示 5 个。

问题是,为了发送查询,我必须使用我填写的表格信息来做一个 http 帖子。

前 5 个结果显示,但接下来的页面会给我一些关于未定义变量的错误 - 来自原始请求的变量。

这是表单代码:

<form name="formulario" action="resultados.php" method="POST"> 
            <input name="titulo" type="text" id="cajatitulo" class="cuadrobusqueda" placeholder="T&iacute;tulo de la publicaci&oacute;n (Ej: La fotos&iacute;ntesis y sus procesos)"> 
            <input name="anio" type="text" id="cajaanio" class="cuadrobusqueda" placeholder="A&ntilde;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&Uacute;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&Uacute;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'>&Uacute;ltima <b>>></b> </a> ";
}
echo "</br>";

该代码有效,但后续页面无效。我尝试在 url 上传递该数据:

&titulo=$titulo&issn=$issn&autor=$autor&anio=

但它没有用

4

3 回答 3

0

您应该将已发布的数据设置为会话变量,以便在将来的页面加载时使用它们。

于 2012-08-28T21:13:13.900 回答
0

提交您的表单,get然后创建一个基于以下内容的查询字符串$_GET

$querystring = "";
foreach ($_GET as $key => $val) {
    if ($key != 'paginanum') {
        $querystring .= ($querystring == "" ? "" : "&") . "$key=$val";
    }
}

然后将查询字符串附加到您的链接 URL。

它不是很安全,但它可以工作。

更新:

Sam Dufel 刚刚让我想起了 PHP 的http_build_query()函数,比较好:

$vals = $_GET;
unset($vals['paginanum']);
$querystring = http_build_query($vals);
于 2012-08-28T21:15:07.863 回答
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

这使您的查询只返回您想要的内容,并且代码更简洁。然后你用下一组十个循环遍历每个分页链接。

于 2012-08-28T21:49:11.377 回答