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 :: Алгоритм ограничения новостных материалов на одну страницу сайта [3]

 PHP.SU

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


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

> Без описания
XXI
Отправлено: 11 Апреля, 2012 - 22:54:32
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Апр. 2012  
Откуда: г. Иваново


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




И так, я сейчас каждую строку разжую.

Выборка статей будет происходить постранично, поэтому для начала определим с какого по какой материал надо выводить, а не выберем.
То есть вашу выборку пока-что отбросим.
PHP:
скопировать код в буфер обмена
  1. $dbdata = mysql_query("SELECT * FROM content", $dbconect);
  2. $pagedata = mysql_fetch_array($dbdata);

Ставим значение статей на страницу - $num равное 10.

Функция mysql_num_rows определяет сколько записей возвращает запрос.
Если у вас 12 записей в таблице, то $count = 12(Это даст нам запрос)

Делим на $num(статей на страницу) и таким образом узнаём сколько у нас будет страниц.
А функция ceil сокращает число до целого(было 3.2, а стало 3, было 3.5, а стало 4).

С помощью $_GET мы вынимаем значение из url вида site.ru/?page=23, то есть $_GET['page'] = 23, если у вас нет значения ?page в адресе(например просто site.ru), то ставиться значение 1(первая страница);
PHP:
скопировать код в буфер обмена
  1. $page = isset($_GET['page']) ? $_GET['page'] : 1;

Здесь мы умножаем нашу страницу($_GET['page']) на макс кол-во записей на странице и отнимаем от значения кол-во записей на страницу. Зачем? Ну вот если у нас 1 страницу, то будет (1 * 10) - 10 = 0 (берём записи из базы с 1), (23 * 10) - 10 = 220(берём записи с 220 статьи)

Параметр ласт похоже можно опустить... Вместо него просто $num.

Теперь вернёмся к нашему запрос
PHP:
скопировать код в буфер обмена
  1. $dbdata = mysql_query("SELECT * FROM content LIMIT {$start}, {$num}");

Он выбирает из базы статьи начиная с 0 10 штук(если первая страница). То есть у LIMIT первое значение с какой страницы выводить, а второе сколько брать.
С циклом надеюсь всё понятно. А если нет, то он перебирает все 10(если макс. кол-во записей на страницу 10) записей и выводит с тем кодом что внутри(Сам while работает по принципу - "Пока верно значение - я буду работать").
PHP:
скопировать код в буфер обмена
  1. <? while($rows = mysql_fetch_array($dbdata)){?>
  2. <?=$rows['id'];?> <?=$rows['title'];?>
  3. <?}

Насчёт for который выводит пагинатор.
Всё просто. for выполняется пока не совпадёт с $count >= $i($count больше или равно $i). То есть 23 записи делим на 10 будет 2 страницы(ВТФ). Цикл делает 2 ссылки на страницы.
PHP:
скопировать код в буфер обмена
  1. <? for($i = 1; $count >= $i; $i++){?>
  2.         <a href="/?page=<?=$i;?>"><?=$i;?></a>
  3. <?}?>

(Добавление)
Вот переписал ваш код чуток, должно всё работать... и большая просьба - НЕ МЕНЯТЬ НИЧЕГО МЕСТАМИ!
PHP:
скопировать код в буфер обмена
  1. <? session_start(); ?>
  2.  
  3. <? include("db_conect.php");
  4. $num = 10;
  5. $page = isset($_GET['page']) ? $_GET['page'] : 1;
  6. $start = ($page * $num) - $num;
  7. $dbdata = mysql_query("SELECT * FROM content LIMIT {$start}, {$last}");
  8. $count = mysql_num_rows(mysql_query("SELECT * FROM content"));
  9. $count = ceil($count/$num);
  10. ?>
  11. <? include("head.php");?>
  12. <? while($pagedata = mysql_fetch_array($dbdata)){
  13.  
  14. do{
  15.         printf("
  16.        <a href='newtmpl.php?id=%s'>%s</a>%s
  17.        <div align='right'>
  18.        <a href='newtmpl.php?id=%s'>Подробнее</a> | Автор: %s | Дата добавления: %s | Коментариев: %s
  19.        </div>
  20.        ",
  21.         $pagedata["id"],$pagedata["title"],$pagedata["introtext"],$pagedata["id"],$pagedata["autor"],$pagedata["date"],$pagedata["views"]);
  22. } while($pagedata = mysql_fetch_array($dbdata));
  23. }?>
  24. <? for($i = 1; $count >= $i; $i++){?>
  25.         <a href="/?page=<?=$i;?>"><?=$i;?></a>
  26.         <?}?>
  27.  
  28. <? include("foot.php"); ?>
 
 Top
netwixell
Отправлено: 11 Апреля, 2012 - 23:09:26
Post Id


Частый гость


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


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

[+]


НЕА АПЯТЬ НЕ ВЕРНО )) Радость
Вот так все верно я исправил теперь количество страниц 2 и увеличиваются от переаолнения страници статьями
PHP:
скопировать код в буфер обмена
  1.  
  2. <? session_start(); ?>
  3.  
  4. <? include("db_conect.php");
  5.         $dbdata = mysql_query("SELECT * FROM content", $dbconect);
  6.         $pagedata = mysql_fetch_array($dbdata);
  7.         $num = 10;
  8.         $page = isset($_GET['page']) ? $_GET['page'] : 1;
  9.         $start = ($page * $num) - $num;
  10.         $last = $num;
  11.         $dbdata = mysql_query("SELECT * FROM content LIMIT {$start}, {$last}");
  12.         $count = mysql_num_rows(mysql_query("SELECT * FROM content"));
  13.         $count = ceil($count/$num);?>
  14.  
  15. <? include("head.php");?>
  16. <? while($pagedata = mysql_fetch_array($dbdata)){
  17.  
  18. do{
  19.         printf("
  20.         <a href='newtmpl.php?id=%s'>%s</a>%s
  21.         <div align='right'>
  22.         <a href='newtmpl.php?id=%s'>Подробнее</a> | Автор: %s | Дата добавления: %s | Коментариев: %s 
  23.         </div>
  24.         ",
  25.         $pagedata["id"],$pagedata["title"],$pagedata["introtext"],$pagedata["id"],$pagedata["autor"],$pagedata["date"],$pagedata["views"]);
  26. } while($pagedata = mysql_fetch_array($dbdata));
  27. }?>
  28.  
  29. <? for($i = 1; $count >= $i; $i++){?>
  30.       <a href="/?page=<?=$i;?>"><?=$i;?></a>
  31. <?}?>
  32.  
  33. <? include("foot.php"); ?>
  34.  


Я на полном серьезе именно так работает иначе не работает ))))

(Отредактировано автором: 11 Апреля, 2012 - 23:10:47)

 
 Top
XXI
Отправлено: 11 Апреля, 2012 - 23:14:27
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Апр. 2012  
Откуда: г. Иваново


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




Цитата:
и увеличиваются от переаолнения страници статьями

Это как?
 
 Top
netwixell
Отправлено: 11 Апреля, 2012 - 23:24:47
Post Id


Частый гость


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


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

[+]


XXI пишет:
Цитата:
и увеличиваются от переполнения страници статьями
тоесть когда добегает до 10 статей на стр
Это как?

(Добавление)
тоесть апсолютно так как сдесь на форуме когда я создал тему то это была 1 страница а сей час мы на 3 странице))
(Добавление)
изза переполнения 1 страници потом 2 и потом когда то в будующеем и теперешней 3
(Добавление)
ДА И ООООГРОМНОЕ СПАСИБОООО
 
 Top
XXI
Отправлено: 11 Апреля, 2012 - 23:36:57
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Апр. 2012  
Откуда: г. Иваново


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




Растерялся Так это всё, что вы хотели?
 
 Top
netwixell
Отправлено: 11 Апреля, 2012 - 23:42:42
Post Id


Частый гость


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


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

[+]


НУ Я ДУМАЛ ВЫ ИМЕННО К ЭТОМУ МЕНЯ И ВЕЛИ ЧТОБ сделать построничьный вывод статей вапрос канечьно можно продолжать расширять ибо меня никогда не устроит ситуация которая есть на текущий момент теперь как бы логичьно было бы чтоб старые статьи были на последних страницах а новые на первой а сейчас они публикуются ровно по id тоесть свежие на последних стр а старые на первой ибо публикация и вывод статей производится по ходу id
 
 Top
XXI
Отправлено: 11 Апреля, 2012 - 23:47:18
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Апр. 2012  
Откуда: г. Иваново


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




Это поменяй
PHP:
скопировать код в буфер обмена
  1. $dbdata = mysql_query("SELECT * FROM content LIMIT {$start}, {$last}");

На это
PHP:
скопировать код в буфер обмена
  1. $dbdata = mysql_query("SELECT * FROM content ORDER BY id DESC LIMIT {$start}, {$last}");

Вроде так... Закатив глазки
(Добавление)
netwixell пишет:
меня никогда не устроит ситуация которая есть на текущий момент

Ха-ха Вы правы
 
 Top
netwixell
Отправлено: 11 Апреля, 2012 - 23:51:03
Post Id


Частый гость


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


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

[+]


да спасибо супер интересно возможно я и заставил тебя думать что я хочу чего то большего интересно как просто ? может я нерничал и не мог успокоится поэтому нагаварил баламуты разной поэтому показалось что я много че хачу сделать
 
 Top
XXI
Отправлено: 11 Апреля, 2012 - 23:53:24
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Апр. 2012  
Откуда: г. Иваново


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




Ниндзя Может быть, может быть...
 
 Top
netwixell
Отправлено: 11 Апреля, 2012 - 23:58:47
Post Id


Частый гость


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


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

[+]


продолжений много очень много тоесть тема имеет развитие именно сдесь можно опсудить алгоритмы регистрации на сайте отправки письма подтверждения на почьту вывод картинок для ввода кода на картинке при регистрации придание сайту индивидуального вида для каждого пользователя ограничение функционала для гостей имеется плеет собственно он имеет 1 папку куда закидывается музыка для воспроизведения - стало быть при регистрации нового человека создавалась его личьная база треков плеера и выгрузка трека в плеет при простом нажатии на ссылку на сайте
(Добавление)
)))))
 
 Top
Страниц (3): « 1 2 [3]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB