Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan fungsi paparan halaman pertanyaan dalam php

Bagaimana untuk melaksanakan fungsi paparan halaman pertanyaan dalam php

PHPz
PHPzasal
2023-04-24 10:52:441137semak imbas

Apabila melakukan pertanyaan pangkalan data, dalam beberapa kes, kami perlu memaparkan hasil dalam halaman mengikut peraturan tertentu. Sebagai contoh, apabila kita mahu setiap halaman klien memaparkan hanya sejumlah kecil data, kita perlu menggunakan fungsi paparan halaman pertanyaan sambil mencapai kesan halaman. Artikel ini akan menumpukan pada fungsi halaman pertanyaan bagi bahasa pembangunan PHP dan memperkenalkan prinsip dan langkah pelaksanaannya melalui contoh.

Prinsip pelaksanaan paparan paging pertanyaan

Prinsip pelaksanaan paparan paging pertanyaan adalah sangat mudah Kami boleh mengisih semua data yang ditanya mengikut peraturan tertentu, dan kemudian mengehadkan data yang dipaparkan pada setiap satu Kuantiti halaman, paparkan hasil pertanyaan dalam halaman. Kita boleh menggunakan algoritma untuk mengira rekod dalam pangkalan data yang perlu dipaparkan bermula dari dan berakhir dengan.

Langkah utama adalah seperti berikut:

1 Kira jumlah bilangan rekod: Biasanya, kita perlu menanyakan semua rekod dalam pangkalan data, iaitu jumlah rekod.

2. Kira jumlah halaman: Dengan membandingkan jumlah rekod dan bilangan rekod yang dipaparkan pada setiap halaman, jumlah halaman boleh dikira. Jika baki yang diperolehi dengan membahagikan jumlah muka surat dengan bilangan rekod yang dipaparkan pada setiap halaman bukan sifar, maka jumlah halaman perlu ditambah satu.

3. Soal data halaman semasa: Kira kedudukan mula dan tamat rekod untuk disoal pada halaman semasa, dan kemudian gunakan pernyataan SQL untuk menanyakan data. Walau bagaimanapun, pernyataan SQL di sini memerlukan beberapa pengubahsuaian Ia tidak boleh hanya menanyakan semua rekod, tetapi perlu menambah syarat pertanyaan dan mengehadkan bilangan hasil pertanyaan.

4. Paparan paging: Melalui komponen paging page, paparan paging boleh dilakukan dengan mudah. Biasanya, komponen halaman memaparkan maklumat seperti jumlah bilangan rekod, bilangan halaman semasa dan jumlah halaman. Pada masa yang sama, anda juga boleh membuat pertanyaan dan memaparkan data pada halaman yang berbeza dengan mengklik pada halaman yang berbeza.

Pelaksanaan kod

Untuk melaksanakan langkah-langkah ini, kita perlu menggunakan fungsi PHP untuk memproses halaman. Biasanya, fungsi ini perlu menerima beberapa parameter yang diperlukan, seperti jumlah bilangan rekod, bilangan rekod yang dipaparkan setiap halaman, nombor halaman semasa, dsb. Mengambil pangkalan data Mysql sebagai contoh, berikut ialah fungsi paging PHP biasa:

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

Fungsi di atas terutamanya melaksanakan pertanyaan dan mengembalikan maklumat yang perlu dipaparkan berdasarkan bilangan paparan setiap halaman, jumlah bilangan rekod, dan bilangan halaman semasa fungsi Data. Seterusnya, kami akan bekerjasama dengan anda untuk melaksanakan halaman pertanyaan PHP yang merangkumi fungsi halaman.

Pertama, kita perlu membina sumber data Di sini kita menggunakan jadual pelajar yang ringkas (medan termasuk id, nama, jantina, umur):

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;

Kemudian masukkan data ke dalam. Dalam jadual pelajar:

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

Kita perlu melaksanakan 3 fail berikut:

  1. index.php Fail ini adalah pembawa sebenar proses paging dan perlu fungsi yang mengendalikan proses paging Membuat panggilan dan data output berdasarkan nilai pulangan fungsi.
  2. page.class.php, kelas ini kebanyakannya melaksanakan fungsi paging, termasuk parameter yang perlu dilalui semasa menentukan objek paging dan fungsi teras yang berkaitan dengan pengiraan paging.
  3. db.class.php, kelas ini digunakan terutamanya untuk merangkum dan mengurus operasi berkaitan pangkalan data.

Isi kandungannya adalah seperti berikut:

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

Langkah-langkah pelaksanaan kod paging adalah seperti berikut:

  1. Pertama, kita perlu memanggil db.class.php untuk mewujudkan sambungan ke pangkalan data;
  2. Tanya jumlah rekod melalui kaedah query()
  3. Panggil kaedah get_page() untuk mengira jumlah halaman yang perlu dipaparkan, dan tentukan nilai had dalam pernyataan pertanyaan untuk mengehadkan nombor dan titik permulaan pertanyaan;
  4. Selepas menjalankan fail index.php, kami akan melihat halaman paparan bernombor, yang akan memaparkan bilangan tera setiap halaman, senarai nombor halaman dan ketepatan hasil paparan dalam cara kami dijangka.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan fungsi paparan halaman pertanyaan dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn