zoukankan      html  css  js  c++  java
  • PHP+mysql数据库简单分页实例-sql分页

    前几天冷月写了一篇博文《php基础编程-php连接mysql数据库-mysqli的简单使用》,很多小伙伴在学习后都知道了php与mysql数据库的连接,今天冷月分享一个简单的分页实例

    首先,我们来看一下效果:

    这个案例其实很简单,那么,我们如何确定当前页所需要的数据是哪些呢?主要用到的核心sql语句就是:

    SELECT * FROM 表名 LIMIT 起始位置,显示条数
    

    我们应该在url后面采用GET的方式传递一个page的参数,比如:
    http:// page.php?p=1

    然后用$_GET['p']来接收到,这样我们就拿到了当前的页面。然后我们要定义一个常量来保存一页显示的条数。这样,我们就能够凭借起始位置,显示条数来获取数据了。

    示例代码如下:

    /**
     * Created by 冷月小白.
     * 微信公众号: 学长冷月
    
     */
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    </head>
    <style>
        div.page{
            text-align: center;
        }
        div.content {
            height: 300px;
        }
        div.page a{
            border: 1px solid #aaaadd;
            text-decoration: none;
            padding: 2px 5px 2px 5px;
            margin: 2px;
        }
        div.page span.current{
            border: 1px solid #000099;
            background-color: #000099;
            padding: 4px 6px 4px 6px;
            margin: 2px;
            color: #ffffff;
            font-weight: bold;
        }
        div.page span.disable{
            border: 1px solid #eeeeee;
            padding: 2px 5px 2px 5px;
            margin: 2px;
            color: #dddddd;
        }
        div.page form{
            display: inline;
        }
    </style>
    <body>
    
    <?php
    
    
    /*1.传入页码*/
    $page = $_GET['p'];
    
    /*2.根据页码取出数据, php -> mysql*/
    $host = "localhost";
    $username = "root";
    $password = "123456";
    $db = "page";
    $pageSize = 3;
    
    $showPage = 5;
    
    //连接数据库
    $conn = mysqli_connect($host, $username, $password, $db);
    if (!$conn) {
        var_dump("连接失败");
    }
    
    //设置数据库的编码格式,防止乱码
    mysqli_query($conn, "SET NAMES UTF8");
    
    //编写sql获取分页数据 SELECT * FROM 表名 LIMIT 起始位置,显示条数
    $sql = "SELECT * FROM test LIMIT " . ($page - 1) * $pageSize . ",{$pageSize}";
    
    //把sql语句传送数据中
    $result = mysqli_query($conn, $sql);
    
    //处理数据
    echo "<div class='content'>";
    echo "<table border='1' cellspacing='0' width='40%' align='center'>";
    echo "<tr><td>ID</td><td>name</td></tr>";
    while ($row = mysqli_fetch_assoc($result)) {
        echo "<tr><td>{$row['id']}</td><td>{$row['name']}</td></tr>";
    }
    echo "</table></div>";
    
    //释放结果,关闭连接
    mysqli_free_result($result);
    
    //获取数据总数
    $total_sql = "SELECT COUNT(*) FROM test";
    $total_result = mysqli_fetch_assoc(mysqli_query($conn, $total_sql));
    $total = $total_result['COUNT(*)'];
    $total_page = ceil($total / $pageSize);
    
    mysqli_close($conn);
    
    //3.显示数据 + 分页条
    $page_banner = '<div class="page">';
    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_page; //结束页面
    $pageOffset = ($showPage - 1) / 2;
    if ($total_page > $showPage) {  //如果总页面大于显示的页面
        if ($page > $pageOffset + 1) { //如果当前页面大于偏移量
            $page_banner .= "...";
        }
        if ($page > $pageOffset) { //当前页大于偏移量
            $start = $page - $pageOffset;
            $end = $total_page > $page + $pageOffset ? $page + $pageOffset : $total_page;
        } else {
            $start = 1;
            $end = $total_page > $showPage ? $showPage : $total_page;
        }
        if ($page + $pageOffset > $total_page) {
            $start = $start - ($page + $pageOffset - $end);
        }
    }
    
    for ($i = $start; $i <= $end; $i++) {
        if ($page == $i){
            $page_banner .="<span class='current'>{$i}</span>";
        }else{
            $page_banner .= "<a href='" . "{$_SERVER['PHP_SELF']}?p={$i}" . "'>{$i}</a>";
    
        }
    }
    
    //尾部省略
    if ($total_page > $showPage && $total_page > $page + $pageOffset){
        $page_banner .= "...";
    }
    
    if ($page < $total_page) {
        $page_banner .= "<a href='" . "{$_SERVER['PHP_SELF']}?p=" . ($page + 1) . "'>下一页</a>";
        $page_banner .= "<a href='" . "{$_SERVER['PHP_SELF']}?p={$total_page}" . "'>尾页</a>";
    }else{
        $page_banner .= "<span class='disable'>下一页</span>";
        $page_banner .= "<span class='disable'>尾页</span>";
    }
    $page_banner .= "总页数{$total_page},";
    $page_banner .= "<form action='demo1.php' method='get'>";
    $page_banner .= "到第<input type='text' size='2' name='p'>页";
    $page_banner .= "<input type='submit' value='确定'>";
    $page_banner .= "</form></div>";
    
    
    
    echo $page_banner;
    ?>
    </body>
    
    </html>
    

    想要获取源文件的小伙伴可以关注冷月的微信公众号:学长冷月。回复:分页。冷月将会把整理好的文件发给您!

    欢迎关注我的公众号:学长冷月,获得独家整理的学习资源和日常干货推送。
    如果您对我的专题内容感兴趣,也可以关注我的博客:guoyu7.com

  • 相关阅读:
    适配器和外观模式
    命令模式
    单件模式
    工厂模式
    装饰者模式
    观察者模式(发布--订阅模式)
    设计模式之策略模式
    C#学习笔记15
    C#学习笔记14
    lucky的时光助理-2017.02
  • 原文地址:https://www.cnblogs.com/guoyugy/p/12324912.html
Copyright © 2011-2022 走看看