博客列表 >封装PDO预处理制作信息表格分页--2018年5月1日21时53分发布(27日作业)

封装PDO预处理制作信息表格分页--2018年5月1日21时53分发布(27日作业)

lilove的博客
lilove的博客原创
2018年05月01日 22:08:30778浏览

主题:

写一个分页函数,封装常用操作,分页显示一张人员信息表。

使用PDO技术编写代码,封装函数。并将性别值转化成字符串,实现下拉菜单跳转并高亮显示当前页码。

运行效果:

运行效果.png

PDO预处理函数(lib/func_pre_page.php):

<?php
/* 
 * 分页函数
 */

if (!function_exists('func_page'))
{
    function func_page ($pdo, $table, $page=1, $num=5)
    {
        //设置分页偏移量$offset及显示条数$num
        //计算偏移量公式
        $offset = ($page-1) * $num;
        //准备sql语句
        $sql = "SELECT * FROM {$table} LIMIT {$offset}, {$num};";
        //创建pdo预处理对象
        $stmt = $pdo->prepare($sql);    
        //执行查询操作
        $stmt->execute();
        $stmt->setFetchMode(PDO::FETCH_ASSOC);
        //定义结果集变量(数组)
        $rows = $stmt->fetchAll();
        
        //获取查询记录总行数
        $result = $pdo->query("SELECT COUNT(*) FROM {$table};");
        //定义结果行数变量
        $number = $result->fetch();
        //获取行数值
        $rowCount = $number[0];
        //计算页数值(只要结果有余数则增加一页)
        $pages = ceil($rowCount / $num);
        
        //返回当前的分页结果集和总页数
        return ['rows'=>$rows, 'pages'=>$pages];
    } 
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

分页表格文件(pages.php):

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>信息表格页面</title>
        <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.1.0/css/bootstrap.min.css"/>
        <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
        <script type="text/javascript" src="https://cdn.bootcss.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
        <style type="text/css">
            a:hover, .active {
                background-color:skyblue;
                color:white;
            }
            form {
                display:inline;
            }
        </style>
    </head>

    <body>
        <?php
        //加载函数文件
        require 'lib/func_pre_page.php';
        
        //连接数据库并创建PDO对象
        $pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root');
        //页面请求值判断
        $page = isset($_GET['p']) ? $_GET['p'] : 1;
        $num = 5;
        $table = 'staff';
        //调用分页函数
        $data = func_page ($pdo, $table, $page, $num);
        //当前分页数
        $rows = $data['rows'];
        //总页数
        $pages = $data['pages'];
        
        //上一页判断
        $page = ($page == 0) ? 1 : $page;
        //下一页判断
        $page = ($page > $pages) ? $pages : $page;
        ?>
        <h5 align="center">表格标题</h5>
        <table class="table table-bordered table-hover" style="max-width:80%;text-align:center;margin:10px auto;">  
            <tr>
                <th>ID</th>
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
                <th>工资</th>
            </tr>
            <?php foreach ($rows as $row): ?>
            <tr>
                <td><?php echo $row['staff_id']; ?></td>
                <td><?php echo $row['name']; ?></td>
                <td><?php echo $row['sex'] == 0 ? '男' : '女'; ?></td>
                <td><?php echo $row['age']; ?></td>
                <td><?php echo $row['salary']; ?></td>
            </tr>
            <?php endforeach; ?>
        </table>
        <div align="center">
            <!--判断如果是第一页就不显示上一页和首页-->
            <?php if($page != 1) : ?>
                <!--首页-->
                <a href="http://www.php.io/work/0427/pages.php?p=1">首页</a>
                <!--上一页-->
                <a href="http://www.php.io/work/0427/pages.php?p=<?php echo $page-1; ?>">上一页</a>
            <?php endif; ?>
            
            <!--循环生成中间页码-->
            <?php for($i=1; $i<=$pages; $i++) : ?>
            <a class="<?php if($page == $i) : ?><?php echo 'active'; ?><?php endif; ?>" href="http://www.php.io/work/0427/pages.php?p=<?php echo $i; ?>"><?php echo $i; ?></a>
            <?php endfor; ?>
            
            <!--如果到最后一页就不显示下一页和尾页-->
            <?php if ($page != $pages) : ?> 
                <!--下一页-->
                <a href="http://www.php.io/work/0427/pages.php?p=<?php echo $page+1; ?>">下一页</a>
                <!--尾页-->
                <a href="http://www.php.io/work/0427/pages.php?p=<?php echo $pages; ?>">尾页</a>
            <?php endif; ?>
            <!--选择页码跳转-->
            <form action="" method="get">
                <span>页码</span>
                <select name="p" id="p">
                    <?php for($i=1; $i<=$pages; $i++) : ?>
                        <option value="<?php echo $i; ?>" <?php if($i==$page) : ?><?php echo 'selected'; ?><?php endif ?>><?php echo $i; ?></option>
                    <?php endfor; ?>
                </select>
                <button class="btn btn-sm btn-primary">跳转</button>
            </form>
        </div>    
    </body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

总结:

参考老师mysqli源代码使用PDO技术编写代码,注意代码编写过程中混编时尽量不用花括号,改写复用函数时需要注意变量替代值后的业务逻辑。记得函数要返回结果。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议