本文目录一览:
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 .= " <a href='" . $url . "&" . $this->p . "=$page'> " . $page . " </a>";
} else {
break;
}
} else {
if ($this->totalPages != 1) {
$linkPage .= " <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
总的流程是:
- 先读取出总的记录数
- 然后调用上面的分页类
- 在分页类里面输出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);
}