Fonctionnement de la base de données PHP?: paginer les utilisateurs
Dans un projet réel, nous écrivons l'h?te, le nom d'utilisateur, le mot de passe et la bibliothèque dans le fichier de configuration.
Si c'est écrit en dur dans le code, si les informations pertinentes du serveur de base de données changent, cela n'est évidemment pas conforme à la pensée du programmeur de modifier tout le code.
De plus, dans chaque page qui doit se connecter à la base de données. Nous devons tous écrire des connexions, juger les erreurs et définir des jeux de caractères, ce qui est trop gênant. Et ce n’est pas propice à la réutilisation de ces codes.
Nous pouvons utiliser la série de fonctions include mentionnées précédemment pour atteindre notre objectif. L'image d'exemple est la suivante?:
Par conséquent, nous pouvons créer un fichier de configuration config.php. Définissez toutes les configurations qui doivent être utilisées comme constantes. Le code est le suivant?:
<?php //數(shù)據(jù)庫服務(wù)器 define('DB_HOST', 'localhost'); //數(shù)據(jù)庫用戶名 define('DB_USER', 'root'); //數(shù)據(jù)庫密碼 define('DB_PWD', 'secret'); //庫名 define('DB_NAME', 'book'); //字符集 define('DB_CHARSET', 'utf8'); ?>
Nous extrayons la page connection.php Lorsque nous aurons besoin de nous connecter à la base de données à l'avenir, il nous suffit de l'inclure. le fichier connexion.php. Le code est le suivant?:
<?phpinclude '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); ?>
Nous pouvons implémenter la connexion à la base de données en incluant directement le fichier connection.php dans chaque fichier à l'avenir?:
include 'connection.php';
Terminez les préparatifs ci-dessus, puis terminez la pagination. L'effet de pagination est le suivant :
La page doit contenir les éléments de base suivants :
元素 | 說明 | 備注 |
---|---|---|
首頁 | 最開始進(jìn)入到頁面的第一頁 | 用get傳參才進(jìn)去時(shí)默認(rèn)為1 |
上一頁 | 當(dāng)前頁減1 | 如果頁碼為第一頁時(shí)減1,為應(yīng)該為第一頁 |
下一頁 | 當(dāng)前頁加1 | 如果為最后一 |
尾頁 | 最后一頁 | 總條數(shù)除以每頁顯示數(shù)得到總頁數(shù) |
當(dāng)前頁 | 當(dāng)前所在的頁碼 | 就是當(dāng)前的頁碼 |
總頁數(shù) | 一共有多少個(gè)頁面 | 總條數(shù)除以每頁顯示數(shù) |
Lorsque nous contr?lons les numéros de page, nous implémentons le contr?le du numéro de page en transmettant la valeur du numéro de page dans la barre d'adresse URL. En ajoutant les informations relatives au numéro de page à page.php, nous pouvons calculer des informations plus efficaces. L'effet de la pagination contr?lant l'url est le suivant?:
Dans l'implémentation du code, ces deux valeurs??sont en fait réalisées à travers le décalage (offset) et la quantité ( num) après la limite de pagination.
limite offset, num
頁碼 | url中g(shù)et值 | limit偏移量,數(shù)量 |
---|---|---|
第1頁 | 1 | 0,5 |
第2頁 | 2 | 5,5 |
第3頁 | 3 | 10,5 |
第n頁 | n | (n-1)*5,5 |
Supposons que 5 éléments soient affichés par page. La formule finale pour contr?ler la limite de pagination est la suivante?:
offset的值為 (n-1)*5 num 為規(guī)定的5
Nous implémentons l'entreprise via le code?:
1 Calculez les paramètres requis pour la pagination .
Nombre total
通過查詢user表的count(id),得到總數(shù)$count。 $count_sql = 'select count(id) as c from user'; $result = mysqli_query($conn, $count_sql); $data = mysqli_fetch_assoc($result); //得到總的用戶數(shù) $count = $data['c'];
Page actuelle
Lorsque vous entrez pour la première fois dans la page page.php, l'url est http://www.php.com/page .php, suivi de non Il y a ?page=1 numéro d'identification de la page.
Nous devons donc créer manuellement un numéro d'identification de page et le transmettre à la variable de numéro de page actuelle $page.
Nous avons peur qu'il y ait des décimales dans la page passée par l'utilisateur, nous faisons donc une conversion de type forcée : (int) $_GET['page'].
La première fa?on d'écrire :
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
La deuxième fa?on d'écrire
if (isset($_GET['page'])) { $page = (int) $_GET['page']; } else { $page = 1; }
Dernière page
Chaque page doit être un entier. Tout comme les mathématiques à l'école primaire. En moyenne, 5,6 personnes devraient préparer combien de pommes. La réponse doit être 6.
Si la page sort avec 20,3 pages, il faut utiliser la fonction d'arrondi plafond. Que le nombre de pagination devienne 21.
Nous divisons le nombre total par le nombre d'éléments de données affichés sur chaque page pour obtenir le nombre total de pages.
//每頁顯示數(shù) $num = 5; $total = ceil($count / $num);
Contr?le des exceptions de la page précédente et de la page suivante
Et si l'utilisateur clique sur la page précédente sur la première page et clique sur la page suivante sur la dernière page??
Dans ce cas, les données dépasseront la plage, ce qui entra?nera l'affichage d'aucune donnée lors de la pagination.
Cette situation inhabituelle doit évidemment être prise en considération. Par conséquent, si la première page est soustraite de un lors de la pagination, nous en faisons la première page.
Lorsque nous en ajoutons un à la dernière page, nous en faisons la dernière page, ce qui complète le contr?le des exceptions.
if ($page <= 1) { $page = 1; } if ($page >= $total) { $page = $total; }
2. Instruction SQL
Nous avons dit précédemment que le c?ur de la pagination est de contr?ler l'affichage de chaque page via le décalage et le nombre. dans le numéro de l'instruction SQL.
Nous avons également répertorié la formule spécifique ci-dessus. Nous avons converti l'entreprise en code comme suit?:
$num = 5; $offset = ($page - 1) * $num;
Nous avons appliqué $num et $offset à l'instruction SQL?:
$sql = "select id,username,createtime,createip from user order by id desc limit $offset , $num";
Control. la valeur de pagination dans l'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> 當(dāng)前是第 ' . $page . '頁 共' . $total . '頁 </td> </tr>';
Nous connectons enfin l'ensemble de l'entreprise pour obtenir l'effet final. Le code est le suivant?:
include 'connection.php'; $count_sql = 'select count(id) as c from user'; $result = mysqli_query($conn, $count_sql); $data = mysqli_fetch_assoc($result); //得到總的用戶數(shù) $count = $data['c']; $page = isset($_GET['page']) ? (int) $_GET['page'] : 1; /* if (isset($_GET['page'])) { $page = (int) $_GET['page']; } else { $page = 1; } */ //每頁顯示數(shù) $num = 5; //得到總頁數(shù) $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)) { //存在數(shù)據(jù)則循環(huán)將數(shù)據(jù)顯示出來 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> 當(dāng)前是第 ' . $page . '頁 共' . $total . '頁 </td></tr>'; echo '</table>'; } else { echo '沒有數(shù)據(jù)'; } mysqli_close($conn);