0

この投稿は終了しましたが、この問題を簡単なページネーションで解決する方法を共有したいと思います。

私がここに表示するものは、私が行ったのと同じ部分で行き詰まった場合、他の誰かがそれを利用するのがはるかに簡単になるように、完全に投稿します.

ここで使用しているのは、投稿を取得するためのデータベースからの ID です。タイトルなどを使用できます。また、最初の投稿を最初に表示するように並べ替えています。最後のものを表示したい場合は、一番下の ASC を DESC に変更してください。

<?PHP
//Connect to the database
//Add your file here

//Get a record count of our database for pagination
$record_count = $db->query("SELECT * FROM posts");
//Number of posts displayed
$per_page = 2;
//Number of pages
$pages = ceil($record_count->num_rows/$per_page);
//Get page number
if(isset($_GET['p']) && is_numeric($_GET['p'])) {
$page = $_GET['p'];
}else{
$page = 1;
}
if($page<=0)
$start = 0;
else
//Make the controls to switch pages
$start = $page * $per_page - $per_page;
$prev = $page - 1;
$next = $page + 1;
//Display the blog posts on the page
$query = $db->prepare("SELECT post_id, title, LEFT(message, 100) AS message, posted FROM posts ORDER BY post_id ASC LIMIT $start, $per_page");
$query->execute();
$query->bind_result($post_id, $title, $message, $posted);
?>

次に、好きな html コード、div、p など、最後にそれらをエコーアウトしました。ここにはいくつかのコードがありませんが、それは自分のブログ投稿とその変数を表示するための自分のコードです。下部にある次のリンクと前のリンクを取得するには、次を使用します。

 <?PHP
            if($prev > 0) {
                echo "<a href='index.php?p=$prev'>Prev</a>";
            }
            if($page < $pages) {
                echo "<a href='index.php?p=$next'>Next</a>";
            }
        ?>
4

1 に答える 1

2

idフィールドがプライマリ数値キーであると仮定すると、次/前のアイテムを実行id++または取得する代わりに、現在の ID を参照として使用します。これにより、実際には存在しない にid--アクセスできなくなります。id

現在のアイテムの SQL -

SELECT * FROM blogposts WHERE id = '$id'

の項目の SQL -

SELECT * FROM blogposts WHERE id > '$id' ORDER BY id ASC LIMIT 1

の項目の SQL -

SELECT * FROM blogposts WHERE id < '$id' ORDER BY id ASC LIMIT 1

最後の/最初のアイテムにいて、前/次のアイテムをリクエストした場合、これらのクエリは空の結果を返しidます。1id

キーワードを使用して、LIMIT確実に 1 つのアイテムのみを取得していることに注意してください。値が大きいか小さいアイテムid。クエリは既にフィールドでソートされてidいるため、テーブルから連続したアイテムを取得します。

于 2013-01-06T17:06:40.983 に答える