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 :

2015-10-13_561c9c5350f16.png

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
//数据库服务器
define('DB_HOST', 'localhost');
//数据库用户名
define('DB_USER', 'root');
//数据库密码
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 :

2015-10-13_561c9c536b206.png

La page doit contenir les éléments de base suivants :


元素说明备注
首页最开始进入到页面的第一页用get传参才进去时默认为1
上一页当前页减1如果页码为第一页时减1,为应该为第一页
下一页当前页加1如果为最后一
尾页最后一页总条数除以每页显示数得到总页数
当前页当前所在的页码就是当前的页码
总页数一共有多少个页面总条数除以每页显示数

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 :

QQ截图20161114161938.png

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中get值limit偏移量,数量
第1页10,5
第2页25,5
第3页310,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 为规定的5

Nous implémentons l'entreprise via le code :

1 Calculez les paramètres requis pour la pagination .

Nombre total

通过查询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 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.

//每页显示数
$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>
    当前是第 ' . $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);

//得到总的用户数
$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);


.
Formation continue
||
<?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); ?>
soumettreRéinitialiser le code
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!