PHP+MYSQL实现分页效果

实现原理第三大步

第一步:传入页码

第二步:根据页码取出数据

第三步:显示数据+分页条

第一步传入页码:$page = $_GET['p'];   这一步传入的页码,在浏览器中?p = 几页

第二步:根据页码取出数据,也就是PHP与mysql的一些操作

连接数据库:$link = mysqli_connect(主机名,用户名,密码,数据库) 这里加一个是否连接成功的判断if(!$link).....

查询数据库:编写sql获取分页数据,select * fron page limit 起始位置,显示条数

$sql = mysqli_query($link,“Select * from page limit" . ($page-1)*$pageSize .",$pageSize")

把SQL语句传送到数据库,进行读取数据

 

while($row = mysqli_fetch_assoc($sql)){  //得到的是关联数组,一一对应的关系

echo "";
echo "{$row['name']}";
echo "{$row['id']}";
echo "";

}

简单阐述一下:mysql --------php  

比如PHP要写一封信给mysql  首先得保证线路通畅,也就是连接正常 $link....  连接正常以后,PHP开始写内容$sql...

道路通畅,内容写好,那下一步就是将内容($sql)发送给mysql 

mysqli_fetch_assoc($sql) ,用$row这个变量来接受结果集, 如果接收到了,说明while循环的条件为真,while(true),开始执行循环里面的语句

连接成功数据库以后,释放结果,关闭连接(可有可无,不会影响程序正常运行)

但是在关闭连接的之前要先计算总页数

$totle_sql = mysqli_query($link,"select count (*) from page");

$totle_result = mysql_fetch_array($totle_sql) //得到的即可以是关联数组,也可以是索引数组,因为这里要查的总页数就一条记录,所以用索引数组

$totle = $totle_result[0]; //得到有多少条数据

$totle_page = ceil($totle/10);向上取整,一页十个数据,这样就这道有多少页了

第三步,显示数据+分页条

先来看一个最简单的分页条 只有上一页,下一页

完成上一页,下一页的跳转,用a链接完成 ,内置函数 $_SERVER 的作用:跳转到当前正在执行的文件的脚本名,

输出这两行代码echo "
"; print_r($_SERVER);你就会找到PHP_SELF这个参数,   [PHP_SELF] => /666/page2.php 到这里缺传入页码,所以再拼接上就ok ,另外上一页和下一页也要拼接,最后输出即可
$page_banner = "上一页"

$page_banner .= "上一页"

写完简单的分页,再加个首页和尾页,具体思路如下:

当前页大于一,那么显示首页和下一页,首页就是p=1 下一页就是($page+1)

当前页小于总页数,那么显示尾页和上一页,尾页就是p=总页数 上一页就是($page-1)

$page_banner = "";
if($page>1){
    $page_banner.= "首页";
    $page_banner.= "上一页";
}
if($page<$total_pages){
    $page_banner.= "下一页";
    $page_banner.= "尾页";
}

分页完成后,显示页码,也就是1,2,3,4,5...     ...34567...   ...7891011  这三种情况 再加上偏移量

显示页码之前,先把逻辑该清楚,

//初始化数据
$start = 1;
$end = $total_pages;
if($total_pages>$showPage)
{
    if($page>$offsetpage&+1){
        $page_banner.="...";
    }
    if($page>$offsetpage)
    {
        $start = $page-$offsetpage;
        $end = $total_pages>$page+$offsetpage?$page+$offsetpage:$total_pages;

    }
    else{
        $start = 1;  //两个的起始页都是1,$page =1 当前页为1  $page=2 当前页为2
        $end = $total_pages>$showPage?$showPage:$total_pages;  //显示少的
    }
    if($page+$offsetpage>$total_pages){
        $start = $start-($page+$offsetpage-$end); //自己再捋一捋

    }

}//以上是逻辑部分,下面是实现部分
for($i=$start ;$i<$end; $i++)
{
    $page_banner.= "{$i}";  //

}

if($total_pages>$showPage&&$total_pages>$page+$offsetpage){
    $page_banner.="...";
}

下面是界面美化

具体所有代码如下




    
    
    
    Document






";
//print_r($_SERVER);
//1传入页码
$page = $_GET['p'];
//2根据页码取出数据,php-》mysql
$host="127.0.0.1";
$username="root";
$password="";
$db="test";
$pageSize = 10;
$showPage = 5; //显示页码
//链接数据库
$link = mysqli_connect($host,$username,$password,$db);
if(!$link)
{
    echo "数据库连接失败";
    exit;
}
//选择所要操作的数据库
//mysqli_select_db($db);
//设置数据库编码格式
//mysqli_query("SET NANES UTF8");
//编写sql获取分页数据SELECT *FROM 表明LIMIT起始位置,显示条数
$sql = mysqli_query($link,"SELECT * FROM page LIMIT " .($page -1)*$pageSize .",$pageSize");
//把sql语句传送到数据库
//处理我们的数据
echo "
"; echo ""; echo ""; while($row = mysqli_fetch_assoc($sql)) { echo ""; echo ""; echo ""; echo ""; } echo "
IDNAME
{$row['name']}{$row['id']}
"; echo "
"; //释放结果,关闭链接 //mysqli_free_result($sql); //在关闭数据库之前,要获取数据库总数,并且计算总页数 $total_sql = mysqli_query($link,"SELECT COUNT(*)FROM page"); $total_result = mysqli_fetch_array($total_sql); $total=$total_result[0]; $total_pages = ceil($total/10); //向上取整 mysqli_close($link); 计算页数 //3:显示数据+分页条 $page_banner = "
"; //计算偏移量 $pageoffset = ($showPage-1)/2; if($page>1) { $page_banner .="首页"; $page_banner .="<上一页"; } else{ $page_banner.="首页"; $page_banner.="<上一页"; } 初始化数据 $start = 1 ; $end = $total_pages; if($total_pages>$showPage) { if($page>$pageoffset) { $page_banner.="..."; } if($page>$pageoffset+1){ $start = $page - $pageoffset; $end =$total_pages>$page+$pageoffset?$page+$pageoffset:$total_pages; }else{ $start=1; $end = $total_pages>$showPage?$showPage:$total_pages; } if($page+$pageoffset>$total_pages) { $start = $start - ($page+$pageoffset-$end); } } for($i=$start;$i<=$end;$i++) { if ($page == $i) { $page_banner.="{$i}"; } else { $page_banner .= "{$i}"; } } //省略尾页 if($total_pages>$showPage&&$total_pages>$page+$pageoffset) { $page_banner.="..."; } if($page<$total_pages) { $page_banner .=">下一页"; $page_banner .="尾页"; } else{ $page_banner.="尾页"; $page_banner.=">下一页"; } $page_banner .="共{$total_pages}页"; $page_banner.="
"; $page_banner.="到第"; $page_banner.=""; $page_banner.="
"; echo $page_banner; ?>

你可能感兴趣的:(PHP+MYSQL实现分页效果)