我正在尝试在前端对我的数据库博客帖子进行分页。
这是代码。
<h2>Blogs</h2>
<?php
$limite = 2;
$pg = (isset($_GET['pg'])) ? (int)$_GET['pg'] : 1;
$inicio = ($pg * $limite) - $limite;
$lastRow = $inicio + $limite;
$total = 0;
include_once('includes/db-connect.php');
$sql = "SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY Pk_blog_id) as row FROM dbo.tb_IEAG_Blogs) a WHERE row between ".$inicio." and ".$lastRow."";
$a2 = sqlsrv_query($conn,$sql);
$sqlcounter = "SELECT Pk_blog_id,Blog_title,Blog_content FROM dbo.tb_IEAG_Blogs WHERE Is_archived = 0 ";
$acounter = sqlsrv_query($conn,$sqlcounter);
while ($result1 = sqlsrv_fetch_array($acounter)) {
$totalintable++;
}
?>
<?php while($result = sqlsrv_fetch_array($a2)){ ?>
<div class="media">
<div class="media-body">
<h3 class="media-heading"><?php echo $result['Blog_title'];?></h3>
<p><i class="fa fa-calendar"></i><?php echo date('F d, Y',strtotime($result['Created_at']));?></p>
<p><?php echo substr($result['Blog_content'], 0, 280) . '...'; ?></p>
</div>
<a class="btn rm-blg" href="blog-details.php?pkid=<?php echo $result['Pk_blog_id'];?>">Read More</a>
</div>
<?php } ?>
<?php $qtdPag = ceil($totalintable/$limite);
if($qtdPag > 1 && $pg <= $qtdPag)
{
?>
<nav class="text-center">
<ul class="pagination">
<li>
<a href="#" aria-label="Previous" class="next">
<span ><img src="images/prev.png" alt=""></span> Previous
</a>
</li>
<?php
for($i = 1; $i <= $qtdPag; $i++)
{
if($i == $pg){
echo "<li><a class='ative'>".$i."</a></li>";
} else {
echo "<li><a href='blog.php?pg=$i'>".$i."</a></li>";
}
}
?>
<li>
<a href="#" aria-label="Next" class="prevs"> Next
<span ><img src="images/next.png" alt=""></span>
</a>
</li>
</ul>
</nav>
<?php } ?>
我正在获取分页链接,但这不正确。
我将每页限制为2篇博文。
表中的总行数是6.
第一页工作正常,当进入第二页时,每页显示三条记录。
我该如何解决这个问题..
谢谢
答案 0 :(得分:1)
我怀疑第一页上的 last 记录在第二页上显示为 first 记录。这完全取决于您设置记录选择变量$inicio
和$lastRow
的方式。
如果我们进行您的计算,我们会得到以下结果:
+------+-------+-------+-----+
| Page | Limit | Start | End |
+------+-------+-------+-----+
| 1 | 2 | 0 | 2 |
| 2 | 2 | 2 | 4 |
| 3 | 2 | 4 | 6 |
+------+-------+-------+-----+
开始= (page * limit) - limit
;结束= (page * limit)
例如Start = (1 * 2) - 2 = 0
End = (1 * 2) = 2
结果是每个页面总共获得3个结果 - 开始和结束数字包含在内(第2页给出记录:2,3,4 )。第一页只有两个记录的原因是因为从第1行开始,记录号0不存在。
如果您将变量更改为以下内容:
$inicio = (($pg - 1) * $limite) + 1;
$lastPage = ($pg * $limite);
您会收到以下结果:
+------+-------+-------+-----+
| Page | Limit | Start | End |
+------+-------+-------+-----+
| 1 | 2 | 1 | 2 |
| 2 | 2 | 3 | 4 |
| 3 | 2 | 5 | 6 |
+------+-------+-------+-----+
例如Start = ((1 - 1) * 2) + 1 = 1
End = (1 * 2) = 2