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 :: Pagination

 PHP.SU

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


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

> Описание: -----
file.shreder
Отправлено: 09 Ноября, 2014 - 15:55:57
Post Id


Посетитель


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


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

[+]


Есть index.php в нем есть строка
CODE (html):
скопировать код в буфер обмена
  1. <span><a href="?do=articles">Все статьи</a></span>

которая ведет на контроллер определяющий articles как articles.php.
и есть articles.php
в котором есть

я так понимаю этот _GET должен из index.php получить строку типа

как то так..
Как это правильно сделать... ?? где заблаговременно должно быть указано, что страница по этой ссылке есть ПЕРВАЯ, чтобы уже потом пагинация начиналась?? по всякому пробовал, так и не получилось
 
 Top
dXdYdZ
Отправлено: 09 Ноября, 2014 - 17:26:23
Post Id


Посетитель


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


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




PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['page']))
  2.    $page = $_GET['page'];
  3. else
  4.    $page=1;

Либо так:
PHP:
скопировать код в буфер обмена
  1. $page=isset($_GET['page'])?$_GET['page']:1;

То есть, если не передан номер страницы в запросе, то $page становится равным 1.
 
 Top
file.shreder
Отправлено: 09 Ноября, 2014 - 17:34:37
Post Id


Посетитель


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


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

[+]


dXdYdZ пишет:
PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['page']))
  2.    $page = $_GET['page'];
  3. else
  4.    $page=1;

Либо так:
PHP:
скопировать код в буфер обмена
  1. $page=isset($_GET['page'])?$_GET['page']:1;

То есть, если не передан номер страницы в запросе, то $page становится равным 1.

Видишь, я пробовал так, только без
в конце.. ошибка ушла.. но здесь еще ошибка выпрыгивает
Notice: Undefined variable: и те переменные что находятся в скрипте который следом за выводом текста на страницу идет...
(Добавление)
PHP:
скопировать код в буфер обмена
  1. if(empty($_GET['page']) or $_GET['page'] < 0) $page = 1;

вообще в коде было такое..
(Добавление)
выводится только номер страницы, а ссылок то есть нету, назад и вперед которые
 
 Top
dXdYdZ
Отправлено: 09 Ноября, 2014 - 17:41:41
Post Id


Посетитель


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


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




Я не совсем понял, так как я написал, работает или нет? И если нет, то на какую строчку указывает Notice?
 
 Top
file.shreder
Отправлено: 09 Ноября, 2014 - 17:47:38
Post Id


Посетитель


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


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

[+]


Короче у меня было так
PHP:
скопировать код в буфер обмена
  1. if ($page != 1) $pervpage=link
  2. if ($page != $total) $nextpage =link
  3.  

сделал так
PHP:
скопировать код в буфер обмена
  1. if ($page = 1) $pervpage=link
  2. if ($page = $total) $nextpage =link

появились ссылки, но сообщение об ошибке не пропало
Хотя, если отключить предупреждения, то их как бы и не будет... или ч этим бороться все же надо?
(Добавление)
На эти строчки и указывает Нотисе
(Добавление)
и в строке запроса 1 на 2 меняется, но не переходит..то есть что было на екране, то и остается..
 
 Top
dXdYdZ
Отправлено: 09 Ноября, 2014 - 17:59:59
Post Id


Посетитель


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


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




Как ты получаешь переменную $page из массива $_GET?
Ты используешь этот код
PHP:
скопировать код в буфер обмена
  1. $page=isset($_GET['page'])?$_GET['page']:1;

либо этот
PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['page']))
  2.    $page = $_GET['page'];
  3. else
  4.    $page=1;

либо делаешь как-то по-своему?
Лучше скинь в эту тему весь код файла, в котором осуществляется работа со страницами.
 
 Top
file.shreder
Отправлено: 09 Ноября, 2014 - 18:03:52
Post Id


Посетитель


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


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

[+]


короче - вот он, родимый
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.                  
  3. require "database_connection.php";
  4.       //записей в базе мало, лень добавлять, поэтому поставил 2 записи на экран        
  5. $num = 2;
  6.                
  7. $page=isset($_GET['page'])?$_GET['page']:1;
  8.                  
  9. $result = mysql_query("SELECT COUNT(*) FROM articles");
  10. $posts = mysql_num_rows($result);
  11.                  
  12.  $total = intval(($posts - 1) / $num) + 1;
  13.   echo $result;
  14. echo $posts;
  15. $page = intval($page);
  16.           //так было у меня , но я выше исправил на твое, а это убрал        
  17. //if(empty($_GET['page']) or $_GET['page'] < 0) $page = 1;
  18.   if($page > $total) $page = $total;
  19.              
  20. $start = $page * $num - $num;
  21.        
  22. $result = mysql_query("SELECT * FROM articles LIMIT $start, $num");
  23. if (!$result){ die (mysql_error());}
  24.      
  25.  
  26. for ($c=0; $c<mysql_num_rows($result); $c++)
  27. {
  28. $articles[] = mysql_fetch_array($result);
  29. }?>
  30.  <?foreach($articles as $article): ?>
  31.    <div id="articles">
  32.      <div id="title"><h3>
  33.          <?=$article['title']?></h3>
  34.      </div>
  35.      <div id="view">
  36.       <?=$article['view']?> Переглядів
  37.      </div>
  38.          <div id="date">
  39.          <?=$article['date']?>
  40.      </div>
  41.  
  42. <? endforeach; ?>
  43.  
  44. <?
  45.  
  46. if ($page != 1) $pervpage = '<a href= ?do=articles&page=1><<</a>
  47.                               <a href= ?do=articles&page='. ($page - 1) .'><</a> ';
  48.  
  49. if ($page != $total) $nextpage = ' <a href= ?do=articles&page='. ($page + 1) .'>></a>
  50.                                   <a href= ?do=articles&page=' .$total. '>>></a>';
  51.  
  52.  
  53. if($page - 2 > 0) $page2left = ' <a href= ?do=articles&page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
  54. if($page - 1 > 0) $page1left = '<a href= ?do=articles&page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
  55. if($page + 2 <= $total) $page2right = ' | <a href= ?do=articles&page='. ($page + 2) .'>'. ($page + 2) .'</a>';
  56. if($page + 1 <= $total) $page1right = ' | <a href=?do=articles&page='. ($page + 1) .'>'. ($page + 1) .'</a>';
  57.  
  58.  
  59. echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;
  60.  
  61. ?>
 
 Top
dXdYdZ
Отправлено: 09 Ноября, 2014 - 18:20:28
Post Id


Посетитель


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


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




С ходу вижу недоработки вот тут:
1) url-адреса ссылок надо заключать в кавычки.
Не так:
PHP:
скопировать код в буфер обмена
  1. if($page - 2 > 0) $page2left = ' <a href= ?do=articles&page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';

А так:
PHP:
скопировать код в буфер обмена
  1. if($page - 2 > 0) $page2left = ' <a href="?do=articles&page='. ($page - 2) .'">'. ($page - 2) .'</a> | ';

И так везде.
(Добавление)
2) Вместо
PHP:
скопировать код в буфер обмена
  1. if ($page != 1) $pervpage = '<a href= ?do=articles&page=1><<</a>
  2.                              <a href= ?do=articles&page='. ($page - 1) .'><</a> ';
  3.  
  4. if ($page != $total) $nextpage = ' <a href= ?do=articles&page='. ($page + 1) .'>></a>
  5.                                  <a href= ?do=articles&page=' .$total. '>>></a>';

Лучше сделать так:
PHP:
скопировать код в буфер обмена
  1. if ($page > 1) $pervpage = '<a href="?do=articles&page=1"><<</a>
  2.                              <a href="?do=articles&page='. ($page - 1) .'"><</a> ';
  3. else
  4.    $pervpage='';
  5.  
  6. if ($page < $total) $nextpage = ' <a href="?do=articles&page='. ($page + 1) .'">></a>
  7.                                  <a href="?do=articles&page=' .$total. '">>></a>';
  8. else
  9.    $nextpage='';

(Добавление)
Запустить твой код я сейчас не могу, так как сервер запустится только после перезагрузки, поэтому остальное посмотрю позже. Может, до этого кто-нибудь другой ошибку найдёт.
 
 Top
file.shreder
Отправлено: 09 Ноября, 2014 - 18:36:53
Post Id


Посетитель


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


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

[+]


dXdYdZ пишет:
С ходу вижу недоработки вот тут:
1) url-адреса ссылок надо заключать в кавычки.

не работает все равно.. там видать еще раньше ошибка есть...
(Добавление)
показывает только страница 1...и никаких ссылок
(Добавление)
в адресной строке меняется 1 на 2, а дальше перехода нет... и статьи не меняются, только цифра в адресной строке
 
 Top
dXdYdZ
Отправлено: 09 Ноября, 2014 - 19:36:03
Post Id


Посетитель


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


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




Вот так работает:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.                  
  3. require "database_connection.php";
  4.       //записей в базе мало, лень добавлять, поэтому поставил 2 записи на экран        
  5. $num = 2;
  6.                
  7. $page=isset($_GET['page'])?$_GET['page']:1;
  8.                  
  9. $result = mysql_query("SELECT COUNT(*) FROM articles");
  10. $data=mysql_fetch_array($result);
  11. $posts = $data[0];
  12.                  
  13.  $total = intval(($posts - 1) / $num) + 1;
  14.   echo $result;
  15. echo $posts;
  16. $page = intval($page);
  17.           //так было у меня , но я выше исправил на твое, а это убрал        
  18. //if(empty($_GET['page']) or $_GET['page'] < 0) $page = 1;
  19.   if($page > $total) $page = $total;
  20.              
  21. $start = $page * $num - $num;
  22.        
  23. $result = mysql_query("SELECT * FROM articles LIMIT $start, $num");
  24. if (!$result){ die (mysql_error());}
  25.      
  26.  
  27. for ($c=0; $c<mysql_num_rows($result); $c++)
  28. {
  29. $articles[] = mysql_fetch_array($result);
  30. }?>
  31.  <?foreach($articles as $article): ?>
  32.    <div id="articles">
  33.      <div id="title"><h3>
  34.          <?=$article['title']?></h3>
  35.      </div>
  36.      <div id="view">
  37.       <?=$article['view']?> Переглядів
  38.      </div>
  39.          <div id="date">
  40.          <?=$article['date']?>
  41.      </div>
  42.  
  43. <? endforeach; ?>
  44.  
  45. <?
  46.  
  47. if ($page > 1) $pervpage = '<a href="?do=articles&page=1"><<</a>
  48.                             <a href="?do=articles&page='. ($page - 1) .'"><</a> ';
  49. else
  50.    $pervpage='';
  51.  
  52. if ($page < $total) $nextpage = ' <a href="?do=articles&page='. ($page + 1) .'">></a>
  53.                                 <a href="?do=articles&page=' .$total. '">>></a>';
  54. else
  55.    $nextpage='';
  56. // var_dump($total);
  57.  
  58. if($page - 2 > 0) $page2left = ' <a href= ?do=articles&page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
  59. else $page2left='';
  60. if($page - 1 > 0) $page1left = '<a href= ?do=articles&page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
  61. else $page1left='';
  62. if($page + 2 <= $total) $page2right = ' | <a href= ?do=articles&page='. ($page + 2) .'>'. ($page + 2) .'</a>';
  63. else $page2right='';
  64. if($page + 1 <= $total) $page1right = ' | <a href=?do=articles&page='. ($page + 1) .'>'. ($page + 1) .'</a>';
  65. else $page1right='';
  66.  
  67.  
  68. echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;
  69.  
  70. ?>

Основная ошибка заключалась в том, что ты получал количество постов с помощью

$posts при этом всегда будет равен 1, так как количество возвращённых строк в данном случае-всегда 1, потому что возвращается только 1 строка с количеством count(*).
Вместо этого надо было сделать так:

В данном случае мы получаем в переменную posts значение, полученное с помощью count(*)
(Добавление)
И ещё, я этого не делал в твоём коде, но всё же очень желательно ввести url-адреса ссылок, возвращаемых скриптом, в кавычках, а не просто так.
 
 Top
file.shreder
Отправлено: 09 Ноября, 2014 - 19:49:23
Post Id


Посетитель


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


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

[+]


dXdYdZ пишет:

у меня сначала так ибыло, только без
что это значит? действительно заработало!!! Можешь про $posts = $data[0]; пояснить?
а нотис
CODE (htmlphp):
скопировать код в буфер обмена
  1. Notice: Undefined variable: page2left in Z:\home\test2.ru\www\admin\articles.php on line 63
  2. [Денвер: показать возможную причину ошибки]
  3. Notice: Undefined variable: page1right in Z:\home\test2.ru\www\admin\articles.php on line 63
  4.  
  5. Notice: Undefined variable: page2right in Z:\home\test2.ru\www\admin\articles.php on line 63
все равно присутствует
(Добавление)
а кавычки я сразу еще исправил
(Добавление)
и кстати совет изменить mysql_fetch_array на mysql_num_rows я нашел тут на форуме
(Добавление)
http://forum.php.su/topic.php?fo...m=33&topic=4
 
 Top
dXdYdZ
Отправлено: 09 Ноября, 2014 - 19:58:59
Post Id


Посетитель


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


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




file.shreder пишет:
что это значит? действительно заработало!!! Можешь про $posts = $data[0]; пояснить?

Ну, запрос
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT(*) FROM articles

Вернёт 1 строку, в которой есть только 1 элемент - количество записей в таблице articles/
Этот код

Вернёт массив, который содержит значения из первой и единственной строки результата

Вернёт нулевой (то есть первый по счёту) элемент этого массива, то есть первый (и, в данном случае, единственный) результат - число, выведенное конструкцией COUNT(*).
(Добавление)
Почитай про функцию mysql_fetch_array (http://www.php.su/mysql_fetch_array )
 
 Top
file.shreder
Отправлено: 09 Ноября, 2014 - 20:01:34
Post Id


Посетитель


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


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

[+]


по поводу ошибки видать необходимо сделать если нет ссылки то " "?
 
 Top
dXdYdZ
Отправлено: 09 Ноября, 2014 - 20:02:47
Post Id


Посетитель


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


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




file.shreder пишет:
скопировать код в буфер обмена
Notice: Undefined variable: page2left in Z:\home\test2.ru\www\admin\articles.php on line 63
[Денвер: показать возможную причину ошибки]
Notice: Undefined variable: page1right in Z:\home\test2.ru\www\admin\articles.php on line 63
 
Notice: Undefined variable: page2right in Z:\home\test2.ru\www\admin\articles.php on line 63
все равно присутствует

Ты весь мой код себе скопировал? У меня никаких предупреждений нету.
 
 Top
file.shreder
Отправлено: 09 Ноября, 2014 - 20:04:29
Post Id


Посетитель


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


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

[+]


dXdYdZ пишет:
file.shreder пишет:
что это значит? действительно заработало!!! Можешь про $posts = $data[0]; пояснить?

Ну, запрос
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT(*) FROM articles

Вернёт 1 строку, в которой есть только 1 элемент - количество записей в таблице articles/
Этот код

Вернёт массив, который содержит значения из первой и единственной строки результата

Вернёт нулевой (то есть первый по счёту) элемент этого массива, то есть первый (и, в данном случае, единственный) результат - число, выведенное конструкцией COUNT(*).
(Добавление)
Почитай про функцию mysql_fetch_array (http://www.php.su/mysql_fetch_array )
ААААААААААААААААААААААААААААААААААААААААААААААААААААА!!!!
АААААААААААААААААААААААААААААААА ААААААААААААААААААААААААААААА А?!
(Добавление)
я не скопировал, и забыл сделать иначе " " потому и сигнализировало, что пустая переменная
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB