Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie die Abfrage-Paging-Anzeigefunktion in PHP

So implementieren Sie die Abfrage-Paging-Anzeigefunktion in PHP

PHPz
PHPzOriginal
2023-04-24 10:52:441207Durchsuche

Bei der Durchführung von Datenbankabfragen müssen wir in einigen Fällen die Ergebnisse nach bestimmten Regeln auf Seiten anzeigen. Wenn wir beispielsweise möchten, dass auf jeder Seite des Clients nur eine kleine Datenmenge angezeigt wird, müssen wir die Abfrage-Paging-Anzeigefunktion verwenden und gleichzeitig den Seiteneffekt erzielen. Dieser Artikel konzentriert sich auf die Abfrage-Paging-Funktion der PHP-Entwicklungssprache und stellt deren Implementierungsprinzipien und -schritte anhand von Beispielen vor.

Das Implementierungsprinzip der Abfrage-Paging-Anzeige ist sehr einfach. Wir können alle abgefragten Daten nach bestimmten Regeln sortieren und dann die Abfrageergebnisse im Paging anzeigen, indem wir die Anzahl der angezeigten Daten begrenzen jede Seite. Mithilfe von Algorithmen können wir berechnen, welcher Datensatz in der Datenbank beginnend mit und endend mit angezeigt werden muss.

Die Hauptschritte sind wie folgt:

1 Berechnen Sie die Gesamtzahl der Datensätze: Normalerweise müssen wir alle Datensätze in der Datenbank abfragen, also die Gesamtzahl der Datensätze.

2. Berechnen Sie die Gesamtzahl der Seiten: Durch Vergleich der Gesamtzahl der Datensätze und der Anzahl der auf jeder Seite angezeigten Datensätze kann die Gesamtzahl der Seiten berechnet werden. Wenn der Rest, der sich aus der Division der Gesamtseitenzahl durch die Anzahl der auf jeder Seite angezeigten Datensätze ergibt, nicht Null ist, muss die Gesamtseitenzahl um eins erhöht werden.

3. Fragen Sie die Daten der aktuellen Seite ab: Berechnen Sie die Start- und Endpositionen der abzufragenden Datensätze auf der aktuellen Seite und fragen Sie die Daten dann mit SQL-Anweisungen ab. Allerdings erfordert die SQL-Anweisung hier einige Änderungen. Sie kann nicht einfach alle Datensätze abfragen, sondern muss Abfragebedingungen hinzufügen und die Anzahl der Abfrageergebnisse begrenzen.

4. Paging-Anzeige: Über die Seiten-Paging-Komponente kann die Paging-Anzeige bequem durchgeführt werden. Normalerweise zeigt die Paging-Komponente Informationen wie die Gesamtanzahl der Datensätze, die aktuelle Anzahl der Seiten und die Gesamtanzahl der Seiten an. Gleichzeitig können Sie durch Klicken auf verschiedene Seiten auch Daten auf verschiedenen Seiten abfragen und anzeigen.

Code-Implementierung

Um diese Schritte zu implementieren, müssen wir eine PHP-Funktion zur Verarbeitung von Paging verwenden. Normalerweise muss diese Funktion einige notwendige Parameter empfangen, z. B. die Gesamtzahl der Datensätze, die Anzahl der auf jeder Seite angezeigten Datensätze, die aktuelle Seitennummer usw. Am Beispiel der MySQL-Datenbank ist das Folgende eine gängige PHP-Paging-Funktion:

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

Die obige Funktion implementiert hauptsächlich die Funktion zum Abfragen und Zurückgeben der anzuzeigenden Daten basierend auf der Anzahl der Anzeigen pro Seite und der Gesamtzahl der Datensätze und die aktuelle Anzahl der Seiten. Als Nächstes implementieren wir gemeinsam mit Ihnen eine PHP-Abfrageseite mit Paging-Funktionalität.

Zuerst müssen wir eine Datenquelle erstellen. Hier verwenden wir eine einfache Schülertabelle (ihre Felder umfassen ID, Name, Geschlecht, Alter):

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;

Dann fügen wir die Daten in die Schülertabelle ein:

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

Das müssen wir tun Implementieren Sie die folgenden 3 Dateien:

index.php. Diese Datei ist der eigentliche Träger des Paging-Prozesses. Sie muss die Funktion aufrufen, die den Paging-Prozess abwickelt und Daten basierend auf dem Rückgabewert der Funktion ausgibt.
  1. page.class.php, diese Klasse implementiert hauptsächlich die Paging-Funktion, einschließlich der Parameter, die beim Definieren des Paging-Objekts übergeben werden müssen, und der Kernfunktionen im Zusammenhang mit der Berechnung des Paging.
  2. db.class.php, diese Klasse wird hauptsächlich zum Kapseln und Verwalten datenbankbezogener Vorgänge verwendet.
  3. Der Inhalt ist wie folgt:

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();
    }
}

Die Ausführungsschritte des Paging-Codes sind wie folgt:

Zuerst müssen wir db.class.php aufrufen und eine Verbindung zur Datenbank herstellen.
  1. Fragen Sie die Gesamtzahl der Datensätze über die Methode query() ab Seiten, die angezeigt werden müssen, und definieren Sie die Grenzwertanzahl und den Grenzwert in der Abfrageanweisung. Der Wertgrenzwert des Startpunkts der Abfrage.
  2. Rendern Sie die Paging-Anzeigekomponente mithilfe der Rendering-Funktion display_pages().
  3. Nach dem Ausführen der Datei index.php sehen wir eine paginierte Anzeigeseite, auf der die Anzahl der Impressionen pro Seite, die Seitenzahlliste und die Genauigkeit der Anzeigeergebnisse wie erwartet angezeigt werden.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Abfrage-Paging-Anzeigefunktion in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn