LINUX.ORG.RU

Ошибка постраничной на РНР

 , постранично


0

1

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

Код данного скрипта(его начало): <code=php> <? $username=$nameus; $newid=$_GET[«id»]; if($newid=="") { // Ошибка наверняка в ниже выделенном коде $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»; while ($row=mysql_fetch_array($res)) { </code> Весьма признателен за подсказки или советы.



Последнее исправление: bl0geps (всего исправлений: 9)

совет №1: оформи код нормально.

qnikst ★★★★★
()

господи боже, какой АД

stevejobs ★★★★☆
()

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

Совет №1 — оформить код в нормальном виде. Через тэг code=php и отформтировав структурно. В таком виде никто на него смотреть даже не станет.

KRoN73 ★★★★★
()

Лучше бы ты не использовал русские названия для переменных. Чтобы получить количество новостей, лучше использовать запрос

SELECT COUNT(`id`) AS `cnt` FROM `tb_news`;
В «cnt» у тебя будет количество строк в таблице. А твой запрос заставляет БД выбрать все id из таблицы и посчитать количество уже в результате выборки. На сабж я не отвечу, т.к. код ужасен и сначала его стоит переписать, не спеша и хорошо продумывая. Насколько я могу судить, ты еще только начинаешь познавать азы.

ychuperka
()

а у меня наоборот твой скрипт всегда кажет от 0 до 10

давай-ка ты перепишешь его так, чтобы там не было вызовов mysql? Мы же не можем тестировать скрипт без твоей базы.

плюс, не составило бы тебе труда закомментировать, что значит каждая строчка? Русскими человечьими словами. Ничерта не понятно.

stevejobs ★★★★☆
()

т.к. читать эту кашу без комментариев невозможно, вот тебе нормальный скрипт пагинации для МАССИВА

    function paganation($display_array, $page) {
        global $show_per_page;

        $page = $page < 1 ? 1 : $page;

        // start position in the $display_array
        // +1 is to account for total values.
        $start = ($page - 1) * ($show_per_page + 1);
        $offset = $show_per_page + 1;

        $outArray = array_slice($display_array, $start, $offset);

        var_dump($outArray);
    }

    $show_per_page = 2;

    paganation($display_array, 1);
    paganation($display_array, 2);


    $show_per_page = 3;
    paganation($display_array, 1);
    paganation($display_array, 2);

Для mysql сам переделаешь

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

ответы всем

Спасибо и за то, код нормально пока составить не получается, так как редактор сообщения чисто белый без каких либо тэгов. Попробую Adobe Dreamweaver.

bl0geps
() автор топика
Ответ на: комментарий от Xellos

Угу, насилие над пользователями vimperator'а.

anonymous
()
Ответ на: комментарий от Xellos

о вв коде

Чуть разобрался по Вашей ссылке, с вв-кодом оформления сообщений, теперь учту на будущее.

Код: // Ошибка наверняка в ниже выделенном коде
$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»;

Теперь как надо.

bl0geps
() автор топика
Ответ на: комментарий от Jaberwock

Не видать без очков, совет: «Когда ты не понимаешь, что происходит в скрипте выведи себе все переменные, когда выведешь посмотри все ли правильно посчиталось начиная с первой переменной.»

boomflack
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.