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

 PHP.SU

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


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

> Описание: Читала статью, но не получается.
SofiaKit
Отправлено: 07 Сентября, 2010 - 13:09:48
Post Id


Частый гость


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


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




Ребята, читала эту статью, но так и не поняла. Застряла в самом начале.
Вот кусок кода:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. mysql_connect('localhost', 'root', '') or die('error! Нет соединения с сервером mysql!');
  4. mysql_select_db('base') or die('error! Нет соединения с базой данных!');
  5. mysql_query('SET NAMES cp1251');
  6.  
  7. // Переменная хранит число сообщений выводимых на станице
  8. $num = 2;
  9. // Извлекаем из URL текущую страницу
  10. $page = $_GET['page'];
  11. // Определяем общее число сообщений в базе данных
  12. $result = mysql_query("SELECT COUNT(*) FROM news");
  13. $posts = mysql_fetch_row($result);
  14. // Находим общее число страниц
  15. $total = intval(($posts - 1) / $num) + 1;
  16. // Определяем начало сообщений для текущей страницы
  17. $page = intval($page);
  18. // Если значение $page меньше единицы или отрицательно
  19. // переходим на первую страницу
  20. // А если слишком большое, то переходим на последнюю
  21. if(empty($page) or $page < 0) $page = 1;
  22.   if($page > $total) $page = $total;
  23. // Вычисляем начиная к какого номера
  24. // следует выводить сообщения
  25. $start = $page * $num - $num;
  26. // Выбираем $num сообщений начиная с номера $start
  27. $result = mysql_query("SELECT * FROM news LIMIT $start, $num");
  28. // В цикле переносим результаты запроса в массив $postrow
  29. while ( $postrow[] = mysql_fetch_array($result))
  30. ?>
  31.  

и у меня выдает ошибку на 15 строке:

подскажите плз, с чем это связанно?
 
 Top
SAD Модератор
Отправлено: 07 Сентября, 2010 - 13:19:38
Post Id



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


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




замените $posts = mysql_fetch_row($result); на $posts = mysql_result($result, 0);
 
 Top
Uchkuma
Отправлено: 07 Сентября, 2010 - 13:26:27
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




Тут судя по всему должно быть $posts['COUNT(*)'];
SofiaKit пишет:
и у меня выдает ошибку на 15 строке
Неплохо было бы приводить текст ошибки. У вас видимо "Unsupported operand types".

(Отредактировано автором: 07 Сентября, 2010 - 14:03:05)

 
 Top
SofiaKit
Отправлено: 07 Сентября, 2010 - 13:34:36
Post Id


Частый гость


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


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




на вашем форуме не хватает кнопки - СПАСИБО Радость действительно. Ребята, Вы очень помогли, огромное спасибо!
(Добавление)
тут же образовалась еще одна непонятка... в переменной $num я определила чтоб высвечивалось 2 сообщения на странице, но если у меня к примеру в бд записано 1 или 3 сообщения, то всеравно на странице отображаются данные, если в бд их нет, то просто таблица пустая, но отображается:
PHP:
скопировать код в буфер обмена
  1. for($i = 0; $i < $num; $i++)
  2. {
  3. echo "
  4. <fieldset>
  5.   <legend>".$postrow[$i]['theme_news']." [дата:".$postrow[$i]['date_news'].":::автор:".$postrow[$i]['users_news']."]</legend>
  6.   &nbsp;&nbsp;".$postrow[$i]['text_news']."
  7. </fieldset>
  8. ";
  9. }

хотелось б чтоб фактически отображалось, к примеру 3 новости в бд, чтоб на первой 2 новости отображалось, а на второй странице еще одна... без пустых таблиц... ммм... как я запутанно объяснила, но если не понятно, могу скриншот сделать Улыбка подскажите плз как сделать.
 
 Top
cHameleon
Отправлено: 07 Сентября, 2010 - 15:25:31
Post Id



Гость


Покинул форум
Сообщений всего: 107
Дата рег-ции: Янв. 2010  


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




а зачем еще через for делать, когда всё выводится через while?


-----
берём notepad++ и творим пэхэпэ-мир
 
 Top
SofiaKit
Отправлено: 07 Сентября, 2010 - 15:36:11
Post Id


Частый гость


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


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




cHameleon мм... не поняла. Я судя из примера, вот через while цикл у меня не получилось. поэтому просто скопипастила пример. вот.
 
 Top
cHameleon
Отправлено: 07 Сентября, 2010 - 15:51:22
Post Id



Гость


Покинул форум
Сообщений всего: 107
Дата рег-ции: Янв. 2010  


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




PHP:
скопировать код в буфер обмена
  1. while ( $postrow = mysql_fetch_array($result)) {
  2.       echo "
  3.      <fieldset>
  4.        <legend>".$postrow['theme_news']." [дата:".$postrow['date_news'].":::автор:".$postrow['users_news']."]</legend>
  5.        &nbsp;&nbsp;".$postrow['text_news']."
  6.      </fieldset>
  7.      ";
  8. }


-----
берём notepad++ и творим пэхэпэ-мир
 
 Top
SofiaKit
Отправлено: 07 Сентября, 2010 - 15:54:06
Post Id


Частый гость


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


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




cHameleon Не понял точно Улыбка спасибо огромное! то что надо Улыбка
 
 Top
cHameleon
Отправлено: 07 Сентября, 2010 - 16:08:49
Post Id



Гость


Покинул форум
Сообщений всего: 107
Дата рег-ции: Янв. 2010  


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




какая то непонятная вещь
PHP:
скопировать код в буфер обмена
  1. if(empty($page) or $page < 0) $page = 1;

получается, что любая выбранная страница больше нуля будет равна 1.


-----
берём notepad++ и творим пэхэпэ-мир
 
 Top
SofiaKit
Отправлено: 23 Октября, 2010 - 11:54:44
Post Id


Частый гость


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


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




очередная сложность возникла. Вобщем в страницу вставила скрипт, чтоб не создавать дополнительные файлы php. Выглядит вот так:
Файл index.php:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  $page = (isset($_GET['page']) && !empty($_GET['page']))?trim($_GET['page']):'index';
  3.  switch($page){
  4.      case 'index':
  5.          echo 'index';
  6.      break;
  7.      case 'files':
  8.          echo 'files';
  9.      default:
  10.          echo '404';
  11.      break;
  12.  }
  13.  ?>


Теперь когда я открываю: index?page=files то отображается содержимое case 'files':, когда index?page=index то содержимое case 'index':.

Так вот, хочу в case 'index': вставить скрипт новости, той, которая в самом первом сообщение, но не получается... потаму что переменные page совпадают, поэтому переменную в скрипте новости page переименовала news, но всеравно не получается, отображается только первая страница новости, а на другие не переключается, помогите разобраться плз, очень прошу... ну или по аське 913566 (ответ на запрос: Кит).
 
 Top
SofiaKit
Отправлено: 29 Октября, 2010 - 19:39:27
Post Id


Частый гость


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


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




Ребят, помогите разобраться с этим наконец, пожалуйста, чувствую кручусь где-то рядом, но не получается.
 
 Top
DlTA
Отправлено: 29 Октября, 2010 - 23:17:19
Post Id



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


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


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




SofiaKit а зачем дважды проверяется $_GET['page']?

а если изменить конструкция на ченить попроще
типа:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         if (isset($_GET['page']))
  3.         {
  4.                 switch ($_GET['page'])
  5.                 {
  6.                         case 'index':
  7.                                 if (isset($news))
  8.                                 {
  9.                                         // вывод нужной новости
  10.                                 }
  11.                                 break;
  12.                         case 'files': /* вывод по files*/ break;
  13.                         default: /*вывод по умолчанию*/ break;
  14.                 }
  15.         }
  16.         else
  17.         {
  18.                 /* вывод */
  19.         }
  20. ?>

(Отредактировано автором: 29 Октября, 2010 - 23:18:54)

 
 Top
SofiaKit
Отправлено: 30 Октября, 2010 - 19:53:49
Post Id


Частый гость


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


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




DlTA пишет:
SofiaKit а зачем дважды проверяется $_GET['page']?

а если изменить конструкция на ченить попроще
типа:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         if (isset($_GET['page']))
  3.         {
  4.                 switch ($_GET['page'])
  5.                 {
  6.                         case 'index':
  7.                                 if (isset($news))
  8.                                 {
  9.                                         // вывод нужной новости
  10.                                 }
  11.                                 break;
  12.                         case 'files': /* вывод по files*/ break;
  13.                         default: /*вывод по умолчанию*/ break;
  14.                 }
  15.         }
  16.         else
  17.         {
  18.                 /* вывод */
  19.         }
  20. ?>


а если надо на вторую страницу новости перейти? Вот разделение я не понимаю Недовольство, огорчение

будет якобы index?page=index&news=1?
 
 Top
Варяг
Отправлено: 31 Октября, 2010 - 03:50:06
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Окт. 2010  


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




cHameleon пишет:
какая то непонятная вещь

PHP:
скопировать код в буфер обмена
if(empty($page) or $page < 0) $page = 1;

получается, что любая выбранная страница больше нуля будет равна 1.

меньше нуля, потомучто потом при вычислении $start возникнет отрицательное число.

1*2-2=0
2*2-2=2
3*2-2=4
4*2-2=6

SofiaKit, у Вас переменная page отвечает за страницы. При смене страниц вычисляется $start, которая в запросе Limit ограничивает выбор данных

(Отредактировано автором: 31 Октября, 2010 - 03:51:29)

 
 Top
SofiaKit
Отправлено: 11 Июля, 2011 - 13:20:23
Post Id


Частый гость


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


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




я поняла:
index?page=index&news=1
это уже следующая страница тогда должна быть... ну а просто новостная первая:
index?page=index&news

так тоже не работает, что-же не так...

вот из последнего чего наковыряла брать примеры из темы:
PHP:
скопировать код в буфер обмена
  1. <?
  2. include("../bd.php");
  3. // Переменная хранит число сообщений выводимых на станице
  4. $num = 2;
  5. // Извлекаем из URL текущую страницу
  6. $page = $_GET['page'];
  7. // Определяем общее число сообщений в базе данных
  8. $result = mysql_query("SELECT COUNT(*) FROM news");
  9. $posts = mysql_result($result, 0);
  10. // Находим общее число страниц
  11. $total = intval(($posts - 1) / $num) + 1;
  12. // Определяем начало сообщений для текущей страницы
  13. $page = intval($page);
  14. // Если значение $page меньше единицы или отрицательно
  15. // переходим на первую страницу
  16. // А если слишком большое, то переходим на последнюю
  17. if(empty($page) or $page < 0) $page = 1;
  18.   if($page > $total) $page = $total;
  19. // Вычисляем начиная к какого номера
  20. // следует выводить сообщения
  21. $start = $page * $num - $num;
  22. // Выбираем $num сообщений начиная с номера $start
  23. $result = mysql_query("SELECT * FROM news ORDER BY `date` DESC LIMIT $start, $num");
  24. // В цикле переносим результаты запроса в массив $postrow
  25.  
  26. if (isset($_GET['page']))
  27.         {
  28.         switch ($_GET['page'])
  29.         {
  30.         case 'index':
  31.         if (isset($news))
  32.         {
  33.          while ( $postrow = mysql_fetch_array($result))
  34.                  {
  35.                         echo "id новости: ".$postrow['news_id'].".<br>";
  36.                  }   // вывод нужной новости
  37.         }
  38.         break;
  39.         case 'files': /* вывод по files*/ break;
  40.         default:
  41.                 echo "такой страницы кажется нет";
  42.                 break;
  43.         }
  44.         }
  45.         else
  46.         {
  47.           while ( $postrow = mysql_fetch_array($result))
  48.                         {
  49.                         echo "id новости: ".$postrow['news_id'].".<br>";
  50.                         }
  51.                  
  52.         }
  53.                 ?>


страница по умолчанию: новости 1 страница открывается. Вот как на вторую перейти?

(Отредактировано автором: 26 Июля, 2011 - 04:10:41)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB