ページネーションを作成する
実際のプロジェクトでは、ホスト、ユーザー名、パスワード、ライブラリを構成ファイルに記述します。
コードにハード的に記述されている場合、データベースサーバーの関連情報が変更された場合、すべてのコードを変更するというプログラマーの考え方と明らかに一致しません。
さらに、データベースに接続する必要があるすべてのページで。接続を書いたり、エラーを判定したり、文字セットを設定したりする必要があり、とても面倒です。また、これらのコードを再利用することは有益ではありません。
目標を達成するには、前述した一連の関数を使用できます。サンプル画像は次のとおりです:

したがって、設定ファイル config.php を作成できます。定数として使用する必要があるすべての設定を設定します。コードは次のとおりです。
<?php
//数据库服务器
define('DB_HOST', 'localhost');
//数据库用户名
define('DB_USER', 'root');
//数据库密码
define('DB_PWD', 123456789);
//库名
define('DB_NAME', 'book');
//字符集
define('DB_CHARSET', 'utf8');
?>将来データベースに接続する必要がある場合は、connection.php を含める必要があるだけです。ファイル。コードは次のとおりです:
<?php
include 'config.php';
$conn = mysqli_connect(DB_HOST, DB_USER, DB_PWD, DB_NAME);
if (mysqli_errno($conn)) {
mysqli_error($conn);
exit;
}
mysqli_set_charset($conn, DB_CHARSET);将来的には、connection.php ファイルを各ファイルに直接インクルードすることでデータベース接続を実装できます:
include 'connection.php';
上記の準備を完了し、ページングを完了します。ページネーションの効果は次のとおりです:

ページには次の基本要素が含まれている必要があります:


ページ番号を制御するときは、常に URL アドレス バーを介してページ番号の値を渡します。ページ番号コントロール。ページ番号に関する情報をpage.phpに追記することで、より有効な情報を算出することができます。ページングを制御する URL の効果は次のとおりです。

コード実装では、ページングはオフセット (offset) と制限後の数値 (num) によって実際に実現されます。
limit offset 、num

は、1 ページあたり 5 つの項目が表示されると仮定します。ページングの制限を制御するための最終的な式は次のとおりです:
offset の値は (n-1)*5 です
num は指定された 5 です
コードを通じてビジネスを実装します:
1 必要なパラメーターを計算します。ページング用
総数
ユーザーテーブルのcount(id)をクエリすることで総数$countを取得します。
$count_sql = 'select count(id) as c from user'; $result = mysqli_query($conn, $count_sql); $data = mysqli_fetch_assoc($result); //得到总的用户数 $count = $data['c'];
現在のページ
最初に page.php ページに入ると、URL は http://www.phpxy.com/page.php となり、その後に ?page=1 ページ識別番号はありません。
そのため、ページ識別番号を手動で作成し、それを現在のページ番号変数 $page に渡す必要があります。
ユーザーから渡されたページに小数が含まれている可能性があるため、強制的な型変換を実行します: (int) $_GET['page']。
最初の書き方:
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
2 番目の書き方
if (isset($_GET['page'])) {
$page = (int) $_GET['page'];
} else {
$page = 1;
}最後のページ
各ページは整数でなければなりません。小学校の算数と同じです。平均して、5.6 人が何個のリンゴを準備する必要があります。答えは 6 でなければなりません。
ページに 20.3 ページが表示される場合は、丸め関数 ceil を使用する必要があります。ページネーション数を21とします。
合計数を各ページに表示されるデータ項目の数で割って、合計ページ数を取得します。
//ページごとの表示数
$num = 5; $total = ceil($count / $num);
前ページと次ページの例外制御
ユーザーが最初のページで前のページをクリックし、最後のページで次のページをクリックした場合はどうなりますか?
この場合、データが範囲を超えるため、ページネーション時にデータが表示されなくなります。
この異常な状況を考慮する必要があるのは明らかです。したがって、ページング中に最初のページが 1 減算される場合は、それを最初のページとします。
最終ページに追加した場合は最終ページ、つまり例外制御が完了します。
if ($page <= 1) {
$page = 1;
}
if ($page >= $total) {
$page = $total;
}2. SQL ステートメント
ページングの核心は、SQL ステートメントのオフセットと数値によって各ページの表示数を制御することであると前に述べました。
また、上記の特定の式を次のようにコードに変換しました:
$num = 5; $offset = ($page - 1) * $num;
$num と $offset を SQL ステートメントに適用しました:
$sql = "select id,username,createtime,createip from user order by id desc limit $offset , $num";
URI のページング値を制御します
echo '<tr> <td colspan="5"> <a href="page.php?page=1">首页</a> <a href="page.php?page=' . ($page - 1) . '">上一页</a> <a href="page.php?page=' . ($page + 1) . '">下一页</a> <a href="page.php?page=' . $total . '">尾页</a> 当前是第 ' . $page . '页 共' . $total . '页 </td> </tr>';
最後に、最終的な効果を達成するために、ビジネス全体が直列に接続されます。 コードは次のとおりです:
<?php
include 'connection.php';
$count_sql = 'select count(id) as c from user';
$result = mysqli_query($conn, $count_sql);
$data = mysqli_fetch_assoc($result);
//得到总的用户数
$count = $data['c'];
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
/*
if (isset($_GET['page'])) {
$page = (int) $_GET['page'];
} else {
$page = 1;
}
*/
//每页显示数
$num = 5;
//得到总页数
$total = ceil($count / $num);
if ($page <= 1) {
$page = 1;
}
if ($page >= $total) {
$page = $total;
}
$offset = ($page - 1) * $num;
$sql = "select id,username,createtime,createip from user order by id desc limit $offset , $num";
$result = mysqli_query($conn, $sql);
if ($result && mysqli_num_rows($result)) {
//存在数据则循环将数据显示出来
echo '<table width="800" border="1">';
while ($row = mysqli_fetch_assoc($result)) {
echo '<tr>';
echo '<td>' . $row['username'] . '</td>';
echo '<td>' . date('Y-m-d H:i:s', $row['createtime']) . '</td>';
echo '<td>' . long2ip($row['createip']) . '</td>';
echo '<td><a href="edit.php?id=' . $row['id'] . '">编辑用户</a></td>';
echo '<td><a href="delete.php?id=' . $row['id'] . '">删除用户</a></td>';
echo '</tr>';
}
echo '<tr><td colspan="5"><a href="page.php?page=1">首页</a> <a href="page.php?page=' . ($page - 1) . '">上一页</a> <a href="page.php?page=' . ($page + 1) . '">下一页</a> <a href="page.php?page=' . $total . '">尾页</a> 当前是第 ' . $page . '页 共' . $total . '页 </td></tr>';
echo '</table>';
} else {
echo '没有数据';
}
mysqli_close($conn);
?>ページングの原則
1. まず、SQL ステートメントでの制限の使用方法を理解します
SELECT * FROM table...limit 開始位置、操作数 (開始位置は0から始まります)
例:
最初の20レコードを取得: SELECT * FROM table...limit 0, 20
先頭から20レコードを取得11位:SELECT * FROM table ……limit 10, 20
LIMIT nはLIMIT 0,nと同等です。
select * from table LIMIT 5; // 最初の 5 行を返す、select * from table LIMIT 0, 5 と同じ
2. いわゆるページング表示とは、データベース内の結果セット、1 つずつ表示セグメント化方法、現在どの段落にあるか (ページあたりのレコード数、現在のページは何ページか)
最初の 10 レコード: select * from tablelimit 0,10
11 番目から 20 番目のレコード: テーブル制限 10,10 から * を選択レコード 21 から 30: テーブル制限 20,10 から * を選択
ページング式:
(現在のページ番号 - 1) X ページごとのアイテム数、アイテム1 ページあたりの番号
Select * from table limit ($Page- 1) * $PageSize, $PageSize
3. $_SERVER["REQUEST_URI"] 関数
は、事前定義されたサーバー変数の一種であり、$_SERVER で始まるものはすべて事前定義サーバー変数と呼ばれます。 REQUEST_URI は、ドメイン名を除いた完全なアドレス パスである現在の URI を取得するために使用されます。
例:
現在のページは次のとおりです: http://www.test.com/home.php?id=23&cid=22
echo $_SERVER["REQUEST_URI"]
結果は次のとおりです:/home.php?id=23&cid= 22
4. parse_url() で URL を解析する関数
parse_url() は、URL を固定キー値を持つ配列に解析する関数です
例
$ua=parse_url("http://username:password@hostname/path?arg=value#anchor");
print_r($ua);結果:
Array
(
[スキーム] => http ; [パス] => /パス ; パラメータを取得します。フラグメント] => )
5. コード例
メッセージのこのページは 3 つの部分に分かれており、1 つはデータベース設計、1 つは接続ページ、もう 1 つは表示ページです。
(1) デザインデータベース デザインデータベースは bbs と呼ばれるデータテーブルで、タイトル、最終日付、ユーザー、コンテンツなどのフィールドが含まれており、それぞれメッセージのタイトル、日付を表します。メッセージ、メッセージを残した人、メッセージの内容
(2) ページを接続
<?php
$conn = @ mysql_connect("localhost", "root", "123456") or die("数据库链接错误"); mysql_select_db("bbs", $conn); mysql_query("set names 'GBK'"); //使用GBK中文编码;
//将空格,换行转换为HTML可解析
function htmtocode($content) { $content = str_replace("\n", "<br>", str_replace(" ", " ", $content)); //两个str_replace嵌套
return $content; }
//$content=str_replace("'","‘",$content); //htmlspecialchars();
?> (3) ページを表示 <?php
include("conn.php");
$pagesize=2;
//设置每页显示2个记录 $url=$_SERVER["REQUEST_URI"];
$url=parse_url($url);
$url=$url[path];
$numq=mysql_query("SELECT * FROM `message`");
$num = mysql_num_rows($numq);
if($_GET[page]){ $pageval=$_GET[page];
$page=($pageval-1)*$pagesize;
$page.=',';
}
if($num > $pagesize)
{
if($pageval<=1)$pageval=1;
echo "共 $num 条". " <a href=$url?page=".($pageval-1).">上一页</a>
<a href=$url?page=".($pageval+1).">下一页</a>";
}
$SQL="SELECT * FROM `message` limit $page $pagesize ";
$query=mysql_query($SQL);
while($row=mysql_fetch_array($query)){
?><table width=500 border="0" cellpadding="5" cellspacing="1" bgcolor="#add3ef"> <tr bgcolor="#eff3ff"> <td>标题:<?php echo $row[title]?></td> <td>时间:<?php echo $row[lastdate]?></td> </tr> <tr bgcolor="#eff3ff"> <td> 用户:<?php echo $row[user]?></td><td></td> </tr> <tr> <td>内容:<?php echo htmtocode($row[content]);?></td> </tr> <br> </table>
- おすすめコース
- コースウェアのダウンロード
現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜 















