Моят код не работи правилно за страниране в PHP, някакво предложение?

Аз съм начинаещ в 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

функция pagination($query, $per_page = 10,$page = 1, $url ='?'){
$query = "SELECT COUNT(*) as num FROM {$query}"; $ред = 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='/bg{$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='/bg{$url}page=$counter'>$counter</a></li>";                    
                }
                $pagination.= "<li class='dot'>...</li>";
                $pagination.= "<li><a href='/bg{$url}page=$lpm1'>$lpm1</a></li>";
                $pagination.= "<li><a href='/bg{$url}page=$lastpage'>$lastpage</a></li>";      
            }
            elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
            {
                $pagination.= "<li><a href='/bg{$url}page=1'>1</a></li>";
                $pagination.= "<li><a href='/bg{$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='/bg{$url}page=$counter'>$counter</a></li>";                    
                }
                $pagination.= "<li class='dot'>..</li>";
                $pagination.= "<li><a href='/bg{$url}page=$lpm1'>$lpm1</a></li>";
                $pagination.= "<li><a href='/bg{$url}page=$lastpage'>$lastpage</a></li>";      
            }
            else
            {
                $pagination.= "<li><a href='/bg{$url}page=1'>1</a></li>";
                $pagination.= "<li><a href='/bg{$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='/bg{$url}page=$counter'>$counter</a></li>";                    
                }
            }
        }

        if ($page < $counter - 1){ 
            $pagination.= "<li><a href='/bg{$url}page=$next'>Next</a></li>";
            $pagination.= "<li><a href='/bg{$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;
} 

?>


person Sunil Dahal    schedule 18.11.2013    source източник


Отговори (1)


Кодът ви е перфектен, но забравяте да добавите „sc=Trekking“ към URL адреса на заявката. Така че във вашия код "$selcat" може да стане празен и sql заявката да не върне нищо.

Моля, опитайте това: http://www.swaminarayantravel.com/category.php?sc=Trekking&page=2

Може би трябва да промените функцията "pagination".

Вашият сайт е прекрасен. Спомням си пътуването ми в Непал.

person toshi    schedule 18.11.2013
comment
Благодаря за коментара. Но кой URL трябва да променя? Моят function.php има код като този: function pagination($query, $per_page = 10,$page = 1, $url ='?'){ $query = SELECT COUNT(*) as num FROM {$query}; $ред = mysql_fetch_array(mysql_query($query)); $total = $row['num']; $съседни = 2; $страница = ($страница == 0 ? 1 : $страница); $начало = ($страница - 1) * $на_страница; $prev = $страница - 1; $следваща = $страница + 1; $lastpage = ceil($total/$per_page); $lpm1 = $последна страница - 1; $pagination = ; Оценявам вашата помощ. - person Sunil Dahal; 18.11.2013
comment
Съжалявам, променям съвета си. Не трябва да променяте самото страниране. По-добре е да промените страната на повикващия на функцията. Например (преди) ‹?php echo pagination($sql,$limit,$page); ?› (след) ‹?php echo pagination($sql,$limit,$page, ?sc=Trekking&); ?› - person toshi; 18.11.2013
comment
hitokun_s! Благодаря ви много за постоянната подкрепа към мен. Както ми дадохте предложение, работи перфектно. Но трябва да получа категорията динамично, има ли друг начин, по който мога да извикам динамично категорията, трябва да работи за всички категории, не само за Трекинг. По начина, по който ме съветвате, това работи само за категорията Трекинг. Но за други категории остава същото. Искам само да ви попитам за: Трекинг е името на реда „категория“ от категорията на таблицата. В тази „категория“ имам много категории, като експедиция, рафтинг, сафари в джунглата и т.н. Имам нужда от страниране за всички динамично. - person Sunil Dahal; 18.11.2013
comment
Това е вярно. ако искате да зададете категория гъвкаво, трябва да зададете променливата $selcat напред и да извикате пагинация по следния начин: pagination($sql,$limit,$page, ?sc=.$selcat.&); - person toshi; 18.11.2013
comment
и моля, добавете този код в началото на вашия код. $selcat = $_GET[sc]; - person toshi; 18.11.2013
comment
Благодаря ви много, Hitokun_s, Вие сте гений. Кодът, който ми даде, работи добре. Сега също можете да видите, че това работи правилно. Много благодаря. Освен това в бъдеще бих искал лично да ви поканя да посетите НЕПАЛ. - person Sunil Dahal; 18.11.2013
comment
Благодаря ти!! В бъдеще ще посетя моя приятел в Тулсипур, Напал. По това време ще посетя и вас! - person toshi; 18.11.2013