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 "<tr>";
echo "<td>{$row['name']}</td>";
echo "<td>{$row['id']}</td>";
echo "<tr>";

}

简单阐述一下: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 "<pre>"; print_r($_SERVER);你就会找到PHP_SELF这个参数,   [PHP_SELF] => /666/page2.php 到这里缺传入页码,所以再拼接上就ok ,另外上一页和下一页也要拼接,最后输出即可
$page_banner = "<a href='".$_SEVER['PHP_SELF']."?p=".($page-1). "'>上一页</a>"

$page_banner .= "<a href='".$_SEVER['PHP_SELF']."?p=".($page+1)."'>上一页</a>"

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

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

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

$page_banner = "";
if($page>1){
    $page_banner.= "<a href='".$_SERVER['PHP_SELF']."?p=1'>首页</a>";
    $page_banner.= "<a href='".$_SERVER['PHP_SELF']."?p=".($page-1)."'>上一页</a>";
}
if($page<$total_pages){
    $page_banner.= "<a href='".$_SERVER['PHP_SELF']."?p=".($page+1)."'>下一页</a>";
    $page_banner.= "<a href='".$_SERVER['PHP_SELF']."?p=$total_pages'>尾页</a>";
}

分页完成后,显示页码,也就是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.= "<a href='".$_SERVER['PHP_SELF']."?p=".$i ."'>{$i}</a>";  //

}

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

下面是界面美化

<style>
    body{
        font-size:12px ;
        font-family:Verdana;
        width: 100%;
    }
    .page{
        text-align: center;
    }
    .page a {
        border: black 1px solid; text-decoration: none;
        padding: 2px 5px 2px 5px;
        margin: 2px;
    }
    .curr{
        border=blue;
        background-color: blue;
        padding: 5px;
        margin: 2px;
        color: white;
        /*font-weight: bold;*/

    }
    .disable{
        border: #eee 1px solid ;
        padding : 2px 5px 2px 5px ;
        margin: 2px;
        color: #ddddd8;
    }
    .page form{
        display: inline;
    }
    .content{
        height:300px;
    }

</style>

具体所有代码如下

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<style>
    body{
        font-size:12px ;
        font-family:Verdana;
        width: 100%;
    }
    .page{
        text-align: center;
    }
    .page a {
        border: black 1px solid; text-decoration: none;
        padding: 2px 5px 2px 5px;
        margin: 2px;
    }
    .curr{
        border=blue;
        background-color: blue;
        padding: 5px;
        margin: 2px;
        color: white;
        /*font-weight: bold;*/

    }
    .disable{
        border: #eee 1px solid ;
        padding : 2px 5px 2px 5px ;
        margin: 2px;
        color: #ddddd8;
    }
    .page form{
        display: inline;
    }
    .content{
        height:300px;
    }

</style>
<body>

</body>
</html>
<?php
//echo "<pre>";
//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 "<div class='content'>";
echo "<table border=1 cellpadding=0 width=40% align='center'>";
echo "<tr><td>ID</td><td>NAME</td></tr>";
while($row = mysqli_fetch_assoc($sql))
{
    echo "<tr>";
    echo "<td>{$row['name']}</td>";
    echo "<td>{$row['id']}</td>";
    echo "<tr>";


}
echo "</table>";
echo "</div>";
//释放结果,关闭链接
//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 = "<div class='page'>";
//计算偏移量
$pageoffset = ($showPage-1)/2;
if($page>1)
{
    $page_banner .="<a href='".$_SERVER['PHP_SELF']."?p=1'>首页</a>";
    $page_banner .="<a href='".$_SERVER['PHP_SELF']."?p=".($page-1)."'><上一页</a>";
}
else{
    $page_banner.="<span class = 'disable'>首页</span>";
    $page_banner.="<span class = 'disable'><上一页</span>";
}
初始化数据
$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.="<span class='curr'>{$i}</span>";
    } else {
        $page_banner .= "<a href='" . $_SERVER['PHP_SELF'] . "?p=" . $i . "'>{$i}</a>";
    }
}
//省略尾页
if($total_pages>$showPage&&$total_pages>$page+$pageoffset)
{
    $page_banner.="...";
}
if($page<$total_pages)
{

    $page_banner .="<a href='".$_SERVER['PHP_SELF']."?p=".($page+1)."'>>下一页</a>";
    $page_banner .="<a href='".$_SERVER['PHP_SELF']."?p=$total_pages'>尾页</a>";
}
else{
        $page_banner.="<span class = 'disable'>尾页</span>";
        $page_banner.="<span class = 'disable'>>下一页</span>";
    }

$page_banner .="共{$total_pages}页";
$page_banner.="<form action='page.php' method='get'>";
$page_banner.="到第<input type='text' size='2' name = 'p'>";
$page_banner.="<input type='submit' name='确定'>";
$page_banner.="</form></div>";
echo $page_banner;
?>
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 JavaScript 中实现分页效果可以使用 Ajax 技术向后端请求数据,然后通过 DOM 操作动态生成分页器和数据列表。而在 MySQL实现分页则可以使用 LIMIT 关键字和 OFFSET 参数。 下面是一个简单的示例: JavaScript代码: ```javascript function getResults(page) { $.ajax({ url: 'get_results.php', type: 'GET', data: {page: page}, success: function(response) { // 处理返回的数据 var results = response.results; var totalPages = response.totalPages; // 动态生成分页器和数据列表 // ... } }); } ``` PHP代码: ```php $perPage = 10; // 每页显示的记录数 $page = $_GET['page'] ?? 1; // 当前页码,默认为第一页 $offset = ($page - 1) * $perPage; // 计算偏移量 // 查询数据总数 $total = $pdo->query('SELECT COUNT(*) FROM table')->fetchColumn(); // 查询当前页的数据 $stmt = $pdo->prepare('SELECT * FROM table LIMIT :offset, :perPage'); $stmt->bindParam(':offset', $offset, PDO::PARAM_INT); $stmt->bindParam(':perPage', $perPage, PDO::PARAM_INT); $stmt->execute(); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); // 计算总页数 $totalPages = ceil($total / $perPage); // 返回数据 $response = ['results' => $data, 'totalPages' => $totalPages]; echo json_encode($response); ``` 其中,`$perPage` 表示每页显示的记录数,`$page` 表示当前页码,`$offset` 表示偏移量,`$total` 表示总记录数,`$totalPages` 表示总页数。在 SQL 查询中使用 `LIMIT` 和 `OFFSET` 可以限制返回的记录数和偏移量,从而实现分页效果

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值