重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
我这个好用一点,可以直接加在最前面,有两个变量从页面GET的来。
创新互联公司长期为上千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为苍南企业提供专业的做网站、成都网站建设,苍南网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。
可如下引用:
echo yemiandaohang("thispage.php?",$num,$perpage,$page);
参数说明:
1、连接文档及其他的在网页中需用到的GET变量
2、查询结果的总数,仁兄的网页中若使用,此值可为:$num
3、每页显示个数,此处设置默认为10个,并可以从网页GET变量来改变
4、当前页编号。
///////////////////////////////////////////设置分页显示///////////////////////////////////////////////////
//设置每页显示个数
if($_REQUEST[perpage]){
$perpage=$_REQUEST[perpage];
}
else{
$perpage=20;
}
//设置当前页
if($_REQUEST[page]){
$page=$_REQUEST[page];
}
else{
$page=1;
}
function yemiandaohang($web_,$count_,$per_page_=10,$page_no_=1){
$page_count_=ceil($count_/$per_page_);//计算页数
if($page_no_==1){//设置前导连接
$title_s_="首页 | 上一页 | ";
}
else{
$title_s_="a href=\"".$web_."page=1perpage=".$per_page_."\"首页/a | a href=\"".$web_."page=".($page_no_-1)."perpage=".$per_page_."\"上一页/a|";
}
if($page_no_==$page_count_){//设置后导连接
$title_e_="下一页 | 尾页";
}
else{
$title_e_="ba href=\"".$web_."page=".($page_no_+1)."perpage=".$per_page_."\"下一页/a/b | a href=\"".$web_."perpage=".$per_page_."page=".$page_count_."\"尾页/a/b";
}
//设置数字连接
$title_m_="";
for($x=1;$x=$page_count_;$x++){
if($x==$page_no_){
$title_m_=$title_m_.$x." | ";
}
else{
$title_m_=$title_m_."a href=\"".$web_."page=".$x."perpage=".$per_page_."\"".$x."/a | ";
}
}
$title_=$title_s_.$title_m_.$title_e_."(每页".$per_page_."条,共".$page_count_."页".$count_."条,现在显示第".$page_no_."页)";
return $title_;//返回页面导航字符
}
///////////////////////////////////////////设置分页显示结束///////////////////////////////////////////////
另外,查询语句前要定义一个$startrecord,分页查询要用到;在查询语句里面最后需要加上 limit $startrecord,$perpage 以确定查询的数据的开始和个数
这是我自己写的,可以访问下面的示例:里面有两处引用
前言
分页显示是一种非常常见的浏览和显示大量数据的方法 属于web编程中最常处理的事件之一 对于web编程的老手来说 编写这种代码实在是和呼吸一样自然 但是对于初学者来说 常常对这个问题摸不著头绪 因此特地撰写此文对这个问题进行详细的讲解 力求让看完这篇文章的朋友在看完以后对于分页显示的原理和实现方法有所了解 本文适合初学者阅读 所有示例代码均使用php编写
原理
所谓分页显示 也就是将数据库中的结果集人为的分成一段一段的来显示 这里需要两个初始的参数
每页多少条记录($PageSize)?
当前是第几页($CurrentPageID)?
现在只要再给我一个结果集 我就可以显示某段特定的结果出来
至于其他的参数 比如 上一页($PReviousPageID) 下一页($NextPageID) 总页数($numPages)等等 都可以根据前边这几个东西得到
以MySQL数据库为例 如果要从表内截取某段内容 sql语句可以用 select * from table limit offset rows 看看下面一组sql语句 尝试一下发现其中的规率
前 条记录 select * from table limit
第 至 条记录 select * from table limit
第 至 条记录 select * from table limit
……
这一组sql语句其实就是当$PageSize= 的时候取表内每一页数据的sql语句 我们可以总结出这样一个模板
select * from table limit ($CurrentPageID ) * $PageSize $PageSize
拿这个模板代入对应的值和上边那一组sql语句对照一下看看是不是那么回事 搞定了最重要的如何获取数据的问题以后 剩下的就仅仅是传递参数 构造合适的sql语句然后使用php从数据库内获取数据并显示了 以下我将用具体代码加以说明
简单代码
请详细阅读以下代码 自己调试运行一次 最好把它修改一次 加上自己的功能 比如搜索等等
?php
// 建立数据库连接
$link = mysql_connect("localhost", "mysql_user", "mysql_passWord")
or die("Could not connect: " . mysql_error());
// 获取当前页数
if( isset($_GET['page']) ){
$page = intval( $_GET['page'] );
}
else{
$page = 1;
}
// 每页数量
$PageSize = 10;
// 获取总数据量
$sql = "select count(*) as amount from table";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
$amount = $row['amount'];
// 记算总共有多少页
if( $amount ){
if( $amount $page_size ){ $page_count = 1; } //如果总数据量小于$PageSize,那么只有一页
if( $amount % $page_size ){ //取总数据量除以每页数的余数
$page_count = (int)($amount / $page_size) + 1; //如果有余数,则页数等于总数据量除以每页数的结果取整再加一
}else{
$page_count = $amount / $page_size; //如果没有余数,则页数等于总数据量除以每页数的结果
}
}
else{
$page_count = 0;
}
// 翻页链接
$page_string = '';
if( $page == 1 ){
$page_string .= '第一页|上一页|';
}
else{
$page_string .= 'a href=?page=1第一页/a|a .($page-1).'上一页/a|'; }
if( ($page == $page_count) || ($page_count == 0) ){
$page_string .= '下一页|尾页';
}
else{
$page_string .= 'a .($page+1).'下一页/a|a .$page_count.'尾页/a'; }
// 获取数据,以二维数组格式返回结果
if( $amount ){
$sql = "select * from table order by id desc limit ". ($page-1)*$page_size .", $page_size";
$result = mysql_query($sql);
while ( $row = mysql_fetch_row($result) ){
$rowset[] = $row;
}
}else{
$rowset = array();
}
// 没有包含显示结果的代码,那不在讨论范围,只要用foreach就可以很简单的用得到的二维数组来显示结果
?
4、OO风格代码
以下代码中的数据库连接是使用的pear db类进行处理
?php
// FileName: Pager.class.php
// 分页类,这个类仅仅用于处理数据结构,不负责处理显示的工作
Class Pager
{
var $PageSize; //每页的数量
var $CurrentPageID; //当前的页数
var $NextPageID; //下一页
var $PreviousPageID; //上一页
var $numPages; //总页数
var $numItems; //总记录数
var $isFirstPage; //是否第一页
var $isLastPage; //是否最后一页
var $sql; //sql查询语句
function Pager($option)
{
global $db;
$this-_setOptions($option);
// 总条数
if ( !isset($this-numItems) )
{
$res = $db-query($this-sql);
$this-numItems = $res-numRows();
}
// 总页数
if ( $this-numItems 0 )
{
if ( $this-numItems $this-PageSize ){ $this-numPages = 1; }
if ( $this-numItems % $this-PageSize )
{
$this-numPages= (int)($this-numItems / $this-PageSize) + 1;
}
else
{
$this-numPages = $this-numItems / $this-PageSize;
}
}
else
{
$this-numPages = 0;
}
switch ( $this-CurrentPageID )
{
case $this-numPages == 1:
$this-isFirstPage = true;
$this-isLastPage = true;
break;
case 1:
$this-isFirstPage = true;
$this-isLastPage = false;
break;
case $this-numPages:
$this-isFirstPage = false;
$this-isLastPage = true;
break;
default:
$this-isFirstPage = false;
$this-isLastPage = false;
}
if ( $this-numPages 1 )
{
if ( !$this-isLastPage ) { $this-NextPageID = $this-CurrentPageID + 1; }
if ( !$this-isFirstPage ) { $this-PreviousPageID = $this-CurrentPageID - 1; }
}
return true;
}
/***
*
* 返回结果集的数据库连接
* 在结果集比较大的时候可以直接使用这个方法获得数据库连接,然后在类之外遍历,这样开销较小
* 如果结果集不是很大,可以直接使用getPageData的方式获取二维数组格式的结果
* getPageData方法也是调用本方法来获取结果的
*
***/
function getDataLink()
{
if ( $this-numItems )
{
global $db;
$PageID = $this-CurrentPageID;
$from = ($PageID - 1)*$this-PageSize;
$count = $this-PageSize;
$link = $db-limitQuery($this-sql, $from, $count); //使用Pear DB::limitQuery方法保证数据库兼容性
return $link;
}
else
{
return false;
}
}
/***
*
* 以二维数组的格式返回结果集
*
***/
function getPageData()
{
if ( $this-numItems )
{
if ( $res = $this-getDataLink() )
{
if ( $res-numRows() )
{
while ( $row = $res-fetchRow() )
{
$result[] = $row;
}
}
else
{
$result = array();
}
return $result;
}
else
{
return false;
}
}
else
{
return false;
}
}
function _setOptions($option)
{
$allow_options = array(
'PageSize',
'CurrentPageID',
'sql',
'numItems'
);
foreach ( $option as $key = $value )
{
if ( in_array($key, $allow_options) ($value != null) )
{
$this-$key = $value;
}
}
return true;
}
}
?
?php
// FileName: test_pager.php
// 这是一段简单的示例代码,前边省略了使用pear db类建立数据库连接的代码
require "Pager.class.php";
if ( isset($_GET['page']) )
{
$page = (int)$_GET['page'];
}
else
{
$page = 1;
}
$sql = "select * from table order by id";
$pager_option = array(
"sql" = $sql,
"PageSize" = 10,
"CurrentPageID" = $page
);
if ( isset($_GET['numItems']) )
{
$pager_option['numItems'] = (int)$_GET['numItems'];
}
$pager = @new Pager($pager_option);
$data = $pager-getPageData();
if ( $pager-isFirstPage )
{
$turnover = "首页|上一页|";
}
else
{
$turnover = "a ?page=1numItems=".$pager-numItems."'首页/a|a ?page=".$pager-PreviousPageID."numItems=".$pager-numItems."'上一页/a|"; }
if ( $pager-isLastPage )
{
$turnover .= "下一页|尾页";
}
else
{
$turnover .="a ?page=".$pager-NextPageID."numItems=".$pager-numItems."'下一页/a|a ?page=".$pager-numPages."numItems=".$pager-numItems."'尾页/a"; }
?
需要说明的地方有两个:
这个类仅仅处理数据,并不负责处理显示,因为我觉得将数据的处理和结果的显示都放到一个类里边实在是有些勉强。Tw.wINgWIT显示的时候情况和要求多变,不如自己根据类给出的结果处理,更好的方法是根据这个Pager类继承一个自己的子类来显示不同的分页,比如显示用户分页列表可以:
?php
Class MemberPager extends Pager
{
function showMemberList()
{
global $db;
$data = $this-getPageData();
// 显示结果的代码
// ......
}
}
/// 调用
if ( isset($_GET['page']) )
{
$page = (int)$_GET['page'];
}
else
{
$page = 1;
}
$sql = "select * from members order by id";
$pager_option = array(
"sql" = $sql,
"PageSize" = 10,
"CurrentPageID" = $page
);
if ( isset($_GET['numItems']) )
{
$pager_option['numItems'] = (int)$_GET['numItems'];
}
$pager = @new MemberPager($pager_option);
$pager-showMemberList();
?
第二个需要说明的地方就是不同数据库的兼容性,在不同的数据库里截获一段结果的写法是不一样的。
mysql: select * from table limit offset, rows
pgsql: select * from table limit m offset n
......
lishixinzhi/Article/program/PHP/201311/21304
信息太少 只能写下面一部分
将while里面改一下即可
?php
$page_size=20;//每页信息条数
//解析URL
$url=$_SERVER["REQUEST_URL"];
$url=parse_url($url);
$url=$url[path];
$numq=mysql_query("SELECT * FROM `表名`");
$num=mysql_num_rows($numq);
$page_first=1;
$page_last=ceil($num/$page_size);//获得总页数 也就是最后一页的数值
if ($_GET[page]=1){
$page_num=$_GET[page];
$page_nums=($page_num-1)*$page_size;
}else{
$page_num=1;
$page_nums=($page_num-1)*$page_size;
}
echo $num."条记录,共".$page_last."页"."====bbig这是第".$page_num."页/big/b"."br";
for($i=1;$i=$page_last;$i++){
echo "a href=$url2?page=".($page_num+$i-1).""."第".($page_num+$i-1)."页 "."/a";
}
$sql="SELECT * FROM `表名` limit $page_nums,$page_size";
$query=mysql_query($sql);
echo "table border=1tr th姓名/thth姓别/th/tr";
while($row=mysql_fetch_array($query)){
echo "tr td";
echo $row[name];
echo "/td";
echo "td";
echo $row[sex];
echo "/td/tr";
}
echo "/table";
?
?php
$mysql_server_name="localhost";
$mysql_username='root';
$mysql_password='';
$mysql_database='hp';
$conn=mysql_connect($mysql_server_name,$mysql_username,$mysql_password);
@mysql_connect("localhost","root","") or die("数据库连接失败");
@mysql_select_db("hp") or die("数据库不存在");
mysql_query("set names utf8");
$pagesize = $_GET['pagesize'] 0 ? $_GET['pagesize'] : 10; //默认情况下每页显示10条数据
$pagenum = $_GET['pagenum'] 0 ? $_GET['pagenum'] : 0;
$query_start = $pagesize * $pagenum;
if($_POST['submit']){
$strsql_add = '';
$strsql_add .=$_POST['idc'] ? " and idc='$_POST[idc]' ":"";
$strsql_add .=$_POST['jiguihao'] ? " and jiguihao='$_POST[jiguihao]' ":"";
$strsql_add .=$_POST['neicun'] ? " and neicun='$_POST[neicun]' ":"";
$strsql_add .=$_POST['yingpan'] ? " and yingpan='$_POST[yingpan]' ":"";
$strsql_add .=$_POST['xinghao'] ? " and xinghao='$_POST[xinghao]' ":"";
$strsql_add .=$_POST['cpu'] ? " and cpu='$_POST[cpu]' ":"";
$strsql_add .=$_POST['guishu'] ? " and guishu='$_POST[guishu]' ":"";
$strsql_add .=$_POST['ip'] ? " and ip='$_POST[ip]' ":"";
}
$strsql="select * from zichan where 1=1 $strsql_add limit $query_start, $pagesize";
$result=mysql_db_query($mysql_database,$strsql,$conn);
$row=mysql_fetch_row($result);
$nextpage_num = $pagenum++;
$lastpage_num = ceil(count($row)/$pagesize);
echo 'font face="verdana"';
echo 'table border="1" cellpadding="1" cellspacing="2"';
// 显示字段名称
echo "/btr/b";
for ($i=0; $imysql_num_fields($result); $i++)
{
echo 'td bgcolor="#00FF00"b'.
mysql_field_name($result, $i);
echo "/b/td/b";
}
echo "/tr/b";
// 定位到第一条记录
mysql_data_seek($result, 0);
// 循环取出记录
while ($row=mysql_fetch_row($result))
{
echo "tr/b";
for ($i=0; $imysql_num_fields($result); $i++ )
{
echo 'td bgcolor="#00FF00"';
echo $row[$i];
echo '/td';
}
echo 'tda href=\'xiugai.php?id='.$row[0].'\'修改/a';
echo '/td';
echo 'tda href="javascript:void(0)" onclick="if(window.confirm(\'确认删除?\')){window.location.href=\'del.php?id='.$row[0].'\'}"删除/a';
echo '/td';
echo "/tr/b";
}
echo "/table/b";
echo "/font";
// 释放资源
mysql_free_result($result);
// 关闭连接
mysql_close($conn);
?
html页面要增加的参数:
首页 增加 pagenum=0 或者 不加
下一页 pagenum= $nextpage_num
尾页 pagenum= $lastpage_num