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 :
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='{$url_s}1'>首页</a>"; $page_list.="<a href='{$url_s}".($this->cur_page-1)."'>上一页</a>"; } //数字页码 for($i=1;$i<=$this->total_page;$i++){ if($i==$this->cur_page){ $page_list.="<span class='current'>".$i."</span>"; } else { $page_list.="<a href='{$url_s}{$i}'>$i</a>"; } } //下一页 if($this->cur_page<$this->total_page){ $page_list.="<a href='{$url_s}".($this->cur_page+1)."'>下一页</a>"; $page_list.="<a href='{$url_s}{$this->total_page}'>尾页</a>"; } $page_list.="共{$this->total_page}页,"; $page_list.="<form method='' action=''><input type='text' size='1' name='page'/><input type='submit' value='跳转'/></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 :
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!