この記事では、PHP でのページングの原理に焦点を当てています。同時に、PHP でページングを実装する方法を説明します。これは、必要な方は参考にしてください。初心者に非常に適しています。
ページングの重要な問題は、実際には、Mysql のキーワード制限に続く 2 つの数値にあります。最初の数値は、記録する必要がある開始行番号であり、2 番目の数値は、この開始行番号の後に取得されるレコードの行数です。 --スタートラインとゴールラインを間違えないでください。大きな違いがあります。
index.php の 19 行目を見てください:
コードは次のとおりです |
コードをコピー |
$recordSql = $sql.” LIMIT “.$page*$pagesize.”,”.$pagesize;
|
変数 $page の判定は、プログラムの 8 行目と 9 行目で取得されます。
コードは次のとおりです |
コードをコピー |
if(isset($_GET['page'])&&$_GET['page']!=”) $page=$_GET['page'];
それ以外の場合 $page=0;
|
もちろん、$_GET['page'] 変数も見たことがありますが、これについては以下で説明します。
7 行目で変数 $pagesize を定義します。つまり、各ページに表示されるレコードの数を 10 と定義します。変数 $page=0 の場合、ステートメントは最終的に次のようになります:
コードは次のとおりです |
コードをコピー |
$recordSql = "SELECT a . * 、b.name、b.email、b.qq、c.revert_time、c.revert
投稿から
LEFT JOIN revert c ON ( a.id = c.post_id ) 、ゲスト b
WHERE a.guest_id = b.id
a.id DESC で注文
" リミット 0,10";
|
0 レコードから開始して 10 レコードの結果を取得します。これには 0 番目のレコードが含まれます。
$page=1 の場合はどうなるでしょうか?ご想像のとおり、現時点では $page*$pagesize=10 ですが、もちろん今までそんなことはありませんでした...これ以上は言いません、言うと長くなるでしょう。
もう 1 つ説明する必要がありますが、行の合計数を取得した後にこの制限を追加するのは非常に簡単です。結果レコードの数を取得するときにこの制限を追加すると、行の合計数がそれを超えることはありません。 10. 、これを追加した後、返せるレコードの最大数は 10 であるためです、兄弟。 ——これは明らかに実態に即していません。したがって、次を実行しています:
コードは次のとおりです
| コードをコピー
|
mysql_num_rows(mysql_query($sql));
|
レコードの総数を取得し、limit キーワードを追加します。
さて、レコードの総数を取得し、各ページに表示されるレコードの数を 10 に設定しました。あとは総ページ数だけが必要です。この小学校の問題については話さないでください。もちろん、レコードの合計数を各ページに表示されている件数で割ったものが総ページ数になります。例えば、合計レコード数が 11 で表示される場合もあります。各ページは何ページに分割する必要がありますか?もちろん 2 ページです。どうすれば 11/10=2 になりますか? -明らかに間違っていますが、現実の生活は完璧な数学ではありません。 ceil 関数を使用します。これについては前の章で説明したので、ここでは詳しく説明しません。
今私たちが持っているものを見てください:
コードは次のとおりです |
コードをコピー |
レコードの総数、$numRecord = mysql_num_rows(mysql_query($sql));
総ページ数、$totalpage = ceil($numRecord/$pagesize); |
「前ページ、次ページ」の表示方法以外は何も不足していません。index.php の 159 ~ 163 行目を見てください。非常に簡単です。
160行目:
コードは次のとおりです
| コードをコピー
|
if($page>0) echo "前のページ|"
|
変数 $page>0 の場合、つまり現在のページ番号が 0 より大きい場合、前のページがあることを意味し、「前のページ」リンクが表示されます。このリンクの $page は次のようになります。たとえば、現在のページが 2 であれば、前のページをクリックすると、このリンクに基づいて page=1 が渡されます。リンクは get メソッドです。 これにより、プログラムの 8 行目と 9 行目に戻り、処理が行われます。
161 行目では、現在のページ番号がレコードの合計数 -1 より小さい場合、ページ番号は 0 から始まるため、判断を現実的にするにはレコードの合計数を 1 減算する必要があると判断します。この判断が真であれば、当然次のページがあるということになりますので、次のページでは $page が 1 つ増えます。
ページング全体についてはこれで終わりです。レコードの合計数を取得する方法、SQL ステートメントに制限キーワードを追加する方法、および前ページと次ページのどちらを表示するかを決定する方法を覚えておいてください。すべて問題ありません。
完全なコード
コードは次のとおりです
| コードをコピー
|
$pagesize = 10;//各ページに表示されるメッセージレコードの数
if(isset($_GET['page'])&&$_GET['page']!='') $page=$_GET['page'];
それ以外の場合 $page=0;
$sql = "SELECT a . * 、b.name、b.email、b.qq、c.revert_time、c.revert
投稿から
LEFT JOIN revert c ON ( a.id = c.post_id ) 、ゲスト b
WHERE a.guest_id = b.id
a.id DESCで注文";
$numRecord = mysql_num_rows(mysql_query($sql));
$totalpage = ceil($numRecord/$pagesize);
$recordSql = $sql. " LIMIT ".$page*$pagesize.",".$pagesize;
$result = mysql_query($recordSql);
<テーブル幅="800" border="0" align="center" bgcolor="#fefefe">
while($rs=mysql_fetch_object($result)){
?>
|
送信者: name?> |電子メール: email?>|QQ:< ? php echo $rs->qq?>|メッセージ時刻: post_time+8*3600)?> |
if(isset($_SESSION['login'])&&$_SESSION['login']){
?>
"delete.php?id=id?>">削除 |
}
?>
メッセージの内容: post))?>
返信内容:revert))?>[revert_time!="") echo date("Y-m-d H:i: s",$rs->revert_time+8*3600)?> ]
|
|
}
?>
表>
<テーブル幅="800" ボーダー="0" align="center" bgcolor="#B1C3D9">
if($page>0) echo "前のページ|"
if($page<$totalpage-1) echo "次のページ"
?> |
表>
http://www.bkjia.com/PHPjc/631302.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/631302.html技術記事この記事では、PHP でのページングの原理に焦点を当てています。同時に、実装を使用して PHP でページングを実装する方法を説明します。これは、私が作成した Square Board プログラムに基づいています。