【问题标题】:Logic for turning this pagination script into search pagination script将此分页脚本转换为搜索分页脚本的逻辑
【发布时间】:2018-06-02 06:33:18
【问题描述】:

我刚刚花了一些时间制作以下教程(我将其转换为 PDO 而不是 mysqli): PHP + MySQL Pagination tutorial 看起来是这样的:

<html>
<head>
    <title>Pagination</title>
    <!-- Bootstrap CDN -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
    <?php

        if (isset($_GET['pageno'])) {
            $pageno = $_GET['pageno'];
        } else {
            $pageno = 1;
        }
        $no_of_records_per_page = 10;
        $offset = ($pageno-1) * $no_of_records_per_page;

        $conn=mysqli_connect("localhost","my_user","my_password","my_db");
        // Check connection
        if (mysqli_connect_errno()){
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
            die();
        }

        $total_pages_sql = "SELECT COUNT(*) FROM table";
        $result = mysqli_query($conn,$total_pages_sql);
        $total_rows = mysqli_fetch_array($result)[0];
        $total_pages = ceil($total_rows / $no_of_records_per_page);

        $sql = "SELECT * FROM table LIMIT $offset, $no_of_records_per_page";
        $res_data = mysqli_query($conn,$sql);
        while($row = mysqli_fetch_array($res_data)){
            //here goes the data
        }
        mysqli_close($conn);
    ?>
    <ul class="pagination">
        <li><a href="?pageno=1">First</a></li>
        <li class="<?php if($pageno <= 1){ echo 'disabled'; } ?>">
            <a href="<?php if($pageno <= 1){ echo '#'; } else { echo "?pageno=".($pageno - 1); } ?>">Prev</a>
        </li>
        <li class="<?php if($pageno >= $total_pages){ echo 'disabled'; } ?>">
            <a href="<?php if($pageno >= $total_pages){ echo '#'; } else { echo "?pageno=".($pageno + 1); } ?>">Next</a>
        </li>
        <li><a href="?pageno=<?php echo $total_pages; ?>">Last</a></li>
    </ul>
</body>
</html>

但是我遇到了一个问题:这个脚本只为已经预定义的 SQL 查询分页。但是,如果我想要一个“搜索”,其中分页脚本仅在用户点击“搜索”而不是使用“select *”的预定义查询后才开始工作,该怎么办?是否可以使用上述脚本或我需要更改它?

【问题讨论】:

    标签: php mysql pagination


    【解决方案1】:

    创建 HTML 表单,例如

    <form id="form" action="<?= $_SERVER['PHP_SELF'] ?>">
        <input type="text" name="search" value="<?= !empty($_GET['search']) ?
            htmlspecialchars($_GET['search']) : '' ?>">
        <input type="submit" value="Search">
        <input type="hidden" id="page" name="page" value="<?= !empty($_GET['page']) ?
            intval($_GET['page']) : '' ?>">
        <!-- add another fields here -->
    </form>
    ...
    <a href="" class="page">1</a>
    <a href="" class="page">2</a>
    

    并在脚本顶部添加:

    if (!empty($_GET['search']) { 
       // write SQL queries for pagination and other form processing logic here
    }
    

    要在 URL 中传递 page 参数,include jQuery 将以下代码添加到页面的 head 部分:

    $(document).ready(function(){
        $('.page').click(function(e) {
            e.preventDefault();
            $('#page').val($(this).html());
            $('#form').submit();
        });
    });
    

    此代码阻止链接的默认操作,将页面值设置为带有#page id 的表单输入并提交。

    【讨论】:

    • 我遇到了麻烦,因为当我提交表单时,搜索查询会覆盖分页脚本的?pageno=,而我只能在地址栏?search= 获得搜索查询它把一切都搞砸了。我不确定将您的代码放在哪里。我在原始问题中添加了脚本,所以也许你可以帮助我应该把代码放在哪里
    • 有几个变量未定义,分页简直坏掉了。不过,我仍在努力研究它
    • 也许没有 jquery 的解决方案?只有php?
    • 这里使用 jQuery 或者只使用 JavaScript 是更正确和简单的解决方案,@TTnote。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 2012-09-18
    • 2010-11-10
    • 1970-01-01
    相关资源
    最近更新 更多