各ページに 5 つの項目が表示されると仮定します。ページングの制限を制御するための最終的な式は次のとおりです:
offset的值为 (n-1)*5
num 为规定的5 コードを通じてビジネスを実装します: 1. ページングに必要なパラメータを計算します 総数 通过查询user表的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.php.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 ステートメントの offset と num によって各ページの表示数を制御することであると前に述べました。 また、上記の特定の式を次のようにコードに変換しました: $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
$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>';
//我们最后将整体业务串联起来实现最终效果,代码如下:
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);
?> |