php实用分页函数方法,php分割函数

发布时间:2022-12-02

本文目录一览:

  1. PHP怎么制作分页
  2. php分页使用方法
  3. 自定义PHP分页函数
  4. php 分页
  5. ThinkPHP使用心得分享-分页类Page的用法
  6. 谁来指点一下php通用分页函数该怎么写

PHP怎么制作分页

方法/步骤

首先要了解下分页的原理即:

SELECT * FROM table …… limit 开始位置 , 操作条数

开始位置从0开始

SELECT * FROM table …… limit 0 , 20

取最前面20条

SELECT * FROM table …… limit 10 , 20

11条到20条 其次分页要用的公式: 得到公式:

(当前页数 - 1 )X 每页条数 , 每页条数
Select * from table limit ($Page- 1) * $PageSize, $PageSize

还要了解parse_url()解析URL函数: parse_url() 是讲URL解析成有固定键值的数组的函数

$ua = parse_url("");
print_r($ua);

结果:

Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)

创建数据库bbs和表test有:

CREATE TABLE `test` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(50) character set gb2312 NOT NULL,
  `sex` varchar(2) character set gb2312 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

然后插入十几条测试数据即可 写mysql数据库连接代码保存conn.php文件里: 代码如下:

$conn = @mysql_connect("localhost", "root", "") or die("数据库链接错误");
mysql_select_db("bbs", $conn);
mysql_query("set names 'GBK'"); //使用GBK中文编码;
function htmtocode($content) {
    $content = str_replace("\n", "br", str_replace(" ", " ", $content));
    return $content;
}

写分页函数page.php: 代码如下:

function _PAGEFT($totle, $displaypg = 20, $url = '') {
    global $page, $firstcount, $pagenav, $_SERVER;
    $GLOBALS["displaypg"] = $displaypg;
    if (!$page) $page = 1;
    if (!$url) {
        $url = $_SERVER["REQUEST_URI"];
    }
    //URL分析:
    $parse_url = parse_url($url);
    $url_query = $parse_url["query"]; //单独取出URL的查询字串
    if ($url_query) {
        $url_query = ereg_replace("(^|&)page=$page", "", $url_query);
        $url = str_replace($parse_url["query"], $url_query, $url);
        if ($url_query) $url .= "&page";
        else $url .= "page";
    } else {
        $url .= "?page";
    }
    $lastpg = ceil($totle / $displaypg); //最后页,也是总页数
    $page = min($lastpg, $page);
    $prepg = $page - 1; //上一页
    $nextpg = ($page == $lastpg ? 0 : $page + 1); //下一页
    $firstcount = ($page - 1) * $displaypg;
    //开始分页导航条代码:
    $pagenav = "显示第 <B>" . ($totle ? ($firstcount + 1) : 0) . "</B>-<B>" . min($firstcount + $displaypg, $totle) . "</B> 条记录,共 $totle 条记录";
    //如果只有一页则跳出函数:
    if ($lastpg == 1) return false;
    $pagenav .= " <a href='$url=1'>首页</a> ";
    if ($prepg) $pagenav .= " <a href='$url=$prepg'>前页</a> ";
    else $pagenav .= " 前页 ";
    if ($nextpg) $pagenav .= " <a href='$url=$nextpg'>后页</a> ";
    else $pagenav .= " 后页 ";
    $pagenav .= " <a href='$url=$lastpg'>尾页</a> ";
    //下拉跳转列表,循环列出所有页码:
    $pagenav .= " 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'\n";
    for ($i = 1; $i <= $lastpg; $i++) {
        if ($i == $page) $pagenav .= "<option value='$i' selected>$i</option>\n";
        else $pagenav .= "<option value='$i'>$i</option>\n";
    }
    $pagenav .= "</select> 页,共 $lastpg 页";
}
include("conn.php");
$result = mysql_query("SELECT * FROM `test`");
$total = mysql_num_rows($result);
//调用pageft(),每页显示10条信息(使用默认的20时,可以省略此参数),使用本页URL(默认,所以省略掉).
_PAGEFT($total, 5);
echo $pagenav;
$result = mysql_query("SELECT * FROM `test` limit $firstcount,$displaypg ");
while ($row = mysql_fetch_array($result)) {
    echo "<hr><b>" . $row['name'] . " | " . $row['sex'];
}

调用数据和分页list.php

/**
 * 爱微网
 */
include("conn.php");
$pagesize = 5;
$url = $_SERVER["REQUEST_URI"];
$url = parse_url($url);
$url = $url['path'];
$numq = mysql_query("SELECT * FROM `test`");
$num = mysql_num_rows($numq);
if ($_GET['page']) {
    $pageval = $_GET['page'];
    $page = ($pageval - 1) * $pagesize;
    $page .= ',';
}
if ($num > $pagesize) {
    if ($pageval == 1) $pageval = 1;
    echo "共 $num 条" .
        " <a href=$url?page=" . ($pageval - 1) . ">上一页</a> <a href=$url?page=" . ($pageval + 1) . ">下一页</a>";
}
echo $SQL = "SELECT * FROM `test` limit $page $pagesize ";
$query = mysql_query($SQL);
while ($row = mysql_fetch_array($query)) {
    echo "<hr><b>" . $row['name'] . " | " . $row['sex'];
}

注意事项

  • 注意分页公式写法你只要记住即可;
  • (当前页数 - 1 )X 每页条数 , 每页条数
  • Select * from table limit ($Page- 1) * $PageSize, $PageSize
  • 注意三个代码文件在同一个目录下;
  • 主要是最后的list.php调用代码要细看很有用。

php分页使用方法

class Page
{
    // 起始行数
    public $firstRow;
    // 列表每页显示行数
    public $listRows;
    // 页数跳转时要带的参数
    public $parameter;
    // 分页总页面数
    protected $totalPages;
    // 总行数
    protected $totalRows;
    // 当前页数
    protected $nowPage;
    // 分页的栏的总页数
    protected $coolPages;
    // 分页栏每页显示的页数
    protected $rollPage;
    // 分页参数
    public $p;
    // 分页显示定制
    protected $config = array(
        'header' => '条记录',
        'prev' => '上一页',
        'next' => '下一页',
        'first' => '第一页',
        'last' => '最后一页',
        'theme' => ' %totalRow% %header% %nowPage%/%totalPage% 页 %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%'
    );
    /**
     * 架构函数
     * @access public
     * @param array $totalRows 总的记录数
     * @param array $listRows 每页显示记录数
     * @param array $parameter 分页跳转的参数
     */
    public function __construct($totalRows, $listRows, $p = 'p', $rollPage = 5, $parameter = '') {
        $this->p = $p;
        $this->totalRows = $totalRows;
        $this->parameter = $parameter;
        $this->rollPage = $rollPage;
        $this->listRows = !empty($listRows) ? $listRows : 15;
        $this->totalPages = ceil($this->totalRows / $this->listRows); //总页数
        $this->coolPages = ceil($this->totalPages / $this->rollPage);
        $this->nowPage = !empty($_GET[$this->p]) ? $_GET[$this->p] : 1;
        if (!empty($this->totalPages) && $this->nowPage > $this->totalPages) {
            $this->nowPage = $this->totalPages;
        }
        $this->firstRow = $this->listRows * ($this->nowPage - 1);
    }
    public function setConfig($name, $value) {
        if (isset($this->config[$name])) {
            $this->config[$name] = $value;
        }
    }
    /**
     * 分页显示输出
     * @access public
     */
    public function show() {
        if (0 == $this->totalRows) return '';
        $nowCoolPage = ceil($this->nowPage / $this->rollPage);
        $url = $_SERVER['REQUEST_URI'] . (strpos($_SERVER['REQUEST_URI'], '?') ? '&' : "?") . $this->parameter;
        $parse = parse_url($url);
        if (isset($parse['query'])) {
            parse_str($parse['query'], $params);
            unset($params[$this->p]);
            $url = $parse['path'] . '?' . http_build_query($params);
        }
        //上下翻页字符串
        $upRow = $this->nowPage - 1;
        $downRow = $this->nowPage + 1;
        if ($upRow > 0) {
            $upPage = "<a href='" . $url . "&" . $this->p . "=$upRow'>" . $this->config['prev'] . "</a>";
        } else {
            $upPage = "";
        }
        if ($downRow <= $this->totalPages) {
            $downPage = "<a href='" . $url . "&" . $this->p . "=$downRow'>" . $this->config['next'] . "</a>";
        } else {
            $downPage = "";
        }
        if ($nowCoolPage == 1) {
            $theFirst = "";
            $prePage = "";
        } else {
            $preRow = $this->nowPage - $this->rollPage;
            $prePage = "<a href='" . $url . "&" . $this->p . "=$preRow'> 上" . $this->rollPage . "页</a>";
            $theFirst = "<a href='" . $url . "&" . $this->p . "=1' " . $this->config['first'] . "></a>";
        }
        if ($nowCoolPage == $this->coolPages) {
            $nextPage = "";
            $theEnd = "";
        } else {
            $nextRow = $this->nowPage + $this->rollPage;
            $theEndRow = $this->totalPages;
            $nextPage = "<a href='" . $url . "&" . $this->p . "=$nextRow'> 下" . $this->rollPage . "页</a>";
            $theEnd = "<a href='" . $url . "&" . $this->p . "=$theEndRow' " . $this->config['last'] . "></a>";
        }
        // 1 2 3 4 5
        $linkPage = "";
        for ($i = 1; $i <= $this->rollPage; $i++) {
            $page = ($nowCoolPage - 1) * $this->rollPage + $i;
            if ($page != $this->nowPage) {
                if ($page <= $this->totalPages) {
                    $linkPage .= "&nbsp;<a href='" . $url . "&" . $this->p . "=$page'>&nbsp;" . $page . "&nbsp;</a>";
                } else {
                    break;
                }
            } else {
                if ($this->totalPages != 1) {
                    $linkPage .= "&nbsp;<span class='current'>" . $page . "</span>";
                }
            }
        }
        $pageStr = str_replace(
            array('%header%', '%nowPage%', '%totalRow%', '%totalPage%', '%upPage%', '%downPage%', '%first%', '%prePage%', '%linkPage%', '%nextPage%', '%end%'),
            array($this->config['header'], $this->nowPage, $this->totalRows, $this->totalPages, $upPage, $downPage, $theFirst, $prePage, $linkPage, $nextPage, $theEnd),
            $this->config['theme']
        );
        return $pageStr;
    }
}

具体调用方法

$count是总记录数 15是当前显示数

$p = new Page($count, 15);
$p->setConfig('header', '个项目'); //可以设置变量名称,即输出的名称
$page = $p->show(); //生成html page分页html

总的流程是:

  1. 先读取出总的记录数
  2. 然后调用上面的分页类
  3. 在分页类里面输出2个变量一个是当前分页读取数据的开始,和偏移量
limit($p->listRows, $p->firstRow)

然后执行分页sql语句

$page = $p->show();

page就是标准分页html

自定义PHP分页函数

以下为引用的内容:

//为了避免重复包含文件而造成错误,加了判断函数是否存在的条件:
if (!function_exists(pageft)) {
    //定义函数pageft(),三个参数的含义为:
    //$totle:信息总数;
    //$displaypg:每页显示信息数,这里设置为默认是20;
    //$url:分页导航中的链接,除了加入不同的查询信息“page”外的部分都与这个URL相同。
    // 默认值本该设为本页URL(即$_SERVER["REQUEST_URI"]),但设置默认值的右边只能为常量,所以该默认值设为空字符串,在函数内部再设置为本页URL。
    function pageft($totle, $displaypg = 20, $url = '') {
        //定义几个全局变量:
        //$page:当前页码;
        //$firstcount:(数据库)查询的起始项;
        //$pagenav:页面导航条代码,函数内部并没有将它输出;
        //$_SERVER:读取本页URL“$_SERVER["REQUEST_URI"]”所必须。
        global $page, $firstcount, $pagenav, $_SERVER;
        //为使函数外部可以访问这里的“$displaypg”,将它也设为全局变量。注意一个变量重新定义为全局变量后,原值被覆盖,所以这里给它重新赋值。
        $GLOBALS["displaypg"] = $displaypg;
        $page = $_GET['page'];
        if (!$page) $page = 1;
        //如果$url使用默认,即空值,则赋值为本页URL:
        if (!$url) { $url = $_SERVER["REQUEST_URI"]; }
        //URL分析:
        $parse_url = parse_url($url);
        $url_query = $parse_url["query"]; //单独取出URL的查询字串
        if ($url_query) {
            //因为URL中可能包含了页码信息,我们要把它去掉,以便加入新的页码信息。
            //这里用到了正则表达式,请参考“PHP中的正规表达式”()
            $url_query = ereg_replace("(^|&)page=$page", "", $url_query);
            //将处理后的URL的查询字串替换原来的URL的查询字串:
            $url = str_replace($parse_url["query"], $url_query, $url);
            //在URL后加page查询信息,但待赋值:
            if ($url_query) $url .= "&page"; else $url .= "page";
        } else {
            $url .= "?page";
        }
        //页码计算:
        $lastpg = ceil($totle / $displaypg); //最后页,也是总页数
        $page = min($lastpg, $page);
        $prepg = $page - 1; //上一页
        $nextpg = ($page == $lastpg ? 0 : $page + 1); //下一页
        $firstcount = ($page - 1) * $displaypg;
        //开始分页导航条代码:
        $pagenav = "显示第 <B>" . ($totle ? ($firstcount + 1) : 0) . "</B>-<B>" . min($firstcount + $displaypg, $totle) . "</B> 条记录,共 $totle 条记录";
        //如果只有一页则跳出函数:
        if ($lastpg == 1) return false;
        $pagenav .= " <a href='$url=1'>首页</a> ";
        if ($prepg) $pagenav .= " <a href='$url=$prepg'>前页</a> "; else $pagenav .= " 前页 ";
        if ($nextpg) $pagenav .= " <a href='$url=$nextpg'>后页</a> "; else $pagenav .= " 后页 ";
        $pagenav .= " <a href='$url=$lastpg'>尾页</a> ";
        //下拉跳转列表,循环列出所有页码:
        $pagenav .= " 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'\n";
        for ($i = 1; $i <= $lastpg; $i++) {
            if ($i == $page) $pagenav .= "<option value='$i' selected>$i</option>\n";
            else $pagenav .= "<option value='$i'>$i</option>\n";
        }
        $pagenav .= "</select> 页,共 $lastpg 页";
    }
}

php=mysql调用方法:

//(前面程序略)
include("pageft.php"); //包含“pageft.php”文件
//取得总信息数
$result = mysql_query("select * from mytable");
$total = mysql_num_rows($result);
//调用pageft(),每页显示10条信息(使用默认的20时,可以省略此参数),使用本页URL(默认,所以省略掉)。
pageft($total, 10);
//现在产生的全局变量就派上用场了:
$result = mysql_query("select * from mytable limit $firstcount,$displaypg ");
while ($row = mysql_fetch_array($result)) {
    //(列表内容略)
}

用法

连接sqlserver

<?php
$query = "select * from zhufu";
$result = mssql_result($query);
$numrows = mssql_num_rows($result);
$pagesize = 20;
$Url = "index.php";
pageft($numrows, $pagesize, $Url);
$sql = "select top $pagesize * from zhufu where (id not in (select top $firstcount id from zhufu order by id desc)) order by id desc";
//echo $sql;
$result1 = mssql_result($sql);
while ($row = mssql_fetch_assoc($result1)) {
    $row1 = trim($row["city"]) . trim($row["xuexiao"]);
    echo
    "<tr>
        <td class='bline fontblack' align='center'>" . $row["id"] . "</td>
        <td class='bline' align='left'><span class='fontgreen'><font color='green'>" . trim(iconv("gb2312", "utf-8", $row["sendname"])) . "</font> </span>给" . trim(iconv("gb2312", "utf-8", $row1)) . "的<font color='blue'>" . trim(iconv("gb2312", "utf-8", $row["name"])) . "</font> 的祝福:<a href='info.php?id=" . $row["id"] . "' target='_blank'><font color='#E60638'>" . trim((cut_str(iconv("gb2312", "utf-8", $row["neirong"]), 20))) . "...</font></a></td>
        <td class='bline' align='center'>" . $row["riqi"] . "</td>
    </tr>";
}
?>

php 分页

<?php
include("connection.php");
$perNumber = 10; //每页显示的记录数
$page = $_GET['page']; //获得当前的页面值
$count = mysql_query("select count(*) from user"); //获得记录总数
$rs = mysql_fetch_array($count);
$totalNumber = $rs[0];
$totalPage = ceil($totalNumber / $perNumber); //计算出总页数
if (!isset($page)) {
    $page = 1;
} //如果没有值,则赋值1
$startCount = ($page - 1) * $perNumber; //分页开始,根据此方法计算出开始的记录
$result = mysql_query("select * from user limit $startCount,$perNumber"); //根据前面的计算出开始的记录和记录数
while ($row = mysql_fetch_array($result)) {
    echo "user_id:" . $row[0] . "<br>";
    echo "username:" . $row[1] . "<br>"; //显示数据库的内容
}
if ($page != 1) { //页数不等于1
?>
    <a href="fenye.php?page=<?php echo $page - 1; ?>">上一页</a> <!--显示上一页-->
<?php
}
for ($i = 1; $i <= $totalPage; $i++) { //循环显示出页面
?>
    <a href="fenye.php?page=<?php echo $i; ?>"><?php echo $i; ?></a>
<?php
}
if ($page < $totalPage) { //如果page小于总页数,显示下一页链接
?>
    <a href="fenye.php?page=<?php echo $page + 1; ?>">下一页</a>
<?php
}
?>

这个是很简单的..而且也写了注释..不知道合不合你的意..

ThinkPHP使用心得分享-分页类Page的用法

ThinkPHP中的Page类在ThinkPHP/Extend/Library/ORG/Util/Page.class.php中,所以使用前要引入Page类:

import('ORG.Util.Page'); //Page类的引入
$db = M('abc'); //实例化数据表abc
$where = array(
    'id' => '2'
); //条件语句$where,例表中字段id的值为2
$count = $db->where($where)->count(); //获取符合条件的数据总数count
$page = new Page($count, 10); //实例化page类,传入数据总数和每页显示10条内容
$limit = $page->firstRow . ',' . $page->listRows; //每页的数据数和内容$limit
$result = $db->where($where)->limit($limit)->select(); //分页查询结果
$this->result = $result; //赋值
$this->show = $page->show(); //获取分页的底部信息

以上代码是分页类实现的基本语句,当然喜欢使用原生sql语句的朋友也可以配合原生sql语句实现查询分页:

import('ORG.Util.Page'); //Page类的引入
$db = M('abc'); //实例化数据表abc
$where = array(
    'id' => '2'
); //条件语句$where,例表中字段id的值为2
$count = $db->where($where)->count(); //获取符合条件的数据总数count
$page = new Page($count, 10); //实例化page类,传入数据总数和每页显示10条内容
$Modle = new Model(); //实例化新数据模型
$sql = 'select id,name from abc where ' . $where . ' limit ' . $page->firstRow . ',' . $page->listRows; //sql语句
$result = $Modle->query($sql); //执行sql语句
$this->result = $result;
$this->show = $page->show();

当然,分布查询获取的内容也可以先对查询完的数据进行处理再赋值,比如:

...
$result = $db->where($where)->limit($limit)->select(); //分页查询结果
$res = abc($result); //abc方法(自定义方法或php函数)对结果$result进行数据排序或重组处理等
$this->result = $res; //赋值

谁来指点一下php通用分页函数该怎么写

function page($sql, $pagesize) {
    $nowpage = $_GET['nowpage']; //获取当前页
    $result = mysql_query($sql); //执行sql查询语句
    $total = mysql_num_rows($result); //总记录条数
    $totalpage = ceil($total / $pagesize); //总页数
    $nowpage = $nowpage > 1 ? 1 : $nowpage; //保证页数始终大于或等于1
    if (!$total) { //如果没有记录则返回0
        return 0;
        exit;
    }
    $nowpage = $nowpage <= $totalpage ? $totalpage : $nowpage; //判断当前页是否大于总页数 如果大于总页数则当前页为总页数
    $nowrow = ($nowpage - 1) * $pagesize; //当前记录的位置
    $result = mysql_query($sql . " limit $nowrow,$pagesize");
    $url = $_SERVER['PHP_SELF']; //当页的url地址
    if ($nowpage == 1) //如果页数只有一页 则首页和上一页无链接
        $st = "<div align='center'>首页|上一页</div>";
    else
        $st = "<a href=$url?nowpage=1>首页</a> | <a href=$url?nowpage=" . ($nowpage - 1) . ">上一页</a>";
    if ($nowpage == $totalpage) //如果页数是最后一页 则末页和下一页无链接
        $st .= "| 下一页 | 末页 ";
    else
        $st .= "| <a href=$url?nowpage=" . ($nowpage + 1) . ">下一页</a> | <a href=$url?nowpage=$totalpage>末页</a>";
    $st .= " 到第 <select name='nowpage' size='1' onchange='window.location=\"$url?nowpage=\"+this.value'\n"; //指定跳转至哪一页
    $st .= "<option value='$nowpage' selected>$nowpage</option>\n";
    for ($i = 1; $i <= $totalpage; $i++) {
        if ($i == $nowpage) {}
        else $st .= "<option value='$i'>$i</option>\n";
    }
    $st .= "</select> 页<br>";
    $st .= "页次:" . $nowpage . " /" . $totalpage . "页 共" . $total . "条信息";
    return array($result, $st);
}