0

こんにちは、私は正常に動作するPHP ベースのページネーションとソート方法を持っています。

任意のカテゴリに従って並べ替えとページ付けを行うことができますが、ページごとの行に関しては問題があります。

私はGETメソッドを使用して、ページネーションとソートのための情報を取得しました

    if (isset($_GET['rpp'])&& is_numeric($_GET['rpp'])) {
    $rowsperpage = mysql_real_escape_string($_GET['rpp']);
}else{
    $rowsperpage='5';
}
if (isset($_GET['page']) && is_numeric($_GET['page'])) {
   $currentpage = (int) mysql_real_escape_string($_GET['page']);
} else {
   $currentpage = 1;
}
if (isset($_GET['order']) && in_array($_GET['order'], $order)) {
    $orderby = mysql_real_escape_string($_GET['order']);
}else{
    $orderby='id';
}
$sortby = '';
if (isset($_GET['sort'])) {
    $sortby = mysql_real_escape_string($_GET['sort']);
}else{
    $sortby='desc';
}

ページネーションのために、次のタイプのURL文字列を使用しました

echo " <li><a href='$pagename?order=$orderby&sort=$sortby&rpp=$rowsperpage&page=$nextpage'>Next&raquo;&raquo;</a>

私のmysqlクエリは

$sql2 = "SELECT * FROM internet_security ORDER BY $orderby $sortby LIMIT $rowsperpage OFFSET $offset";

そしてhtmlでは、リンクを使用して次のようなカテゴリを並べ替えました

        <a href="?order=id&sort=desc">id-desc:</a>
        <a href="?order=id&sort=asc">id-asc:</a>

        <a href="?order=title&sort=desc">title-desc:</a>
        <a href="?order=title&sort=asc">title-asc:</a>

        **limit rows by**
        <a href="?&rpp=5">5</a>
        <a href="?&rpp=10">10</a>
        <a href="?&rpp=20">20</a>

私の質問は 、制限行を介してページごとの行を制限する場合を除いて、すべてが正常に機能していることです-行は選択された制限(5,10,20)に制限されますが、ページネーションをクリックすると、すべてがデフォルトの設定値になります。 ID 順、DESC 順、LIMIT は 5 です。

もし私がそれを好きなら

            <a href="?order=id&sort=desc&rpp=5">id-desc:</a>
            <a href="?order=id&sort=desc&rpp=10">id-desc:</a>            
            <a href="?order=id&sort=desc&rpp=20">id-desc:</a>

それは機能しますが、完全な機能を得るには少なくとも12個のリンクが必要です。これは標準的なアプローチではありません。

私が望むのは、デフォルトまたはソートオプションによって制限が設定されると、IDタイトルなどでソートできるようになり、ページナチンはそれと一緒に機能するはずです。

私はそれを明確にしたことを願っています。私が間違っていることを見て、私のアプローチに対する可能な解決策を提案してください。

4

1 に答える 1

0

(回答へのアップグレード)

変数に格納$rppし、$_SESSION変数に存在する場合にのみ更新します$_GET:

    if ( isset($_GET[    'rpp'])) $_SESSION['rpp'] = intval($_GET['rpp']);
elseif (!isset($_SESSION['rpp'])) $_SESSION['rpp'] = 5;

次に$_SESSION['rpp']、クエリで使用します。

$sql2 = "
  SELECT   *
  FROM     internet_security
  ORDER BY $orderby $sortby
  LIMIT    $_SESSION[rpp] OFFSET $offset
";
于 2012-05-28T11:16:55.767 に答える