【问题标题】:My code not working properly for pagination in PHP, any suggestion?我的代码无法在 PHP 中正常分页,有什么建议吗?
【发布时间】:2015-07-25 15:29:59
【问题描述】:

我是 PHP 初学者。 我想将我的mysql数据库内容从表显示到主首页显示为数据库表中项目数的分页(有限制)。我的代码显示具有精确分页的格式,并在第一页中绘制项目(如:http://www.swaminarayantravel.com/category.php?sc=Trekking),但问题是,当我尝试从下面的分页转到第 2 页时,它会转到错误页面。 我的代码是:

<?php

//get the function
include_once ('function.php');
include_once ('includes/connect.php');

    $page = (int) (!isset($_GET["page"]) ? 1 : $_GET["page"]);
    $limit = 4;
    $startpoint = ($page * $limit) - $limit;

    //to make pagination
  $sql = "category where category.category='$selcat'";
  ?>
<div class="records round">


  <ul class="homelist">
<?php

        //show records
 $query = mysql_query("SELECT * FROM {$sql} LIMIT {$startpoint} , {$limit}");
echo "<table>
<tr></tr>";

        while ($row = mysql_fetch_assoc($query)) {   ?>
<?php echo' <li > <img src="images/subcat/'.$row['file'] .'" height="100" width="100" alt="'.$row['subcategory'] .'"/> 
 <a class="title">'; 
$subcategory= $row["subcategory"];
                        echo "$subcategory"; 
echo'</a>
      <p align="justify">'; 
$detail= $row["subcat_detail"];
                        echo "$detail"; 
                        echo ' </p> '; ?> 
 <?php   }   ?> 
</table></div>
<?php   echo pagination($sql,$limit,$page);  ?>

并且function.php页面包含以下代码:

<?php

函数分页($query, $per_page = 10,$page = 1, $url ='?'){
$query = "SELECT COUNT(*) as num FROM {$query}"; $row = mysql_fetch_array(mysql_query($query)); $total = $row['num']; $相邻=“2”;

    $page = ($page == 0 ? 1 : $page);  
    $start = ($page - 1) * $per_page;                               

    $prev = $page - 1;                          
    $next = $page + 1;
    $lastpage = ceil($total/$per_page);
    $lpm1 = $lastpage - 1;

    $pagination = "";
    if($lastpage > 1)
    {   
        $pagination .= "<ul class='pagination'>";
                $pagination .= "<li class='details'>Page $page of $lastpage</li>";
        if ($lastpage < 7 + ($adjacents * 2))
        {   
            for ($counter = 1; $counter <= $lastpage; $counter++)
            {
                if ($counter == $page)
                    $pagination.= "<li><a class='current'>$counter</a></li>";
                else
                    $pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
            }
        }
        elseif($lastpage > 5 + ($adjacents * 2))
        {
            if($page < 1 + ($adjacents * 2))        
            {
                for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<li><a class='current'>$counter</a></li>";
                    else
                        $pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                }
                $pagination.= "<li class='dot'>...</li>";
                $pagination.= "<li><a href='{$url}page=$lpm1'>$lpm1</a></li>";
                $pagination.= "<li><a href='{$url}page=$lastpage'>$lastpage</a></li>";      
            }
            elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
            {
                $pagination.= "<li><a href='{$url}page=1'>1</a></li>";
                $pagination.= "<li><a href='{$url}page=2'>2</a></li>";
                $pagination.= "<li class='dot'>...</li>";
                for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<li><a class='current'>$counter</a></li>";
                    else
                        $pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                }
                $pagination.= "<li class='dot'>..</li>";
                $pagination.= "<li><a href='{$url}page=$lpm1'>$lpm1</a></li>";
                $pagination.= "<li><a href='{$url}page=$lastpage'>$lastpage</a></li>";      
            }
            else
            {
                $pagination.= "<li><a href='{$url}page=1'>1</a></li>";
                $pagination.= "<li><a href='{$url}page=2'>2</a></li>";
                $pagination.= "<li class='dot'>..</li>";
                for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<li><a class='current'>$counter</a></li>";
                    else
                        $pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                }
            }
        }

        if ($page < $counter - 1){ 
            $pagination.= "<li><a href='{$url}page=$next'>Next</a></li>";
            $pagination.= "<li><a href='{$url}page=$lastpage'>Last</a></li>";
        }else{
            $pagination.= "<li><a class='current'>Next</a></li>";
            $pagination.= "<li><a class='current'>Last</a></li>";
        }
        $pagination.= "</ul>\n";        
    }


    return $pagination;
} 

?>

【问题讨论】:

    标签: paging


    【解决方案1】:

    您的代码很完美,但您忘记在请求 URL 中添加“sc=Trekking”。 因此,在您的代码中,"$selcat" 可能会变为空,并且 sql 查询不会返回任何内容。

    请试试这个: http://www.swaminarayantravel.com/category.php?sc=Trekking&page=2

    也许你应该修改“分页”功能。

    您的网站很棒。 我记得我在尼泊尔的旅行。

    【讨论】:

    • 感谢您的评论。但是,我需要更改哪个 URL?我的 function.php 有这样的代码: function pagination($query, $per_page = 10,$page = 1, $url ='?'){ $query = "SELECT COUNT(*) as num FROM {$query }"; $row = mysql_fetch_array(mysql_query($query)); $total = $row['num']; $相邻=“2”; $page = ($page == 0 ? 1 : $page); $start = ($page - 1) * $per_page; $prev = $page - 1; $next = $page + 1; $lastpage = ceil($total/$per_page); $lpm1 = $lastpage - 1; $分页 = "";感谢您的帮助。
    • 对不起,我改变了我的建议。你不应该修改“分页”本身。您最好修改函数的调用方。例如,(之前) (之后)
    • hitokun_s!非常感谢您一直以来对我的支持。正如你给我的建议,它完美无缺。但是,我必须动态获取类别,有没有其他方法可以动态调用类别,它应该适用于所有类别,不仅适用于 Trekking。按照您对我的建议,这仅适用于徒步旅行类别。但是,对于其他类别,它保持不变。我只想问你:Trekking 是表类别中的行名称“类别”。在这个“类别”中,我有很多类别,如探险、漂流、丛林探险等。我需要为所有动态分页。
    • 没错。如果你想灵活设置类别,你应该提前设置变量“$selcat”,然后像这样调用“pagination”:pagination($sql,$limit,$page, "?sc=".$selcat."&" );
    • 请将此代码添加到代码的开头。 $selcat = $_GET["sc"];
    猜你喜欢
    • 2014-08-18
    • 2018-12-13
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多