【问题标题】:PHP Pagination Script Not Showing Correct Content For Page NumberPHP分页脚本未显示页码的正确内容
【发布时间】:2018-05-19 10:57:45
【问题描述】:

我已经构建了一个 php 脚本来前后导航我的博客页面,但第一页显示正确,但当我导航到下一页时,它显示正确的数字,但仍显示与以前相同的内容。然后,next 按钮一直显示当前页面。

这是我的脚本:

$publication = "magazine";
$ppp = "6";

if(isset($_GET["id"])){$id = $_GET["id"];}else{
header("Location: ".$url."");
exit();
}

if(isset($_GET["currentpage"])){$currentpage = $_GET["currentpage"];}else{
header("Location: ".$url."");
exit();
}

$count_sql = "SELECT id FROM publication_posts WHERE publication = '".$publication."' AND issue = '".$id."'";
$count_res = mysqli_query($con, $count_sql);
$count_total = mysqli_num_rows($count_res);
//If None, Then Exit
if($count_total == 0){
header("Location: ".$url."");
exit();
}

$display_limit = $ppp;
$totalpages = ceil($count_total / $display_limit);//$rowsperpage
$currentpage = $totalpages;

$offset = ($totalpages - 1) * $display_limit;//$rowsperpage

if($currentpage == "0"){
header("Location: ".$url."/issue/".$id."/".$totalpages."");
exit();
}

$posts_sql = "SELECT * FROM publication_posts WHERE publication = '".$publication."' AND issue = '".$id."' ORDER BY id DESC LIMIT ".$offset.", ".$display_limit."";

我在这里注意到的另一件事是,如果我将当前页面设置为0,它仍然显示issue/id/0,而这应该重定向到$totalpages

有人知道问题出在哪里吗?

这是我的分页:

<?php
// range of num links to show
$range = 0;
if ($currentpage != $totalpages) {
    // get next page
    $nextpage = $currentpage + 1;
    // echo forward link for next page
    $link_next = "<a href=\"issue/".$id."/".$nextpage."\"><div class=\"pagiCell pagiNext fadeOut\"></div></a>";
}
else{
    $link_next = "<div class=\"pagiCell pagiNextX\"></div>";
}
?>
<?php
// range of num links to show
$range = 0;
if ($currentpage > 1) {
    // get previous page
    $prevpage = $currentpage - 1;
    // echo forward link for next page
    $link_prev = "<a href=\"issue/".$id."/".$prevpage."\"><div class=\"pagiCell pagiPrev fadeOut\"></div></a>";
}
else{
    $link_prev = "<div class=\"pagiCell pagiPrevX\"></div>";
}
?>
<?php
    $link_refresh = "<a href=\"issue/".$id."/1\"><div class=\"pagiCell pagiRefresh fadeOut\"></div></a>";
?>
<?php
    $randpage = rand(1,$totalpages);
    $link_random = "<a href=\"issue/".$id."/".$randpage."\"><div class=\"pagiCell pagiRandom fadeOut\"></div></a>";
?>

短网址:localhost/publication/magazine/issue/1/1 长网址:localhost/publication/magazine/issue?id=1&amp;currentpage=1

【问题讨论】:

  • 您对SQL Injections 持开放态度,应该真正使用Prepared Statements,而不是像那样手动构建查询。特别是因为您根本没有逃避用户输入!
  • 请你回答这个问题。我的脚本中没有用户输入,因此注入应该不是问题
  • 如果我发现安全问题,我们指出这一点不是一件好事吗?是的,您的脚本中确实有用户输入。您在查询中注入来自$_GET['id']$id
  • 你有解决我的问题的方法 - 分页吗?我可以稍后更改语句。我只是想让这个工作!
  • 你做过调试吗?在使用它们之前检查不同变量实际包含的内容?这样,通常很容易准确地找到问题所在。由于上述代码不包含完整且可验证的示例,因此我们依赖您完成所有可能的调试并将其包含在您的问题中。此外,如果我们指出其他问题,只需说“好的,我会整理”而不是获得态度。我只是想帮忙。

标签: php pagination ceil


【解决方案1】:

我认为你的问题是你的 $currentpage var 是一个字符串,你正在用它做数学而不转换它。你应该输入:PHP: Type Juggling

$nextpage = $currentpage + 1; 变成$nextpage = (int)$currentpage + 1;

就像 Magnus Eriksson 之前所说的那样,您不会检查用户输入是否存在安全问题。测试您的变量以获得预期值意味着,例如PHP: is_int

【讨论】:

  • 谢谢 kaoz,你是对的。似乎我从没有分页的页面中复制了脚本,因此忘记添加一些额外的代码,内容为:if (isset($_GET['currentpage']) &amp;&amp; is_numeric($_GET['currentpage'])) { $currentpage = (int) $_GET['currentpage']; } - 现在正常工作。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-25
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多