分页时出错

时间:2012-08-28 21:11:06

标签: php mysql

我在使用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>";

该代码有效,但后续页面不起作用。我尝试在网址上传递数据:

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

但它无效

3 个答案:

答案 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

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