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
Форумы портала PHP.SU :: Версия для печати :: Снова о постраничной навигации
Форумы портала PHP.SU » PHP » Программирование на PHP » Снова о постраничной навигации

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

1. Mister - 03 Апреля, 2009 - 16:24:20 - перейти к сообщению
Нашёл пример постраничной навигации http://www.php.su/articles/?cat=...les&page=062 переделал немного под свои запросы.
PHP:
скопировать код в буфер обмена
  1. include "templates/header.tpl";
  2. require_once "admin/config.php";
  3. // Переменная хранит число сообщений выводимых на станице
  4. $number = 5;
  5. // Извлекаем из URL текущую страницу
  6. $archiv = $_GET['archiv'];
  7. // Определяем общее число сообщений в базе данных
  8. $result = mysql_query("SELECT COUNT(*) FROM meropr WHERE meropr_date<NOW() ORDER BY meropr_date");
  9. $posts = mysql_fetch_row($result);
  10. // Находим общее число страниц
  11. $total = 1000/*intval(($posts - 1)/$number) + 1*/; если здесь оставить всё как в первоначальном коде, то выдаёт ошибку
  12. Fatal error: Unsupported operand types in T:\home\localhost\zakaz\archiv.php on line 13 , поэтому временно сделал значение 1000
  13. // Определяем начало сообщений для текущей страницы
  14. $archiv = intval($archiv);
  15. // Если значение $page меньше единицы или отрицательно
  16. // переходим на первую страницу
  17. // А если слишком большое, то переходим на последнюю
  18. if(empty($archiv) or $archiv < 0) $archiv = 1;
  19.   if($archiv > $total) $archiv = $total;
  20. // Вычисляем начиная к какого номера
  21. // следует выводить сообщения
  22. $start = $archiv * $number - $number;
  23. // Выбираем $num сообщений начиная с номера $start
  24. $result = mysql_query("SELECT * FROM meropr WHERE meropr_date<NOW() LIMIT $start, $number");
  25. // В цикле переносим результаты запроса в массив $postrow
  26. echo "<table>";
  27. while ( $postrow[] = mysql_fetch_array($result))  
  28. echo " ";
  29. for($i = 0; $i < $number; $i++)
  30. {
  31.         echo "<tr>
  32.                 <td width=\"80%\" align=\"left\">&nbsp;<a href=\"doc.php?id_meropr=".$postrow[$i]['id_meropr']."&".$postrow[$i]['meropr_path']."\" title=\"Просмотр конкурсной  документации для скачивания\">".$postrow[$i]['meropr']."</a></td><td>".$postrow[$i]['meropr_date']."</td>";
  33. }
  34. echo "</table>";  
  35. // Проверяем нужны ли стрелки назад
  36. if ($archiv!=1) $pervarchiv = '<a href=./archiv.php?archiv=1><<</a><a href=./archiv.php?archiv='. ($archiv-1) .'><</a> ';
  37. // Проверяем нужны ли стрелки вперед
  38. if ($archiv!=$total) $nextarchiv = '<a href=./archiv.php?archiv='.($archiv+1).'>></a><a href=./archiv.php?archiv='.$total.'>>></a>';
  39.  
  40. // Находим две ближайшие станицы с обоих краев, если они есть
  41. if($archiv-2>0) $archiv2left = '<a href= ./archiv.php?archiv='. ($archiv-2) .'>'. ($archiv-2) .'</a> | ';
  42. if($archiv-1>0) $archiv1left = '<a href= ./archiv.php?archiv='. ($archiv-1) .'>'. ($archiv-1) .'</a> | ';
  43. if($archiv+2<=$total) $archiv2right = ' | <a href= ./archiv.php?archiv='. ($archiv+2) .'>'. ($archiv+2) .'</a>';
  44. if($archiv+1<=$total) $archiv1right = ' | <a href= ./archiv.php?archiv='. ($archiv+1) .'>'. ($archiv+1) .'</a>';
  45. // Вывод меню
  46. echo $pervarchiv.$archiv2left.$archiv1left.'<b>'.$archiv.'</b>'.$archiv1right.$archiv2right.$nextarchiv;

Дальше всё работает вроде нормально, выдаёт навигацию в виде << < 1 | 2 | 3 и т.д.
Ссылки работают, но на первой странице ошибка
Notice: Undefined variable: archiv2left in T:\home\localhost\zakaz\archiv.php on line 47

Notice: Undefined variable: pervarchiv in T:\home\localhost\zakaz\archiv.php on line 47

Notice: Undefined variable: archiv1left in T:\home\localhost\zakaz\archiv.php on line 47
На второй
Notice: Undefined variable: archiv2left in T:\home\localhost\zakaz\archiv.php on line 47

Notice: Undefined variable: pervarchiv in T:\home\localhost\zakaz\archiv.php on line 47
На третьей
Notice: Undefined variable: archiv2left in T:\home\localhost\zakaz\archiv.php on line 47
Начиная с четвёртой ошибка исчезает.
Подскажите, в чём проблема?
2. Гость - 03 Апреля, 2009 - 17:15:12 - перейти к сообщению
Напшиите в ваш .htaccess фйл рядом с вашей программой следующее
php_value error_reporting E_ALL & ~E_NOTICE
3. Roler - 03 Апреля, 2009 - 17:50:28 - перейти к сообщению
Общее число страниц можно найти проще:
CODE (text):
скопировать код в буфер обмена
  1. $pages = ceil(число элементов / число элементов на странице);
4. Mister - 03 Апреля, 2009 - 19:49:52 - перейти к сообщению
Общее количество постов нахожу теперь
PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT * FROM meropr WHERE meropr_date<NOW()");
  2. $posts = mysql_num_rows($result);


JustUserR пишет:
Напшиите в ваш .htaccess фйл рядом с вашей программой следующее
php_value error_reporting E_ALL & ~E_NOTICE


но ведь ошибка никуда не уйдёт.
Хотя итак всё корректно работает.
5. Гость - 03 Апреля, 2009 - 20:37:15 - перейти к сообщению
Это не ошибка идаже не предупреждение а просто нотис - на него можно не обращать внимания - вам просто говорят что прееменаня не определена

 

Powered by ExBB FM 1.0 RC1