我写的MySQL分页代码...

xhick 2003-07-22 03:57:11
上次硬盘坏以前写过一次,这次费了些时间,干脆保存到网上来好了!

<?php
## +----------------------------------------------------------------------+
## | MySQL分页代码 For PHP4 |
## +----------------------------------------------------------------------+
## |1. 下面的代码是作者按PEAR规范针对MySQL设计,只要你使用的数据库支持SQL |
## | 语句的Limit选项,稍微改动一下就可以适应其他数据库。 |
## |2. 为了简化,作者忽略了数据库表中没有数据和浏览用户输入$start_record |
## | 的值的情况。 |
## |3.这里没有写完整的html代码一般不影响运行,作者建议使用时补充完整 |
## | 作者:Hick |
## | Email:hick@163.com |
## +----------------------------------------------------------------------+
$host = "localhost";
//连接的主机
$user = "hick";
//数据库服务器用户名
$password = "hick";
//数据库服务器用户密码
$db_name = "test";
//要操作的数据库名
$table_name = "test";
//要操作的数据表名
$page_size = 5;
//一个页面显示的记录数
$con_db = @mysql_connect($host, $user, $password) or die("无法连接数据库服务器");
//连接数据库
$start_record = (strlen($_GET[start_record]) == 0)?0:$_GET[start_record];
//确定当前页开始记录数
$sql = "select * from $table_name";
//为获得总共的记录数而定义SQL语句
$result = @mysql_db_query($db_name, $sql, $con_db) or die("数据库或表不存在");
//提交SQL语句
$record_number = @mysql_num_rows($result);
//获得总的记录数
$page_number = ceil($record_number/$page_size);
//总的页数
$now_page = $start_record/$page_size+1;
//当前的页数
$sql = "select * from $table_name limit $start_record,$page_size;";
//显示数据用的SQL语句
$result = @mysql_query($sql,$con_db) or die("无法查询数据库");
//提交查询语句
while($row = mysql_fetch_array($result)){
//利用一个循环读取记录,这里假
echo "ID: ".$row[ID]." Name: ".$row[name]."<br>";
//定数据表中有ID和name两个字段
}
mysql_close($con_db);
//关闭数据库连接
echo "总共[$page_number]页,当前第[$now_page]页";
//显示总页数和当前页数
if ($page_number>1 and $start_record != 0) {
//下面两个if语句决定"首页,上页,下页,末页"的显示
$pre_page = $start_record - $page_size;
echo "[<a href=$PHP_SELF?start_record=0>首页</a>]";
echo "[<a href=$PHP_SELF?start_record=$pre_page>上页</a>]";
}
if ($page_number>1 and $start_record != ($page_number - 1)*$page_size) {
$next_page = $start_record + $page_size;
$last_page = ($page_number - 1)*$page_size;
echo "[<a href=$PHP_SELF?start_record=$next_page>下页</a>]";
echo "[<a href=$PHP_SELF?start_record=$last_page>末页</a>]";
}
?>

...全文
50 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
blueoxygen 2003-08-29
  • 打赏
  • 举报
回复
不错,收藏啦
arcow 2003-08-29
  • 打赏
  • 举报
回复
ustb 2003-08-29
  • 打赏
  • 举报
回复
最好还有转到多少页
maxid 2003-08-29
  • 打赏
  • 举报
回复
加油吧
bluemeteor 2003-08-29
  • 打赏
  • 举报
回复
干吗不写成个类呢?

再帖:)

<?php
/*---------------------------------
翻页类
@b.j
@ bijing@hbpcc.net
-----------------------------------*/
class page{
var $Begin_Rec; //SQL中起始记录数 e.g : "limit $Begin_Rec,$..."
var $Page_Recs; //每页显示记录数
var $Page_Num; //当前页数
var $Page_Url; //连接地址
var $Page_Count; //总页数
var $Rec_Count; //总记录数
var $Show_Num; //阿拉伯数字显示

var $first="首页";
var $prev="上页";
var $next="下页";
var $last="尾页";
var $Page_Para="page"; //页面传递参数的名字

//构造函数
//参数说明
//Url: 获得页面连接
//pagesize: 获得页面内显示的记录数(满多少条记录即翻页的条件)
//page: :) 当前页数
//count:记录数量
//shownumber:是否显示 阿拉伯数字代表的页数 传递5 则显示5个阿拉伯数字(1-5),(6-10) 传递0时为不显示阿拉伯数字 目前测试使用为5
function page($Url,$pagesize,$page,$count,$shownumber=5)
{
if ($pagesize>=1)
{
$this->Page_Recs=round($pagesize);
}else
{
$this->Page_Recs=5;//如果非法的页面大小则每页显示记录数为5
}

if (empty($Url))
{
$this->Page_Url="$"."PHP_SELF";//如果空的Url则指向$PHP_SELF
}else
{
$this->Page_Url=$Url;
}

if ($page>=1)
{
$this->Page_Num=round($page);
}else
{
$this->Page_Num=1;//如果非法的页面数则指向$first
}

if ($count>=1)
{
$this->Rec_Count=round($count);
}else
{
$this->Rec_Count=0;//如果非法的记录数则记录数为0
$this->print_page();
}
if ($shownumber>=0) $this->Show_Num=round($shownumber);
$this->Calc();
}
//计算函数
function Calc()
{
//计算当前页面的起始页
$this->Page_Count=ceil($this->Rec_Count/$this->Page_Recs);
if ($this->Page_Num>$this->Page_Count) $this->Page_Num=$this->Page_Count;
$this->Begin_Rec=($this->Page_Num-1)*$this->Page_Recs;

//判断Url中是否包含?如果有则后加"&" 否则加"?"
$this->Page_Url.=(strpos($this->Page_Url,"?")>1)?"&":"?";

}
//输出函数
/* 输出格式 | 首页 | 上页| 1 2 | 下页 | 尾页 转到 input here 页 共 xx 条记录 第 x 页/总 x 页*/
function print_page()
{
if ($this->Rec_Count<1)
{
echo "无符合条件记录";
}else
{
$Print_Str="<form method=\"post\" action=$this->Page_Url name=\"goto\">";
if ($this->Page_Num>1)
{
$Prev_Page=$this->Page_Num-1;
$Print_Str.="   | <a href=\"$this->Page_Url$this->Page_Para=1\">$this->first</a> | <a href=\"$this->Page_Url$this->Page_Para=$Prev_Page\">$this->prev</a>";
}else
{
$Print_Str.="   | $this->first | $this->prev";
}
/*--阿拉伯字母连接显示--*/
if ($this->Show_Num>0)//如果传递参数为0则不显示阿拉伯字母
{
$Print_Str.="|";
for ($i=$this->Page_Num-1;$i<=$this->Page_Count;$i++)
{
if ($i<1) continue;
if (($i-$this->Page_Num+1)>=$this->Show_Num) break;
$Print_Str.=" <A href=\"$this->Page_Url$this->Page_Para=$i\">$i</a>";
}
}
/*--阿拉伯字母连接显示结束--*/

if ($this->Page_Num<$this->Page_Count)
{
$Next_Page=$this->Page_Num+1;
$Print_Str.=" | <a href=\"$this->Page_Url$this->Page_Para=$Next_Page\">$this->next</a> | <a href=\"$this->Page_Url$this->Page_Para=$this->Page_Count\">$this->last</a> ";
}else
{
$Print_Str.=" $this->next 1 $this->last ";
}
$Print_Str.="转到<input type=\"text\" name=\"$this->Page_Para\" maxlength=\"3\" size=\"2\" >页";

$Print_Str.="<input name=\"Submit\" type=\"submit\" value=\"GO\" align=\"middle\" width=\"12\" height=\"15\">";

$Print_Str.=" 共 $this->Rec_Count 条记录 第 $this->Page_Num 页/总 $this->Page_Count 页</form>";

echo $Print_Str;
}
}
//打印函数结束
/*--------------使用范例---------
@// 记得要引用先!
$Page_Over=new page("127.0.0.1/display.php",12,2,55,6);

$Sql_Tmp="select * from tableA"

$start=$Page_Over->Begin_Rec;

$Sql_Tmp.=" limit $start,12";

$Page_Over->print_page;//即可输出


--------------使用范例over-----------*/
}
?>

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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