Тема: Постраничная на РНР для новостей

Ответить в теме
Показано с 1 по 6 из 6
  1. Вверх #1
    Новичок
    Пол
    Мужской
    Адрес
    Северск
    Сообщений
    7
    Репутация
    10

    По умолчанию Постраничная на РНР для новостей

    В чём не правильно написание кода, так как из 13 новостей на странице вывода всех их они выводятся понятно как десять последних, с 4- по 13 на первой странице, но после перехода на 2 постраничную отображается опять то же самое с 4-по 13, а правильно должно быть с 1- по 3.

    Код данного скрипта:
    $kolvo=10; //кол-во выводимых новостей на странице
    $allnews=mysql_num_rows(mysql_query("SELECT id FROM tb_news"));$allsqls++; //общее кол-во новостей
    $vsego=intval($allnews/$kolvo);
    $nowpage=intval($_GET["pg"]);
    if($nowpage=='') $nowpage=1;
    if($nowpage-1>$vsego) $nowpage=$vsego;
    if(!isset($_GET["pg"])) $nowpage=1;
    $gg=$vsego*$kolvo;
    if($gg<$allnews) { $vsego=$vsego+1; }
    $pages=$vsego/$kolvo;
    $pages1=floor($pages);
    $pg1=$kolvo*($nowpage-1);
    $pg2=$kolvo*$nowpage;
    if($nowpage==$vsego) { $pg1=0; $pg2=$kolvo; }

    if($pages>$pages1)
    {
    $pages=$pages1+1;
    }

    $sql="select * from tb_news order by id desc LIMIT $pg1,$pg2";

    Ошибка находится в выделенном тексте кода, с применением переменной $pg2, в которой надо отобразить оставшиеся (3)новости. А знак (*) делает умножение количества на все.
    Весьма буду признателен за все подсказки или советы.


  2. Вверх #2
    Новичок Аватар для phoenix78
    Пол
    Мужской
    Возраст
    47
    Сообщений
    89
    Репутация
    33
    По идее, если замените
    PHP код:
    $pg1=$kolvo*($nowpage-1);
    $pg2=$kolvo*$nowpage;
    if(
    $nowpage==$vsego) { $pg1=0$pg2=$kolvo; } 
    на
    PHP код:
    $pg1 max(0, ($allnews $nowpage*$kolvo));
    $pg2 min($kolvo, ($allnews-$pg1)); // Вообще, эта строка может быть безболезненно урезана до $pg2 = $kolvo; Такое же ограничение за вас сделает БД. 
    то должно работать.

    ---
    PS: Продолжайте работать над собой) Я увидел как минимум две серьезные проблемы.
    1. По-моему, Вы не понимаете как работает limit. Второй аргумент - это не позиция последнего элемента выборки, а количество.
    2. стиль написания оставляет желать лучшего
    Последний раз редактировалось phoenix78; 10.09.2013 в 11:45.

  3. Вверх #3
    Посетитель Аватар для Нулевой
    Пол
    Мужской
    Адрес
    Одесса
    Возраст
    36
    Сообщений
    216
    Репутация
    126
    Цитата Сообщение от phoenix78 Посмотреть сообщение
    [*] стиль написания оставляет желать лучшего[/LIST]
    Как по мне стиль вообще жесть, да и вообще пагинаторов готовых полно, зачем изобретать велосипед
    Свобода лечит лучше всего

  4. Вверх #4
    Новичок
    Пол
    Мужской
    Адрес
    Северск
    Сообщений
    7
    Репутация
    10
    Спасибо конечно и за это, хотя не получилось, но зато хоть какое то представление потихоньку буду иметь, правильнее посоветовали удалить лишние строки:

    if($nowpage==$vsego) { $pg1=0; $pg2=$kolvo; }
    if($pages>$pages1)
    {
    $pages=$pages1+1;
    }

    Все это взял из последнего скрипта букса, приходится его совмещать с сайтом, на подпапку (очень много файлов около 200).

  5. Вверх #5
    Новичок
    Пол
    Мужской
    Возраст
    35
    Сообщений
    25
    Репутация
    12
    за такой код надо бить учебником по голове имхо...

  6. Вверх #6
    Посетитель Аватар для Нулевой
    Пол
    Мужской
    Адрес
    Одесса
    Возраст
    36
    Сообщений
    216
    Репутация
    126
    http://cidocs.ru/213/general/styleguide.html
    можно посмотреть здесь, либо на хабре почитать.
    Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
    Свобода лечит лучше всего


Ответить в теме

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения