分页按钮问题,无法获取另一篇文章

Issue with pagination buttons, can't get another article

我有分页问题,​​我尽量把我的问题说清楚

首先,我有过滤器和文章列表。我正在从文件 fetch_data.php

中获取列表

在这个页面上,我正在做一些 SQL query corrections,并制作 while 圆来呈现日期。

我想给它做分页

首先,我所做的就是在文件开始处设置这样的代码。

if (isset($_GET['pageno'])) {
    $pageno = $_GET['pageno'];
} else {
    $pageno = 1;
}

然后我在SQL quest WHERE声明中的过滤器更正,如果需要我会上传。

然后我写分页代码

    $no_of_records_per_page = 1; // record for show (its works) 
    $offset = ($pageno-1) * $no_of_records_per_page; 
// In this line im cut my querty start SELECT * and replace it with SELECT count (*) with conditions who made by filters. 
    $str2 = substr($query, 12); 
    $total_pages_sql = "SELECT count(*)";
    
    $total_pages_sql .= $str2; 
    $result = mysqli_query($con,$total_pages_sql);
    $total_rows = mysqli_fetch_array($result)[0];
    $total_pages = ceil($total_rows / $no_of_records_per_page);

然后在我的主 query LIMIT 中添加。

  $query .= "LIMIT $offset, $no_of_records_per_page"; 

然后在文件末尾,我放了代码

<div class="content">           
<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>
</div>  

index.php 中显示的所有这些很重要,但现在的问题是这个。我的

按钮可以改变分页 URL,但不能正常工作。如果我选择了只有一条记录的过滤器,那么 NEXT 按钮就会变得不可见,这样它就可以工作了,

但为什么如果我只使用分页 NEXT 按钮,我总是得到相同的文章

知道为什么吗?

link 波纹管

中的 php 已更新完整文件

Index.php代码为here

fetch_data.php代码为here

有一个使用 PHP 和 MySQLi 的 Ajax 分页示例。

(1)。首先创建数据库 Table 名称 developers :

CREATE TABLE `developers` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `skills` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  `gender` varchar(255) NOT NULL,
  `designation` varchar(255) NOT NULL,
  `age` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

(2).在developers中插入数据 Table:

INSERT INTO `developers` (`id`, `name`, `skills`, `address`, `gender`, `designation`, `age`) VALUES
(1, 'Smith', 'Java', 'Newyork', 'Male', 'Software Engineer', 34),
(2, 'David', 'PHP', 'London', 'Male', 'Web Developer', 28),
(3, 'Rhodes', 'jQuery', 'New Jersy', 'Male', 'Web Developer', 30),
(4, 'Sara', 'JavaScript', 'Delhi', 'Female', 'Web Developer', 25),
(5, 'Shyrlin', 'NodeJS', 'Tokiyo', 'Female', 'Programmer', 35),
(6, 'Steve', 'Angular', 'London', 'Male', 'Web Developer', 28),
(7, 'Cook', 'MySQL', 'Paris', 'Male', 'Web Developer', 26),
(8, 'Root', 'HTML', 'Paris', 'Male', 'Web Developer', 28),
(9, 'William', 'jQuery', 'Sydney', 'Male', 'Web Developer', 23),
(10, 'Nathan', 'PHP', 'London', 'Male', 'Web Developer', 28),
(11, 'Shri', 'PHP', 'Delhi', 'Male', 'Web Developer', 38),
(12, 'Jay', 'PHP', 'Delhi, India', 'Male', 'Web Developer', 30);

(3) 创建index.php

<?php
include_once("db_connect.php");
$perPage = 5;
$sqlQuery = "SELECT * FROM developers";
$result = mysqli_query($conn, $sqlQuery);
$totalRecords = mysqli_num_rows($result);
$totalPages = ceil($totalRecords/$perPage)
?>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script src="plugin/simple-bootstrap-paginator.js"></script>
<script src="js/pagination.js"></script>

<div class="container"> 
    <div class="row">
        <table class="table table-hover table-bordered">
            <thead>
                <tr>
                    <th>Id</th>
                    <th>Name</th>
                    <th>Age</th>
                    <th>Address</th>
                    <th>Skills</th>
                    <th>Designation</th>
                </tr>
            </thead>
            <tbody id="content">     
            </tbody>
        </table>   
        <div id="pagination"></div>    
        <input type="hidden" id="totalPages" value="<?php echo $totalPages; ?>">    
    </div>    
</div>

(5) 创建pagination.js

 <script type="text/javascript">

    $(document).ready(function(){
        var totalPage = parseInt($('#totalPages').val());   
        var pag = $('#pagination').simplePaginator({
            totalPages: totalPage,
            maxButtonsVisible: 5,
            currentPage: 1,
            nextLabel: 'Next',
            prevLabel: 'Prev',
            firstLabel: 'First',
            lastLabel: 'Last',
            clickCurrentPage: true,
            pageChange: function(page) {            
                $("#content").html('<tr><td colspan="6"><strong>loading...</strong></td></tr>');
                $.ajax({
                    url:"load_data.php",
                    method:"POST",
                    dataType: "json",       
                    data:{page: page},
                    success:function(responseData){
                        $('#content').html(responseData.html);
                    }
                });
            }
        });
    });

</script>

(6) 创建load_data.php

<?php
include_once("db_connect.php");
$perPage = 5;
if (isset($_GET["page"])) { 
    // type-casting to integer to avoid SQL injection
    $page  = (int)$_GET["page"]; 
} else { 
    $page=1; 
};  
$startFrom = ($page-1) * $perPage;  
$sqlQuery = "SELECT id, name, age, address, skills, designation
    FROM developers ORDER BY id ASC LIMIT $startFrom, $perPage";  
$result = mysqli_query($conn, $sqlQuery); 
$paginationHtml = '';
while ($row = mysqli_fetch_assoc($result)) {  
    $paginationHtml.='<tr>';  
    $paginationHtml.='<td>'.$row["id"].'</td>';
    $paginationHtml.='<td>'.$row["name"].'</td>';
    $paginationHtml.='<td>'.$row["age"].'</td>'; 
    $paginationHtml.='<td>'.$row["address"].'</td>';
    $paginationHtml.='<td>'.$row["skills"].'</td>';
    $paginationHtml.='<td>'.$row["designation"].'</td>'; 
    $paginationHtml.='</tr>';  
} 
$jsonData = array(
    "html"  => $paginationHtml, 
);
echo json_encode($jsonData); 
?>

@KUMAR 提供的答案非常好,可以解决您的所有问题。此外,您应该遵循他的代码,以便了解您的代码在调试和可读性方面应该有多干净。

从最佳实践的角度来看,您的代码有很多问题,我认为在尝试调试应用程序之前需要您注意这些问题。

我发现您的代码很难理解,例如:

您正在使用大量硬编码字符串进行检查以构建查询。

此处:WHERE ad.status='Patvirtintas',通过快速搜索 Google 翻译,我发现它的意思是已批准。为什么将它作为字符串存储在数据库中,当你可以为它使用一个标志时。 0/1 表示不 Approved/Approved。或者不同的数字,如果有多个状态。

此外,为了清理您的代码,将这些代码存储在所谓的 ENUM 中非常好,在 PHP 中您可以将其写为 class,例如:

class PostStatus
{
    const NotApproved = 0;
    const Approved = 1;
}

$postStatus = PostStatus::Approved;

列表还在继续,从间距到缩进。我建议你应该参加干净代码的课程。

你应该分离你的代码,使用一个文件,在那里你构造查询,从数据库中获取数据,用它创建一个 JSON 数组,然后 return 作为响应,没有将任何 HTML、CSS、JavaScript 附加到 returned 响应。

使用 ajax 调用我上面提到的文件,使用所需页面的参数,我非常确定它应该可以正常工作。

此外,对于 PHP 而不是:

<a href="<?php if($pageno >= $total_pages){ echo '#'; } else { echo "?pageno=".($pageno + 1); } ?>">Next</a>

使用 shorthand 和三元运算符(如果你的 PHP 版本高于 5,如果我没记错的话),在你的情况下它看起来像这样:

<a href="<?= $pageno >= $total_pages ? '#' : '?pageno=". ($pageno + 1) . "' ?>">Next</a>

相信我,使用上面 KUMAR 给出的代码,并根据您的需要进行调整。没有人会给你一些开箱即用的东西,因为没有人可以测试它,或者对你的应用程序有足够的了解以及所需的行为是什么。