Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите разобраться с лишней страницей

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
fullzero
Отправлено: 19 Января, 2012 - 15:05:05
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




Есть класс, который выводит алфавитный указатель имён (структура таблицы id_name, name, description)

Только переключатель страниц пишет что там не 3 страницы а 4. Знающие люди взгляните на код и укажите что не так...


PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3.  
  4. $db_host = 'localhost';
  5. $db_user = 'root';
  6. $db_pass = '';
  7. $db_base = 'base';
  8.  
  9. mysql_connect($db_host, $db_user, $db_pass) or die (mysql_error());
  10. mysql_select_db($db_base) or die (mysql_error());
  11.  
  12. mysql_query("set character_set_client   ='cp1251'");
  13. mysql_query("set character_set_results  ='cp1251'");
  14. mysql_query("set collation_connection   ='cp1251_general_ci'");
  15.  
  16. define("_TAB_NAME","name");// Таблица для навигации
  17. define("_FIELD_NAME","name");// поле для навигации
  18. define("_ID_NAME","id_name");// Ключевое поле для идентификации
  19. define("_ORDER_BY","id_name"); // Поле для сортировки
  20. define("_NUM_ON_PAGE",5); // Сколько строчек списка выводить на страницу
  21. ?>
  22. <?
  23. class alphaPages{
  24. // Задаём алфавит
  25. var $ALPHA = '<center>A B C D E F G H I J K L M N O P Q R S T U V W X Y Z</center>
  26. <center>А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Щ Ш Э Ю Я</center>
  27. <center>0 1 2 3 4 5 6 7 8 9</center>';
  28. // Инициализация объекта. Установка начальных условий списка
  29. function alphaPages(){
  30. $this->sql = "SELECT * FROM "._TAB_NAME;
  31. }
  32. // Метод выводит "карточку" человека
  33. function profile(){
  34. $this->sql .= " WHERE "._ID_NAME."=".$_GET['id'];
  35. $query = mysql_query($this->sql);
  36. $r = mysql_fetch_assoc($query);
  37. $ret='<table>';
  38. foreach($r as $field=>$value){
  39. $ret .= "<tr><td>".$field."</td><td>".$value."</td></tr>";
  40. }
  41. $ret.='</table>';
  42. return $ret;
  43. }
  44. // метод строит панель алфавитной навигации
  45. function makeAlphaNavBar(){
  46. $sql = 'select DISTINCT (LEFT(UPPER('._FIELD_NAME.'),1)) as letter from '._TAB_NAME;
  47. $query = mysql_query($sql);
  48. while($r = mysql_fetch_assoc($query)){
  49. $this->ALPHA = str_replace($r['letter'],'<a href="?letter='.$r['letter'].'">'.$r['letter'].'</a>',$this->ALPHA);
  50. }
  51. return $this->ALPHA;
  52. }
  53.  
  54. // метод строит панель постраничной навигации
  55. function makePageNavBar(){
  56.  
  57. $page = $_GET['page'];
  58. $query = mysql_query($this->sql);
  59. $total = intval(mysql_num_rows($query)/_NUM_ON_PAGE+1);
  60.  
  61. if(empty($page) or $page < 1) $page = 1;
  62. if($page > $total) $page = $total;
  63.  
  64. // Проверяем нужны ли стрелки назад
  65. if ($page != 1) $pervpage = '<A href="?letter='.$_GET['letter'].'&page=1" class="pag">Начало</A>
  66. <A href="?letter='.$_GET['letter'].'&page='. ($page -1) .'" class="pag">Назад</A> ';
  67. // Проверяем нужны ли стрелки вперед
  68. if ($page != $total) $nextpage = ' <A href="?letter='.$_GET['letter'].'&page='. ($page + 1) .'" class="pag">Вперёд</A>
  69. <A href="?letter='.$_GET['letter'].'&page=' .$total. '" class="pag">Конец</A>';
  70.  
  71.  
  72. // Находим две ближайшие станицы с обоих краев, если они есть
  73. if($page - 3 > 0)$page3left = ' <a href="?letter='.$_GET['letter'].'&page='. ($page - 3) .'" class="pag">'. ($page - 3) .'</a> ';
  74. if($page - 2 > 0)$page2left = ' <a href="?letter='.$_GET['letter'].'&page='. ($page - 2) .'" class="pag">'. ($page - 2) .'</a> ';
  75. if($page - 1 > 0) $page1left = '<a href="?letter='.$_GET['letter'].'&page='. ($page - 1) .'" class="pag">'. ($page - 1) .'</a> ';
  76.  
  77. if($page + 3 <= $total) $page3right = ' <a href="?letter='.$_GET['letter'].'&page='. ($page + 3) .'" class="pag">'. ($page + 3) .'</a>';
  78. if($page + 2 <= $total) $page2right = ' <a href="?letter='.$_GET['letter'].'&page='. ($page + 2) .'" class="pag">'. ($page + 2) .'</a>';
  79. if($page + 1 <= $total) $page1right = ' <a href="?letter='.$_GET['letter'].'&page='. ($page + 1) .'" class="pag">'. ($page + 1) .'</a>';
  80.  
  81. // Вывод пагинатора
  82. $ret = $pervpage.$page3left.$page2left.$page1left.'<FONT class="pags">'.$page.'</FONT>'.$page1right.$page2right.$page3right.$nextpage;
  83. return $ret;
  84. }
  85.  
  86.  
  87.  
  88.  
  89. ######### Набор фильтрующих список методов ##############
  90. // Метод фильтрует список по букве
  91. function setLetter(){
  92. //SELECT DISTINCT artist FROM `table` WHERE `artist` LIKE 'X%';
  93. $this->sql .= " WHERE "._FIELD_NAME." like '".$_GET['letter']."%'";
  94. }
  95. // Метод ставит ограничения по странице
  96. function setPage(){
  97. $this->setOrder();
  98. if(empty($_GET['page'])) $page=0;
  99. else $page = $_GET['page'];
  100. $this->sql .= " LIMIT ".$page*_NUM_ON_PAGE.",".(_NUM_ON_PAGE);
  101. }
  102. // метод задаёт порядок сортировки
  103. function setOrder(){
  104. $this->sql .= " ORDER BY "._ORDER_BY;
  105. }
  106. #########################################################
  107. // метод строит итоговый список
  108. function getList(){
  109. $query = mysql_query($this->sql);
  110. while($r = mysql_fetch_assoc($query)){
  111. $ret .= '<a href="?id='.$r[_ID_NAME].'">'.$r[_FIELD_NAME].'</a><br>';
  112. }
  113. return $ret;
  114. }
  115. }
  116. // the end of class
  117. ?>
  118. <?
  119. $nav = new alphaPages(); // Выводим алфавит
  120. $navBar = $nav->makeAlphaNavBar(); // Ставим букву
  121. if(!empty($_GET['letter'])) $nav->setLetter();  // Вычисляем сколько страниц. Обязательно после фильтрации по букве
  122. $pageBar = $nav->makePageNavBar(); // Что будем показывать
  123. if(!empty($_GET['id'])) $out = $nav->profile();
  124. else{
  125. $nav->setPage();
  126. $out = $nav->getList();
  127. }
  128. // показываем
  129. ?>
  130.  


и на странице где меньше 5 имён надо чтоб показывало что это страница 1
 
 Top
Panoptik
Отправлено: 19 Января, 2012 - 15:15:01
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




в 59 строке попробуйте заменить

на следующее


-----
Just do it
 
 Top
sKaa
Отправлено: 19 Января, 2012 - 16:04:19
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


PHP:
скопировать код в буфер обмена
  1.  
  2. $count = mysql_fetch_row(mysql_query('SELECT COUNT(*) FROM ...'));
  3. $count = $count[0];
  4. $messages_per_page = 10;
  5. $pages_count = ceil($count / $messages_per_page);
  6.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB