搜尋
首頁後端開發PHP問題php分頁有幾種實作方法

php分頁有幾種實作方法

Sep 15, 2021 am 10:29 AM
php分頁

php分頁有3種實作方法,分別是:1、透過「mysql_query」等函數將sql查詢進行分頁;2、使用ajax的方法實作分頁;3、透過「function viewpage(p){ ...}”腳本實現分頁。

php分頁有幾種實作方法

本文操作環境:windows7系統、PHP7.1版,DELL G3電腦

php分頁有幾種實作方法?

php實作分頁功能的3種方法

直接上程式碼,希望大家仔細閱讀。

方法一:講sql查詢進行分頁進行,需要呼叫幾個函數,具體見腳本:
1.pager.class.php

<?php
  
  class pager {
    public $sql; //SQL查询语句
    public $datanum; //查询所有的数据总记录数
    public $page_size; //每页显示记录的条数
    protected $_errstr;
    protected $_conn;
    protected $_query_id;

    public function query($query)///这个函数有问题,暂时可以不用
    {
    $ret = false;
    if (!empty($query)) {
      if ($this->_conn === false || !is_resource($this->_conn)) {
       warningLog(__METHOD__ . &#39;: query sql with no connection&#39;, true);
      return false;
      }
    $this->_query_id = @mysql_query($query, $this->_conn);
    if ($this->_query_id === false) {
    $this->_errstr = @mysql_error();
    $ret = false;
     } else {
    $this->_errstr = &#39;SUCCESS&#39;;
    $ret = $this->_query_id;
      }
    }
     $msg = ($ret === false) ? &#39;false&#39; : strval($ret);
     debugLog(__METHOD__.": [$msg] returned for sql query [$query]");
    return $ret;
    }
function __construct($sql,$page_size) {
      $result = mysql_query($sql);
      $datanum = mysql_num_rows($result);
      $this->sql=$sql;
      $this->datanum=$datanum;
      $this->page_size=$page_size;
    }

    //当前页数
    public function page_id() {
      if($_SERVER[&#39;QUERY_STRING&#39;] == ""){
        return 1;
      }elseif(substr_count($_SERVER[&#39;QUERY_STRING&#39;],"page_id=") == 0){
        return 1;
      }else{
        return intval(substr($_SERVER[&#39;QUERY_STRING&#39;],8));
      }
    }

    //剩余url值
    public function url() {
      if($_SERVER[&#39;QUERY_STRING&#39;] == ""){
        return "";
      }elseif(substr_count($_SERVER[&#39;QUERY_STRING&#39;],"page_id=") == 0){
        return "&".$_SERVER[&#39;QUERY_STRING&#39;];
      }else{
        return str_replace("page_id=".$this->page_id(),"",$_SERVER[&#39;QUERY_STRING&#39;]);
      }
    }

    //总页数
    public function page_num() {
      if($this->datanum == 0){
        return 1;
      }else{
        return ceil($this->datanum/$this->page_size);
      }
    }
//数据库查询的偏移量
    public function start() {
      return ($this->page_id()-1)*$this->page_size;
    }

    //数据输出
    public function sqlquery() {
      return $this->sql." limit ".$this->start().",".$this->page_size;
    }

    //获取当前文件名
    private function php_self() {
      return $_SERVER[&#39;PHP_SELF&#39;];
    }

    //上一页
    private function pre_page() {
      if ($this->page_id() == 1) { //页数等于1
        return "<a href=".$this->php_self()."?page_id=1".$this->url().">上一页</a> ";
      }elseif ($this->page_id() != 1) { //页数不等于1
        return "<a href=".$this->php_self()."?page_id=".($this->page_id()-1).$this->url().">上一页</a> ";
      }
    }

    //显示分页
    private function display_page() {
      $display_page = "";
      if($this->page_num() <= 10){ //小于10页
        for ($i=1;$i<=$this->page_num();$i++) //循环显示出页面
          $display_page .= "<a href=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a> ";
          return $display_page;
      }elseif($this->page_num() > 10){ //大于10页
        if($this->page_id() <= 6){
          for ($i=1;$i<=10;$i++) //循环显示出页面
            $display_page .= "<a href=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a> ";
            return $display_page;
        }elseif(($this->page_id() > 6) && ($this->page_num()-$this->page_id() >= 4)){
          for ($i=$this->page_id()-5;$i<=$this->page_id()+4;$i++) //循环显示出页面
            $display_page .= "<a href=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a> ";
 return $display_page;
        }elseif(($this->page_id() > 6) && ($this->page_num()-$this->page_id() < 4)){
          for ($i=$this->page_num()-9;$i<=$this->page_num();$i++) //循环显示出页面
            $display_page .= "<a href=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a> ";
            return $display_page;
        }
      }
    }

    //下一页
    private function next_page() {
      if ($this->page_id() < $this->page_num()) { //页数小于总页数
        return "<a href=".$this->php_self()."?page_id=".($this->page_id()+1).$this->url().">下一页</a> ";
      }elseif ($this->page_id() == $this->page_num()) { //页数等于总页数
        return "<a href=".$this->php_self()."?page_id=".$this->page_num().$this->url().">下一页</a> ";
      }
    }

    // 设置分页信息
    public function set_page_info() {
      $page_info = "共".$this->datanum."条 ";
      $page_info .= "<a href=".$this->php_self()."?page_id=1".$this->url().">首页</a> ";
      $page_info .= $this->pre_page();
      $page_info .= $this->display_page();
      $page_info .= $this->next_page();
      $page_info .= "<a href=".$this->php_self()."?page_id=".$this->page_num().$this->url().">尾页</a> ";
      $page_info .= "第".$this->page_id()."/".$this->page_num()."页";
      return $page_info;
    }

  }
?>

2.腳本2:

#
<?php
  //类的用法
  // 读取分页类
  include("pager.class.php");
  // 数据库连接初始化
//  $db = new mysql();
  $impeach_host = &#39;10.81.43.139&#39;;
  $impeach_usr = &#39;vmtest15&#39;;
  $impeach_passwd = &#39;vmtest15&#39;;
  $impeach_name = &#39;ufeature&#39;;
  $impeach_con = mysql_connect($impeach_host, $impeach_usr, $impeach_passwd) or
    die("Can&#39;t connect ".mysql_error());
  mysql_select_db($impeach_name, $impeach_con);
  // 这是一个sql查询语句,并得到查询结果
  $sql = "select word from ufeature.spam_accuse_word_list where flag=&#39;0&#39;";
  // 分页初始化
  $page = new pager($sql,20);
  // 20是每页显示的数量
  // $res_1 = mysql_query($sql) or
  //    die("Can&#39;t get result ".mysql_error());

   $result=mysql_query($page->sqlquery());
while($info = mysql_fetch_array($result,MYSQL_ASSOC)){

  // while($info = mysql_fetch_array($res_1, MYSQL_ASSOC)){
  echo $info["word"]."<br/>";
  }
  // 页码索引条
  echo $page->set_page_info();


?>

方法二:使用ajax的方法
1、先了解SQL語句中的limit用法

SELECT * FROM table …… limit 开始位置 , 操作条数 (其中开始位置是从0开始的)

範例
#取前20條記錄:SELECT * FROM table … limit   0 , 20
從第11條開始取20筆記錄:SELECT * FROM table … limit   10 ,20 
LIMIT n 等價於LIMIT 0,n。
select * from table LIMIT 5; //返回前5行, select * from table LIMIT 0,5相同 
2 、分頁原理

 所謂分頁顯示,也就是講資料庫中的結果集,一段一段顯示出來
怎麼分段,目前在第幾段(每頁有幾條,目前再第幾頁)
前10筆記錄:select * from table limit 0,10
第11至20筆記錄:select * from table limit 10,10
第21至30筆記錄:select * from table limit 20,10
分頁公式:
(目前頁數- 1 )X 每頁條數, 每頁條數

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

3、$_SERVER["REQUEST_URI"]函數
預定義伺服器變數的一種,所有$_SERVER開頭的都叫做預定於伺服器變數。
REQUEST_URI的作用是取得目前URI,也就除網域外後面的完整的位址路徑。
範例:
目前頁面為:http://www.test.com/home.php?id=23&cid=22
echo $_SERVER["REQUEST_URI"]
結果為:/home .php?id=23&cid=22 
4、parse_url()解析URL函數
 parse_url() 是講URL解析成有固定鍵值的陣列的函數
範例

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

結果:

Array
(
 [scheme] => http  ;协议
 [host] => hostname  ;主机域名
 [user] => username  ;用户
 [pass] => password  ;密码
 [path] => /path   ;路径
 [query] => arg=value  ;取参数
 [fragment] => anchor  ;
)

5、程式碼實例
# # 這個一個留言的分頁,分成3個部分,一個是資料庫設計,一個是連結頁面,一個是顯示頁面。

(1)設計資料庫 設計資料庫名為bbs,有一個資料表為message,裡麵包含title,lastdate,user,content等字段,分別表示留言標題,留言日前,留言人,留言的內容

(2)連接頁面

<?php
$conn = @ mysql_connect("localhost", "root", "123456") or die("数据库链接错误");
mysql_select_db("bbs", $conn);
mysql_query("set names &#39;GBK&#39;"); //使用GBK中文编码;
//将空格,换行转换为HTML可解析
function htmtocode($content) {
 $content = str_replace("\n", "<br>", str_replace(" ", " ", $content)); //两个str_replace嵌套
 return $content;
}
//$content=str_replace("&#39;","‘",$content);
 //htmlspecialchars();
 
?>

#(3)顯示頁面

<?php
 include("conn.php");
$pagesize=2; //设置每页显示2个记录
$url=$_SERVER["REQUEST_URI"]; 
$url=parse_url($url);
$url=$url[path];

$numq=mysql_query("SELECT * FROM `message`");
$num = mysql_num_rows($numq);
if($_GET){
$pageval=$_GET;
$page=($pageval-1)*$pagesize;
$page.=&#39;,&#39;;
}
if($num > $pagesize){
 if($pageval<=1)$pageval=1;
 echo "共 $num 条".
 " <a href=$url?page=".($pageval-1).">上一页</a> <a href=$url?page=".($pageval+1).">下一页</a>";
}
$SQL="SELECT * FROM `message` limit $page $pagesize ";
 $query=mysql_query($SQL);
 
 while($row=mysql_fetch_array($query)){
?>
<table width=500 border="0" cellpadding="5" cellspacing="1" bgcolor="#add3ef">
 <tr bgcolor="#eff3ff">
 <td>标题:<?php echo $row[title]?></td> <td>时间:<?php echo $row[lastdate]?></td>
 </tr>
 <tr bgcolor="#eff3ff">
 <td> 用户:<?php echo $row[user]?></td><td></td>
 </tr>
 <tr>
 <td>内容:<?php echo htmtocode($row[content]);?></td>
 </tr>
 <br>
</table>
<?php
 }
?>

##方法3 :

<script> 
function viewpage(p){ 
if(window.XMLHttpRequest){ 
var xmlReq = new XMLHttpRequest(); 
} else if(window.ActiveXObject) { 
var xmlReq = new ActiveXObject(&#39;Microsoft.XMLHTTP&#39;); 
} 
var formData = "page="+p; 
xmlReq.onreadystatechange = function(){ 
if(xmlReq.readyState == 4){ 
document.getElementByIdx_x(&#39;content2&#39;).innerHTML = xmlReq.responseText; 
} 
} 
xmlReq.open("post", "hotel_list.php", true); 
xmlReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
xmlReq.send(formData); 
return false; 
} 
</script>

腳本2:

header("Content-Type:text/html;charset=GB2312"); 
$pagesize=10; 
//echo $_POST[&#39;page&#39;]; 
$result = mysql_query("Select count(DISTINCT hotelname) FROM ".TBL_HOTELS); 
$myrow = mysql_fetch_array($result); 
$numrows=$myrow[0]; 

$pages=intval($numrows/$pagesize); 
if ($numrows%$pagesize) 
$pages++; 
if (isset($_POST[&#39;page&#39;])){ 
$page=intval($_POST[&#39;page&#39;]); 
} 
else{ 
//设置为第一页 
$page=1; 
} 
$first=1; 
$prev=$page-1; 
$next=$page+1; 
$last=$pages; 
//计算记录偏移量 
$offset=$pagesize*($page - 1); 
//读取指定记录数 
$result=mysql_query("select `hotelname` , count( * ) from ".TBL_HOTELS." GROUP BY `hotelname` order by id desc limit $offset,$pagesize"); 
$num = mysql_num_rows($result); 
while ($row = mysql_fetch_array($result,MYSQL_NUM)) { 
$hotelname[] = $row[0]; 
$countpeople[] = $row[1]; 
} 
for($a=0;$a<$num;$a++) 
{ 
//$result=mysql_query("select count(title) from " . TBL_Comments ." where `title`=\"".$title[$a]."\""); 
//$row = mysql_fetch_row($result); 
echo "<TABLE style=\"MARGIN-BOTTOM: 20px\" cellSpacing=0 cellPadding=0 width=100% border=0>\n"; 
echo "<TBODY>\n"; 
echo "<TR>\n"; 
echo "<TD style=\"PADDING-TOP: 5px\" vAlign=top align=left width=80>\n"; 
//rating_bar($title[$a],5); 
echo "</TD>\n"; 
echo "<TD style=\"PADDING-TOP: 5px\" align=left width=100%><A title=$hotelname[$a] style=\"FONT-SIZE: 14px\" href=#>$hotelname[$a]</A>\n"; 
echo "</TD></TR>\n"; 
echo " <TR>\n"; 
echo "<TD></TD>\n"; 
echo "<TD style=\"PADDING-LEFT: 0px\">\n"; 
echo "<IMG src=\"images/comment.gif\" border=0> 推荐人数:($countpeople[$a]) |\n"; 
echo "<SPAN>平均分:<STRONG></STRONG> (".$count."票) | 评论数:()</SPAN>\n"; 
echo "</TD></TR></TBODY></TABLE>\n"; 
} 
echo "<TABLE style=\"MARGIN-TOP: 30px\" cellSpacing=0 cellPadding=0 width=\"100%\""; 
echo "border=0>"; 
echo "<TBODY><TR><TD colSpan=3 height=20>"; 
echo "<p align=center>"; 
echo "<P align=left><FONT color=red>第".$page."页/总".$pages."页 | 总".$numrows."条</FONT> | "; 
if ($page>1) echo "<a onclick=\"viewpage(".$first.")\" href=&#39;#&#39;>首页</a> | "; 
if ($page>1) echo "<a onclick=\"viewpage(".$prev.")\" href=&#39;#&#39;>上页</a> | "; 
if ($page<$pages) echo "<a onclick=\"viewpage(".$next.")\" href=&#39;#&#39;>下页</a> | "; 
if ($page<$pages) echo "<a onclick=\"viewpage(".$last.")\" href=&#39;#&#39;>尾页</a>"; 
echo "转到第 <INPUT maxLength=3 size=3 value=1 name=goto_page> 页 <INPUT hideFocus onclick=\"viewpage(document.all.goto_page.value)\" type=button value=Go name=cmd_goto>"; 
echo "</P></p></TD></TR></TBODY></TABLE>";
#推薦學習:《

PHP影片教學

以上是php分頁有幾種實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。