2011-03-04 1 views
-1

У меня есть SQL-запрос, который выводит кучу строк, которые соответствуют определенным критериям. Я пытаюсь добавить разбиение на страницы для этого процесса, чтобы его было проще в использовании.Добавление PHP Pagination

Мой процесс таков:

  • Рисунок из нижнего предела этой страницы, выяснить высокий предел этой страницы
  • Толкай (ех 1 - - 20, 21 40, и т.д.). эти строки из таблицы MySQL
  • Список этих строк
  • Если есть больше чем 20, добавить floor($totalRows/20) страниц
  • ???
  • Pagination

Моя пагинация, кажется, работает частично правильно, но на последней странице (независимо от того, что может быть) перечисляет один меньше, чем количество строк должны быть. Вот мой код:

$page = $_GET["p"]; 
    $bL = (($page - 1) * 20) + 1; 
    $tL = $page * 20; 

    $total = mysql_num_rows(mysql_query("SELECT id FROM coupons WHERE zone = '$zone' AND dateExp > CURDATE()")); 

    if($tL > $total) 
    { 
     $tL = (($page - 1) * 20) + ($total % 20); 
    } 

    $gotRows = "SELECT * FROM coupons WHERE zone = '$zone' AND dateExp > CURDATE() ORDER BY retailerName LIMIT " . $bL . ", " . $tL; 

    //list all those rows 

    $numPages = floor($total/20) + 1; 
    echo "<p id='results'>" . $total . " result" . $plural . " &#183; Displaying " . $bL . " to " . $tL . " </p>"; 
    echo "</table>"; 
    $pG = 1; 
    while($pG <= $numPages) 
    { 
     if($pG == $page) 
     { 
      echo $pG; 
     } 
     else 
     { 
      echo "<a href='zone?z=" . $zone . "&p=" . $pG . "'>" . $pG . "</a>"; 
     } 
     if($pG != $numPages) 
     { 
      echo "&#183"; 
     } 
     $pG = $pG + 1; 
    } 

Любая помощь?

Редактировать: Nevermind, я решил проблему с строками. Но моя проблема со ссылками на страницу, которая находится внизу, все еще сохраняется. На странице 1 он работает правильно - «1» не является ссылкой, «2» есть. Однако на странице 2 отображается только «1». «2» не отображается.

+0

Есть много вопросов о SO, связанных с разбиением на страницы PHP/MySQL .. Вы уже просмотрели их? – drudge

+0

Теперь разбиение на страницы прекрасно работает - я просто пытаюсь исправить ошибку на странице. – AKor

ответ

1

Эта логика меня смущает. Если $tl больше общего, не будет ли оно просто равным сумме?

if($tL > $total) 
{ 
    $tL = (($page - 1) * 20) + ($total % 20); 
} 

Вместо почему не:

$tL = ($tL > $total) ? $total : $tl; 

Кроме того, я хотел бы использовать SQL, чтобы найти ваш общей вместо mysql_num_rows. Он должен оказаться немного более надежным (особенно, когда вы прекратите использовать действительно старое расширение mysql). Возможно, он также вернет правильную сумму.

SELECT COUNT(id) FROM coupons WHERE zone = '$zone' AND dateExp > CURDATE() 

Кроме этого, я не вижу ничего очевидного, что объясняло бы неправильное количество строк.

+0

Я изменил их. У меня были строки, функционирующие нормально, вскоре после того, как я представил этот вопрос. Теперь моя единственная проблема заключается в том, что цикл, который создает ссылки на страницы, работает некорректно. – AKor