Как завершить реализацию нумерации страниц - PullRequest
2 голосов
/ 08 июля 2011

Благодаря огромной помощи, оказанной некоторыми из вас здесь, я наконец-то добился успеха в своем первом проекте по нумерации страниц ... ну, почти.

Мой сценарий работает прекрасно, за исключением одной крошечной заминки. Страница содержит 40 «строк». Если больше нет «строк» ​​для отображения, нумерация страниц продолжает разбивать страницы на пустые.

Чтобы быть более конкретным. страница 13 является последней страницей со строками, но вы все равно можете нажать следующую и перейти на пустые страницы.

Решение очевидно: убрать кнопку «Далее», если не осталось строк, но по какой-то причине все операторы if, которые я пробовал, не могут это сделать.

Вот запрос:

$rowsperpage = 40; // THERE ARE 40 AIRWAVES PER PAGE
$currentpage = (int)$_GET['currentpage']; // This is getting which "page" the user wants to see, and putting it in $currentpage

if ($currentpage > 0) { // If $currentpage is greater than 0, we'll need to compensate by subtracting 1, so that we pull the correct set of results. Otherwise, we'll just start at 0 (see the else)
    $offset = ($currentpage - 1) * $rowsperpage;
}
else {
    $offset = 0;
}

$query = "SELECT * FROM `CysticAirwaves` WHERE `FromUserID` = `ToUserID` AND `status` = 'active' ORDER BY `date` DESC, `time` DESC LIMIT $offset, $rowsperpage";
$request = mysql_query($query, $connection);
$counter = 0;

while ($result = mysql_fetch_array($request)) { 

а вот ссылки на нумерацию страниц:

// find out how many rows are in the table

$query = "SELECT COUNT(*) FROM `CysticAirwaves`";
$result = mysql_query($query, $connection) or trigger_error("SQL", E_USER_ERROR);
$r = mysql_fetch_row($result);
$numrows = $r[0];

// number of rows to show per page

$rowsperpage = 40;

// find out total pages

$totalpages = ceil($numrows / $rowsperpage);

// get the current page or set a default

if (isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) {

    // cast var as int

    $currentpage = (int)$_GET['currentpage'];
}
else {

    // default page num

    $currentpage = 1;
} // end if

// if current page is greater than total pages...

if ($currentpage > $totalpages) {

    // set current page to last page

    $currentpage = $totalpages;
} // end if

// if current page is less than first page...

if ($currentpage < 1) {

    // set current page to first page

    $currentpage = 1;
} // end if

// the offset of the list, based on current page

$offset = ($currentpage + 1) * $rowsperpage;

// while there are rows to be fetched...

while ($list = mysql_fetch_assoc($result)) {

    // echo data

    echo $list['id'] . " : " . $list['number'] . "<br />";
} // end while
/******  build the pagination links ******/

// range of num links to show

$range = 3;

// if not on page 1, don't show back links

if ($currentpage > 1) {

    // show << link to go back to page 1

    $prevpage = $currentpage - 1;
    echo "<div id='all_page_turn'>
                <ul>
                    <li class='PreviousPageBlog round_10px'>
                        <a href='http://www.cysticlife.org/Airwave_build.php?currentpage=$prevpage'>Previous</a>
                    </li>
                <ul>
            </div>";
} // end if

// if not on last page, show forward and last page links

if ($currentpage != $totalpages)) {

    // get next page

    $nextpage = $currentpage + 1;

    // echo forward link for next page

    echo "  <div id='all_page_turn'>
                <ul>
                    <li class='PreviousPageBlog round_10px'>
                        <a href='http://www.cysticlife.org/Airwave_build.php?currentpage=$nextpage'>Next</a>
                    </li>
                </ul>
            </div> ";
}

Заранее спасибо

1 Ответ

1 голос
/ 08 июля 2011

Измените

if ($currentpage != $totalpages)) {

на

if ($currentpage < $totalpages) {

. Например, есть лишние скобки, и вы никогда не должны полагаться на точное соответствие верхнему порогу. Редактировать:

Кажется, я вижу проблему.При выполнении COUNT вам нужно использовать то же предложение WHERE, что и в вашем фактическом запросе выбора:

$query = "SELECT COUNT(*) FROM `CysticAirwaves` " .
         "WHERE `FromUserID` = `ToUserID` AND `status` = 'active'";

В противном случае вы получите число всех строк в таблице, дажете, которые вы не отображаете.

...