1

私のウェブサイトには、ユーザーがコメントを投稿できるセクションがあります。これらのコメントのすぐ上に、4つのリンクがあります。最も古い、最も新しい、最高の評価、最低の評価です。現在、これらのリンクごとに4つの異なるページがあります。

oldest.php-コメントを日付と時刻の昇順で並べ替えます

newest.php-コメントを日付と時刻の降順で並べ替えます

top.php-コメントの数に応じてコメントを並べ替えます

Worst.php-嫌いなものの数に応じてコメントを並べ替えます

それらはすべて、次のようなmySQLステートメントでソートされています。

$sql = "SELECT * FROM comments ORDER BY date DESC, time DESC LIMIT $offset, $rowsperpage";

4つの異なるページではなく、1つのページだけを使用してこれらのコメントを並べ替える方法はありますか?

どんな助けでも大歓迎です。

4

2 に答える 2

3

はい、URLで並べ替え列と方向を渡します。

$type = 'new'; // default order
$cols = array('old', 'new', 'worst'); // array with possible options columns, to prevent SQL injection
if (in_array($_GET['type'], $cols) {
    $type = $_GET['type'];
}
$order = (strtolower($_GET['order']) == 'asc')?'ASC':'DESC'; // again - to prevent bad data
$sql = "SELECT * FROM comments ORDER BY {$type} {$order}, time DESC LIMIT $offset, $rowsperpage";

クエリが異なる場合は、switch()ステートメントを使用し、注文の種類ごとにクエリを変更します。

// use the same order as before
switch ($_GET['type']):
case 'old':
     $sql = " ... ";
break;

// more options
default:
    // default can be used for the most common option, for example when you first enter the page with no type argument in the URL
break;

もう1つ-URLを生成するには、これを使用できます。

$cols = array('old', 'new', 'worst'); // you can make this array a config variable
$order = array('asc', 'desc');
foreach ($cols as $col) {
    foreach ($order as $ord) {
        echo "<a href='index.php?type={$col}&order={$ord}'>".ucwords($col). ' ' . ucwords($ord)"</a>";
    }
}

これにより、すべてのタイプとすべての可能な注文が印刷されます。あなたはこれをいじくり回すべきです、あなたはいくつかのきちんとした、ダイナミックなことをすることができます。

于 2013-02-22T12:32:26.643 に答える
1

確かにあなたはそれを管理するために単一のページを持つことができます。

4ページの代わりに、1ページにすることができます

コメント.php

次に、4つのリンクに対して以下のようなGETパラメータを渡すことができます

comments.php?type=oldest
comments.php?type=newest
comments.php?type=top
comments.php?type=worst

次に、comments.php次のような条件文を配置できます。

$order_by = "ORDER BY date DESC, time DESC"; // Default order
if(isset($_GET["type"]) && $_GET["type"] == "newest")
    $order_by = "ORDER BY date DESC, time DESC";
elseif(isset($_GET["type"]) && $_GET["type"] == "oldest")
    $order_by = "ORDER BY date, time";
elseif(isset($_GET["type"]) && $_GET["type"] == "top")
    ... put your order by here ...
elseif(isset($_GET["type"]) && $_GET["type"] == "worst")
    ... put your order by here ...

次に、以下の$sqlを使用します

$ sql = "SELECT*FROMコメント"。$order_by。"LIMIT$ offset、$ rowsperpage";

于 2013-02-22T12:34:56.317 に答える