很经典的分页程序

ematphp 2011-04-07 03:03:01
Conn.php

<?php
header("Content-Type:text/html;charset=utf-8");
$conn = "";
$mysql_localhost = "localhost";
$mysql_user = "root";
$mysql_pws = "sa";
$mysql_data = "page";
/**
* 连接数据库
*/
function OpenDatabase()
{
global $mysql_localhost,$mysql_user,$mysql_pws,$mysql_data; //设置全局变量,但退出函数后值无效
$conn = @mysql_connect($mysql_localhost,$mysql_user,$mysql_pws) or die("提示:数据库连接失败!");
$GLOBALS["conn"] = $conn; //全局变量值,退出函数后值有效
mysql_query("set names 'utf-8'"); //设置编码
$db_selected = mysql_select_db($mysql_data,$conn);
}
/**
* 关闭数据库
*/
function CloseDatabase()
{
mysql_close($GLOBALS["conn"]);
}
?>
Page.php
<?php
header("Content-Type:text/html;charset=utf-8");
include("Conn.php");
OpenDatabase(); //打开数据库
//-------调用分页函数-------
$pagenav = _page_list("test",3);
//------------------------
echo $pagenav; //打印出分页返回的字符串
//------------------------显示列表-------------------
$sql = "SELECT * from test limit $firstcount,$pagesize";
$result = mysql_query($sql,$conn); //查询语句
while($row = mysql_fetch_array($result,MYSQL_NUM))
{
echo "<hr>".$row[0]." | ".$row[1]." | ".$row[2];
}
echo "<hr>";
mysql_free_result($result); //释放内存空间
//----------------------------------------------------
echo $pagenav; //打印出分页返回的字符串


//================================================================================
/**
* 函数名:_page_list
* 参数:$table ---- 所要查询的表名
* $page_size ---- 每页的记录数,默认一页显示20条
* 作用:分布显示所有记录
* 使用方法:$pagenav = _page_list("test");
* 然后在要显示分页字符的地方打印出$pagenav
*/
function _page_list($table,$page_size=20)
{
global $firstcount,$pagenav,$page,$conn,$pagesize;
$page = $_GET[page];
$url = _get_url();

$pagesize = $page_size;
$result = mysql_query("select * from $table",$conn);
$total = mysql_num_rows($result); //总记录数
mysql_free_result($result); //释放内存空间
$lastpg = ceil($total / $pagesize); //最后一页,即总页数

$page = min($lastpg,$page); //返回其中最小的数
$prepg = ($page > 1)?$page-1:$page; //上一页
$nextpg = ($page < $lastpg)?$page+1:$page; //下一页

$firstcount = ($page-1)*$pagesize; //每页第一条记录的指针,默认从0开始
if($firstcount <= 0) $firstcount = 0;

$pagenav = "共 ".$lastpg." 页 ";
$pagenav .= "<a href='$url=1'>首页</a>";
if($page <= 1)
{
$pagenav .= " 上页";
}
else
{
$pagenav .= " <a href='$url=$prepg'>上页</a>";
}

if($page >= $lastpg)
{
$pagenav .= " 下页";
}
else
{
$pagenav .= " <a href='$url=$nextpg'>下页</a>";
}
$pagenav .= " <a href='$url=$lastpg'>尾页</a>";
$pagenav .= " 当前第 ".$page." 页";
$pagenav .= "<br>";
return $pagenav;
}

/**
*函数名:_get_url
*作用:返回页面完整的URL值,即从根目录起,不包含URL最后面的#fragment
*/
function _get_url()
{
global $page;
$url = $_SERVER["REQUEST_URI"]; //获取URL地址
$url_path = parse_url($url,PHP_URL_PATH); //获取文件路径
$url_query = parse_url($url,PHP_URL_QUERY); //获取URL中?号后面的信息,相当于查询字符串
echo $url;
echo "<hr>";
echo $url_path;
echo "<hr>";
echo $url_query;
echo "<hr>";
if($page) //点击分页后
{
$url_query = ereg_replace("page=$page", "page", $url_query); //用空格替换掉&page=页数 或 page=页数
}
else //默认打开页面时
{
$url_query = "page";
$page = 1; //默认是第一页
}
$url = $url_path;
if($url_query)
{
$url .= "?".$url_query;
}
return $url;
}
CloseDatabase(); //关闭数据库
?>
data.sql
--创建数据库page--
create database page;
use page;
-- 表的结构 `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 ;

--
-- 导出表中的数据 `test`
--

INSERT INTO `test` (`id`, `name`, `sex`) VALUES
(1, 'a', 'm'),
(2, 'b', 'w'),
(3, 'c', 'm'),
(4, 'd', 'w'),
(5, 'e', 'm'),
(6, 'f', 'm'),
(7, 'g', 'm'),
(8, 'h', 'w'),
(9, 'i', 'm'),
(10, 'j', 'm');
...全文
145 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
heiky 2011-04-10
  • 打赏
  • 举报
回复
收藏一下,留着用
海边的嘉楠 2011-04-09
  • 打赏
  • 举报
回复
测试了下,这个代码不错
lijpwsw 2011-04-09
  • 打赏
  • 举报
回复
看看山观观海 2011-04-07
  • 打赏
  • 举报
回复
不错,值得学习。网上有好多例子,有的代码很不错的

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧