简体   繁体   中英

Pagination system always missing 1 result

I have a pagination system, that fetches all of the results from a database & then loads them into a pagination.

Let's say I set the limit to 5 results per page, it will generate more pages, and order the results by date & time.

But I have a problem, my system always missing the most new result (by date/time) in the database, I have no idea why..

This is the code:

// 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();

Question:

What have I done wrong? I cant' really see anything wrong, but I always get this error:

Notice: Undefined variable: page_pagination

Line:

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

It always happens on a different line, depends on the results amount, but to fix that I need to declare page_pagination = ''; before the whole thing.

How can I fix this and what is causing this problem?

Thanks.

Your $offset is being set to 1. The newest one is always missing because it's going form 1-10 rather than 0-9. Index starts at 0. The following should work.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM