Maison >développement back-end >Problème PHP >Comment implémenter la fonction d'affichage de la pagination des requêtes en php

Comment implémenter la fonction d'affichage de la pagination des requêtes en php

PHPz
PHPzoriginal
2023-04-24 10:52:441252parcourir

Lors de l'exécution de requêtes de base de données, dans certains cas, nous devons afficher les résultats dans des pages selon certaines règles. Par exemple, lorsque nous voulons que chaque page du client n'affiche qu'une petite quantité de données, nous devons utiliser la fonction d'affichage de la pagination des requêtes tout en obtenant l'effet de page. Cet article se concentrera sur la fonction de pagination des requêtes du langage de développement PHP et présentera ses principes et étapes de mise en œuvre à travers des exemples.

Le principe de mise en œuvre de l'affichage de la pagination des requêtes

Le principe de mise en œuvre de l'affichage de la pagination des requêtes est très simple. Nous pouvons trier toutes les données interrogées selon certaines règles, puis afficher les résultats de la requête en pagination en limitant le nombre de données affichées sur. chaque page. Nous pouvons utiliser des algorithmes pour calculer quel enregistrement de la base de données doit être affiché en commençant et en terminant par.

Les principales étapes sont les suivantes :

1. Calculer le nombre total d'enregistrements : Habituellement, nous devons interroger tous les enregistrements de la base de données, c'est-à-dire le nombre total d'enregistrements.

2. Calculez le nombre total de pages : En comparant le nombre total d'enregistrements et le nombre d'enregistrements affichés sur chaque page, le nombre total de pages peut être calculé. Si le reste obtenu en divisant le nombre total de pages par le nombre d'enregistrements affichés sur chaque page n'est pas nul, alors le nombre total de pages doit être augmenté de un.

3. Interrogez les données de la page actuelle : calculez les positions de début et de fin des enregistrements à interroger sur la page actuelle, puis utilisez les instructions SQL pour interroger les données. Cependant, l'instruction SQL nécessite ici quelques modifications. Elle ne peut pas simplement interroger tous les enregistrements, mais doit ajouter des conditions de requête et limiter le nombre de résultats de requête.

4. Affichage de la pagination : grâce au composant de pagination des pages, l'affichage de la pagination peut être facilement effectué. Normalement, le composant de pagination affiche des informations telles que le nombre total d'enregistrements, le nombre actuel de pages et le nombre total de pages. Dans le même temps, vous pouvez également interroger et afficher des données sur différentes pages en cliquant sur différentes pages.

Implémentation du code

Afin de mettre en œuvre ces étapes, nous devons utiliser une fonction PHP pour traiter la pagination. Normalement, cette fonction doit recevoir certains paramètres nécessaires, tels que le nombre total d'enregistrements, le nombre d'enregistrements affichés sur chaque page, le numéro de page actuelle, etc. En prenant la base de données Mysql comme exemple, voici une fonction de pagination PHP courante :

function get_data($page_size,$sql,$conn){
  global $start;
  if(!$page_size) $page_size = 10;
  $page = $_GET['page']?$_GET['page']:1;
  $start=($page-1)*$page_size; //这里是高亮应用,可以注释掉
  $sql_limit = $sql." limit $start,$page_size"; //组合成一条完整的sql语句
  $result = mysql_query($sql_limit,$conn);
  while($row = mysql_fetch_array($result)){
      $data[] = $row;
  }
  return $data;
}

La fonction ci-dessus implémente principalement la fonction d'interrogation et de renvoi des données qui doivent être affichées en fonction du nombre d'affichages par page, du nombre total des enregistrements et le nombre actuel de pages. Ensuite, nous travaillerons avec vous pour implémenter une page de requête PHP incluant une fonctionnalité de pagination.

Tout d'abord, nous devons construire une source de données. Ici, nous utilisons une simple table d'étudiants (ses champs incluent l'identifiant, le nom, le sexe, l'âge) :

CREATE TABLE `students` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL,
  `gender` enum('male','female') NOT NULL,
  `age` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Ensuite, insérez les données dans la table des étudiants :

INSERT INTO `students` (`id`, `name`, `gender`, `age`) VALUES
(1, 'Tom', 'male', 19),
(2, 'Lucy', 'female', 20),
(3, 'Lily', 'female', 18),
(4, 'Kevin', 'male', 19),
(5, 'Steve', 'male', 21),
(6, 'Tony', 'male', 20),
(7, 'Henry', 'male', 20),
(8, 'Alex', 'male', 18),
(9, 'Sara', 'female', 21),
(10, 'Lily', 'female', 20),
(11, 'Michael', 'male', 19),
(12, 'Paul', 'male', 22),
(13, 'Elena', 'female', 18),
(14, 'Jack', 'male', 21),
(15, 'Bob', 'male', 19),
(16, 'Sophie', 'female', 20),
(17, 'Lisa', 'female', 21),
(18, 'Lucas', 'male', 19),
(19, 'Laura', 'female', 18),
(20, 'John', 'male', 20);

Nous devons implémenter les 3 fichiers suivants :

  1. index.php. Ce fichier est le véritable support du processus de pagination. Il doit appeler la fonction qui gère le processus de pagination et générer des données en fonction de la valeur de retour de la fonction.
  2. page.class.php, cette classe implémente principalement la fonction de pagination, y compris les paramètres qui doivent être transmis lors de la définition de l'objet de pagination et les fonctions de base liées au calcul de la pagination.
  3. db.class.php, cette classe est principalement utilisée pour encapsuler et gérer les opérations liées aux bases de données.

Le contenu est le suivant :

index.php:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PHP分页查询 - 测试页面</title>
</head>

<body>
    <?php
        include("db.class.php"); //加载数据库操作类
        include("page.class.php"); //加载分页类
        $page = new page(); //初始化分页类
        $db = new db("localhost","root","","test","$conn"); //连接数据库
        $count = $db->query("SELECT count(*) FROM students"); //查询总记录数
        $page->get_page($count,10); //调用分页方法,传入总记录数和每页显示记录数
        $genders = array("male"=>"男性","female"=>"女性");
        $results = $db->query("SELECT * FROM students {$page->limit}"); //获取当前页数据
        foreach($results as $row){ //遍历数据并渲染页面
            $gender = $genders[$row["gender"]];
            echo $row["id"]." ".$row["name"]." ".$gender." ".$row["age"]."<br/>";
        }
        echo $page->display_pages(); //渲染分页组件
    ?>
</body>
</html>

page.class.php:

<?php
/**
 * PHP分页类
 */
class page {
    public $total = 0; //总记录数
    public $page_size = 10; //每页显示的记录数
    public $cur_page = 1; //当前页数
    public $cur_offset = 0; //当前偏移量
    public $total_page = 0; //总页数
    public $limit = "";//分页查询限制语句

    public function __construct(){
        $this->cur_page = isset($_GET['page'])? intval($_GET['page']):1; //获取当前页,默认为第一页
    }

    /**
     * 生成分页显示代码
     */
    public function display_pages(){
        $page_list = "";
        $url_s = $_SERVER['REQUEST_URI'] . (strpos($_SERVER['REQUEST_URI'], '?')?'':"?")."&page=";
        //上一页
        if($this->cur_page>1){
            $page_list.="<a href=&#39;{$url_s}1&#39;>首页</a>";
            $page_list.="<a href=&#39;{$url_s}".($this->cur_page-1)."'>上一页</a>";
        }
        //数字页码
        for($i=1;$i<=$this->total_page;$i++){
            if($i==$this->cur_page){
                $page_list.="<span class=&#39;current&#39;>".$i."</span>";
            } else {
                $page_list.="<a href=&#39;{$url_s}{$i}&#39;>$i</a>";
            }
        }
        //下一页
        if($this->cur_page<$this->total_page){
            $page_list.="<a href=&#39;{$url_s}".($this->cur_page+1)."'>下一页</a>";
            $page_list.="<a href=&#39;{$url_s}{$this->total_page}'>尾页</a>";
        }
        $page_list.="共{$this->total_page}页,";
        $page_list.="<form method=&#39;&#39; action=&#39;&#39;><input type=&#39;text&#39; size=&#39;1&#39; name=&#39;page&#39;/><input type=&#39;submit&#39; value=&#39;跳转&#39;/></form>";
        return $page_list;
    }

    /**
     * 计算分页相关参数
     * @param int $count 总记录数
     * @param int $page_size 每页显示记录数
     */
    public function get_page($count,$page_size){
        $this->total = intval($count); //总记录数
        $this->page_size = intval($page_size); //每页显示多少条
        $this->total_page = ceil($this->total/$this->page_size); //总页数
        $this->cur_page = min($this->total_page,max(1,intval($this->cur_page))); //当前页码
        $this->cur_offset = ($this->cur_page-1)*$this->page_size; //当前查询的偏移量
        $this->limit = " LIMIT {$this->cur_offset},{$this->page_size}"; //查询限制语句
    }
}

db.class.php:

<?php
/**
 * 数据库操作类
 */
class db {
    private $conn;

    public function __construct($db_host,$db_user,$db_pass,$db_name){
        $this->conn = new mysqli($db_host,$db_user,$db_pass,$db_name);
        if(mysqli_connect_errno()) {
            exit("连接数据库失败!");
        }
        $this->conn->query("SET NAMES 'utf8'");
    }

    /**
     * mysql查询
     */
    public function query($sql){
        $results = array();
        $query = $this->conn->query($sql);
        if(!$query) return false;
        while($row = $query->fetch_array(MYSQLI_ASSOC)){
            $results[] = $row;
        }
        return $results;
    }

    public function __destruct(){
        $this->conn->close();
    }
}

Les étapes d'exécution du code de pagination sont les suivantes :

  1. Tout d'abord, nous devons appeler db. class.php, établir une connexion à la base de données ;
  2. Interroger le nombre total d'enregistrements via la méthode query() ;
  3. Appeler la méthode get_page() pour pré-calculer le nombre total d'enregistrements ; pages qui doivent être affichées et définir le nombre limite et la limite dans l'instruction de requête La valeur limite du point de départ de la requête ;
  4. Rendu le composant d'affichage de pagination à l'aide de la fonction de rendu display_pages().

Après avoir exécuté le fichier index.php, nous verrons une page d'affichage paginée, qui affichera le nombre d'impressions par page, la liste des numéros de page et la précision des résultats d'affichage de la manière attendue.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn