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

POSTされたデータをセッション変数に設定して、将来のページ読み込みで使用できるようにする必要があります。

于 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

これにより、クエリは必要なものだけを返し、コーディングがはるかに簡単になります。次に、次の10個のセットで各ページネーションリンクをループします。

于 2012-08-28T21:49:11.377 に答える