Faire une pagination

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 réflexion 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 :

QQ截图20161010101506.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', 123456789);
//库名
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 :

<?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);

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';

Complétez les préparatifs ci-dessus puis terminez la pagination. L'effet de pagination est le suivant :

QQ截图20161010101814.png

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

QQ截图20161010101852.png

QQ截图20161010101858.png

Lorsque nous contrôlons le numéro de page, nous implémentons le contrôle du numéro de page en transmettant la valeur du numéro de page via 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截图20161010101933.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.

limit offset , num

QQ截图20161010101943.png

Supposons que 5 éléments soient affichés sur chaque page. La formule finale de limite de contrôle pour la pagination est la suivante :

La valeur du décalage est (n-1)*5
num est le 5 spécifié

Nous implémentons l'entreprise via le code :

1. Calculez les paramètres requis pour la pagination

Nombre total

Obtenez le nombre total $count en interrogeant le nombre (id) de la table utilisateur.

$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.phpxy.com/page.php, suivie de la page ?page inexistante =1 numéro d'identification de page de.

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.

//Nombre d'affichages par page

$num = 5;
$total = ceil($count / $num);

Contrôle anormal de la page précédente et de la page suivante

Si l'utilisateur clique sur la page précédente sur la première page, sur la dernière page Que dois-je faire si je clique sur la page suivante ?

Dans ce cas, les données dépasseront la plage, ce qui entraînera l'affichage d'aucune donnée lors de la pagination.

Il faut évidemment tenir compte de cette situation inhabituelle. Par conséquent, si la première page est soustraite de un lors de la pagination, nous en faisons la première page.
Lors de l'ajout d'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 déjà dit que le cœur de la pagination est de contrôler le nombre d'affichages sur chaque page via le décalage et le nombre dans 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 :

<?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);
?>

Principe de pagination.

1. Commencez par comprendre l'utilisation de la limite dans les instructions SQL

SELECT * FROM table... limite la position de départ, le nombre d'opérations (où le début La position commence à 0)

Exemple :

Récupère les 20 premiers enregistrements : SELECT * FROM table... limite 0, 20
Récupère les 20 enregistrements à partir du 11ème : SELECT * FROM table …… limit 10 , 20

LIMIT n est équivalent à LIMIT 0,n.

Par exemple, sélectionnez * dans la table LIMIT 5 ; //Renvoyer les 5 premières lignes, de la même manière que sélectionnez * dans la table LIMIT 0, 5

2. principe

L'affichage dit de pagination signifie que le résultat défini dans la base de données est affiché segment par segment

Comment le segmenter, dans quel segment il se trouve actuellement ( combien d'éléments par page, combien d'éléments s'y trouvent actuellement) Page)

Les 10 premiers enregistrements : sélectionnez * dans la limite de la table 0,10
Du 11e au 20e enregistrements : sélectionnez * dans la limite de la table 10 ,10
Du 21e au 30e enregistrement :sélectionnez * dans la limite du tableau 20,10

Formule de pagination :

(numéro de page actuel - 1) >

3. La fonction $_SERVER["REQUEST_URI"]

est un type de variables de serveur prédéfinies. Toutes celles commençant par $_SERVER sont appelées variables de serveur prédéterminées.

La fonction de REQUEST_URI est d'obtenir l'URI actuel, qui est le chemin d'adresse complet à l'exception du nom de domaine.

Exemple :

La page actuelle est : http://www.test.com/home.php?id=23&cid=22

echo $_SERVER["REQUEST_URI"]

Le résultat est : / home.php?id=23&cid=22

4. parse_url() la fonction d'analyse d'URL

parse_url() consiste à analyser le URL dans une fonction pour un tableau de valeurs de clé fixes

Exemple

Select * from table limit ($Page- 1) * $PageSize, $PageSize

Résultat :

Array
(
[schéma] => ; http ;Protocole
                                                                                                                        [chemin] => /chemin >

5. Exemple de code




Cette pagination de message est divisée en 3 parties, l'une est la conception de la base de données, l'autre est la page de connexion, et l'autre est la page d'affichage.


(1) Base de données de conception

La base de données de conception s'appelle bbs. Il existe une table de données appelée message, qui contient des champs tels que le titre, la dernière date, l'utilisateur et. Contenu du message, respectivement. Titre du message, date du message, personne du message, contenu du message (2) Page de connexion

$ua=parse_url("http://username:password@hostname/path?arg=value#anchor");
 print_r($ua);

(3) Page d'affichage

<?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(" ", "&nbsp;", $content)); //两个str_replace嵌套
 return $content; }
//$content=str_replace("'","‘",$content);  //htmlspecialchars(); 
?>
rrree

Formation continue
||
<?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); ?>
soumettreRéinitialiser le code
  • Recommandations de cours
  • Téléchargement du didacticiel