2013-04-16 59 views
1

我有一個分頁系統,它從數據庫中提取所有結果&然後將它們加載到分頁中。假設我將每個頁面的限制設置爲5個結果,它將生成更多頁面,並按&時間排序結果。分頁系統總是丟失1結果

但是我有一個問題,我的系統總是在數據庫中缺少最新的結果(日期/時間),我不知道爲什麼..

這是代碼:

// how many rows to show per page 
$rowsPerPage = 10; 

// by default we show first page 
$page_num = 1; 

// if $_GET['page'] defined, use it as page number, $_GET gets the page number out of the url 
//set by the $page_pagination below 
if(isset($_GET['page'])){$page_num = $_GET['page'];} 

//the point to start for the limit query 
$offset = $page_num; 

// Zero is an incorrect page, so switch the zero with 1, mainly because it will cause an error with the SQL 
if($page_num == 0) {$page_num = 1;} 

// counting the offset 
$sql = "SELECT * FROM comments ORDER BY date, time desc LIMIT $offset, $rowsPerPage"; 
$res = $pdo->query($sql); 

// how many rows we have in database 
$sql2 = "SELECT COUNT(comment_id) AS numrows FROM comments"; 
$res2 = $pdo->query($sql2); 
$row2 = $res2->fetch(); 
$numrows = $row2['numrows']; 

// print the random numbers 
while($row = $res->fetch()) 
{ 
    //Echo out your table contents here. 

    echo $row[1].'<BR>'; 
    echo $row[2].'<BR>'; 
    echo '<BR>'; 
} 

// how many pages we have when using paging? 
$numofpages = ceil($numrows/$rowsPerPage); 

// print the link to access each page 
$self = "events.php?"; 
    $page_pagination = ''; 
if ($numofpages > '1') { 
    $range = 10; //set this to what ever range you want to show in the pagination link 
    $range_min = ($range % 2 == 0) ? ($range/2) - 1 : ($range - 1)/2; 
    $range_max = ($range % 2 == 0) ? $range_min + 1 : $range_min; 
    $page_min = $page_num- $range_min; 
    $page_max = $page_num+ $range_max; 
    $page_min = ($page_min < 1) ? 1 : $page_min; 
    $page_max = ($page_max < ($page_min + $range - 1)) ? $page_min + $range - 1 : $page_max; 
    if ($page_max > $numofpages) { 
     $page_min = ($page_min > 1) ? $numofpages - $range + 1 : 1; 
     $page_max = $numofpages; 
    } 

    $page_min = ($page_min < 1) ? 1 : $page_min; 

    if (($page_num > ($range - $range_min)) && ($numofpages > $range)) { 
     $page_pagination .= '<a class="num" title="First" href="'.$self.'page=1">&lt;</a> '; 
    } 

    if ($page_num != 1) { 
     $page_pagination .= '<a class="num" href="'.$self.'page='.($page_num-1). '">Previous</a> '; 
    } 

    for ($i = $page_min;$i <= $page_max;$i++) { 
     if ($i == $page_num) 
      $page_pagination .= '<span class="num"><strong>' . $i . '</strong></span> '; 
      else 
      $page_pagination.= '<a class="num" href="'.$self.'page='.$i. '">'.$i.'</a> '; 
    } 

     if ($page_num < $numofpages) { 
      $page_pagination.= ' <a class="num" href="'.$self.'page='.($page_num + 1) . '">Next</a>'; 
     } 


     if (($page_num< ($numofpages - $range_max)) && ($numofpages > $range)) { 
      $page_pagination .= ' <a class="num" title="Last" href="'.$self.'page='.$numofpages. '">&gt;</a> '; 
     } 
} 

echo $page_pagination.'<BR><BR>'; 

echo 'Number of results - '.$numrows ; 
echo ' and Number of pages - '.$numofpages.'<BR><BR>'; 

$res2->closeCursor(); 

問題:

我做了什麼錯?我不能」真的看到什麼錯,但我總是得到這個錯誤:

注意:未定義的變量:page_pagination

線:

echo $page_pagination.'<BR><BR>'; 

它總是發生在另一條線路,依賴於結果金額,但要解決,我需要聲明page_pagination ='';在整個事情之前。

我該如何解決這個問題,是什麼導致了這個問題?

謝謝。

+0

爲($ I = $ page_min; $ I * <* $ page_max; $ I ++) – hd1

+1

英文單詞 「偏移」,並不意味着你在想什麼。 –

回答

2

您的$偏移量被設置爲1.最新的一個總是失蹤,因爲它的形式是1-10而不是0-9。索引從0開始。以下內容應該可以工作。

$offset = ($rowsPerPage * $page_num) - $rowsPerPage; 
+0

謝謝!解決這個問題,將偏移量更改爲0。 – user2286576