Ошибка в постраничной на РНР для новостей

K1
На сайте с 01.05.2012
Offline
18
498

В чём не правильно написание кода, так как из 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)новости. А знак (*) делает умножение количества на все.

Весьма буду признателен за все подсказки или советы.

D
На сайте с 14.01.2007
Offline
153
#1

для начала ошибка здесь->$vsego=intval($allnews/$kolvo);

у вас получается 1, а должно быть 2

R
На сайте с 18.12.2009
Offline
92
#2

http://www.softtime.ru/info/articlephp.php?id_article=33

Тут подход более похожий на Ваш. Указал ссылку с надеждой, что Вы почитаете комменты к коду в источнике. Хорошо ведь понимать написанный код?

XL
На сайте с 16.01.2007
Offline
88
#3

Вот что сразу пришло в голову. Может поможет.

<?php

$news_array = array();//массив полученный из БД в порядке: "последняя новость самая первая"

$news_per_page = 10;//новостей на страницу
$all_news = count($news_array);//всего новостей
if($all_news % $news_per_page > 0)
$pages = intval($all_news / $news_per_page) + 1;
if($all_news % $news_per_page == 0)
$pages = intval($all_news / $news_per_page);

if(isset($_GET['pg']) && is_int($_GET['pg'])){//не NULL и целочисленное
$current_page = intval($_GET['pg']);
if($current_page <= 0) $current_page = 1;
if($current_page > $pages) $current_page = $pages;

for($page_n = 0; $page_n <= $pages; $page_n++){
$news_left = $all_news - $page_n * $news_per_page;
//TODO: осталось порезать $news_array на несколько массивов
}
}
?>
sashka_
На сайте с 27.01.2010
Offline
103
#4

напиши в самом низу скрипта

echo $sql;

и смотри какие числа подставляются, в limit и дальше делай выводы где не правильно подсчёт пошёл, а вообще всё через одно место делаешь, видно или учишь или чужой код юзаешь.

Получаешь текущую страницу, прибавляешь единицу ( это если у тебя вторая страница будет с номером 1) и умножаешь на количество новостей и пишешь это значение в limit

Знаю PHP, JS, jQuery. Помощь для вашего сайта. (/ru/forum/840509).

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий