Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   PHP (http://www.flasher.ru/forum/forumdisplay.php?f=20)
-   -   постраничный вывод (http://www.flasher.ru/forum/showthread.php?t=28346)

advocat 11.03.2002 11:05

постраничный вывод
 
Люди кто-нибуть киньте или напишите код, просто сколько их уже перепробовал ...
мне нужен код с выводом страниц, тобишь напр.: 1 | 2 | 3
Просто без этого можна использовать лимит ... но это не то ...
Вобщем помогите скриптом !!!

Самурай 11.03.2002 18:25

Похожий скрипт я писал гдето месяца два назад. Он дома и работает (что удивляет)....



ТО что внизу написано за 17 минут...
возможны ошибки (как синтаксические так и орфоргафические...)
<?php
$user="pejone";
$pass="pejone";
$host="localhost";
$db="some";

mysql_connect($host, $user, $pass);
mysql_select_db($db);

$counter=mysql_num_rows(mysql_query("SELECT * FROM sometable"));

//узнаем на сколько страниц разбить вывод
$step="10";
$steps=$counter/$step;

if ( $steps == "0") {
echo (" 1 ");
}
else {

for ($n=0; $n <= $steps; $n++)
{
printf("<a href=show.php?id=$n> $n </a>" );
}
}
?>



а в файле show.php пишем

<?
$user="pejone";
$pass="pejone";
$host="localhost";
$db="some";


mysql_connect($host, $user, $pass);
mysql_select_db($db);

$counter=mysql_num_rows(mysql_query("SELECT * FROM sometable"));

$downmerg=$n*10-10;

$counttop=$n*10;
$more=$counter-$counttop;

if ($more <= "10")
{
$topmerg=$more;
}

elseif ($more > "10")
{
$topmerg=$n*10;
}

for ($i=$downmerg; $i <= $topmerg; $i++)
{
$data=mysql_fetch_array(mysql_query(" SELECT * FROM sometable WHERE id = '$i' "));

echo ("$data[somevalue]");

}

?>


если подробней то емейлом....

pejone@[NOTFORSPAMERS]svitonline.com

убери [NOTFORSPAMERS]....

[subway]design 11.03.2002 19:08

Если кучу записей разбиваем на паги, то...
 
...не согласен с идеей Пижона, насчет того, что режем исходя из кол-ва страниц. На практике необходимо исходить из кол-ва записей на одной странице. Допустим, гостевой книги.

Код:


$num=10;  // 10 записей на одну страницу, передается как параметр
$page=1;  // номер страницы, передается как параметр.

mysql_connect(...bla-bla-bla...
.mysql_select_db(..bla-bla-bla...) //коннектимся...

$query="SELECT name, msg, smth_else_field FROM yourtable";
$r=mysql_query($query);

$npages=1; //кол-во страниц (вычисляется ниже)
$counter=0;

while($counter<mysql_num_rows($r)){
$counter=$num*$npages;
$npages++;
}

$npages-=1; // избавляемся от лишнего значения, порожденного циклом.

if($page>$npages)$page=$npages; // Если просят "большую" страницу, то выдаем последнюю.
if($page<1)$page=1; // Если просят отрицательную страницу, то выдаем первую.

if($npages==1){ // у нас записей меньше чем $num, выдаем ВСЕ записи:
  $x=0;
  while($x<mysql_num_rows($r)){  //тут делаем что хотим, например просто print:
    print mysql_result($r,$x,'name');
    print mysql_result($r,$x,'msg');
    print mysql_result($r,$x,'smth_else_field');
    $x++;
  }
}elseif($page<=($npages-1)){ // У нас страница ПОЛНОСТЬЮ забита записями в кол-ве $num (последняя страница не обязательно)
  $x=$num*($page-1);
  while($x<$num*$page){  //тут делаем что хотим, например просто print:
    print mysql_result($r,$x,'name');
    print mysql_result($r,$x,'msg');
    print mysql_result($r,$x,'smth_else_field');
    $x++;
  }
}else{ // $page - это последняя страница, там записей скорее всего меньше $num:
  $x=$num*($page-1);
  while($x<mysql_num_rows($r)){  //тут делаем что хотим, например просто print:
    print mysql_result($r,$x,'name');
    print mysql_result($r,$x,'msg');
    print mysql_result($r,$x,'smth_else_field');
    $x++;
  }
}


Вроде так, ошибки не исключены, т.к. написано за 11 минут.

juggy 11.03.2002 22:14

хех. А просто текст? Если не из mysql?

nagash 12.03.2002 00:40

Код:

function getPages($total, $page, $link, $perpage) {
    $mpp = $perpage;
    $prev_page = $page - 1;
    $next_page = $page + 1;

    if ($total <= $mpp) $pages = 1;
    elseif($total % $mpp == 0) $pages = $total / $mpp;
    else $pages = $total / $mpp + 1;
    $pages = (int) $pages;

    $s_pages    = $page<10 ? 1 : floor($page / 10) * 10;
    $e_pages    = $page + 9;

    if ($e_pages > $pages) {
        $e_pages = $pages;
    }

    $s = "";

    if($prev_page != 0) $s = "<a href=\"".$link."page=1\">&lt;&lt;</a> \n";
    if($prev_page) {
        $s .= "<a href=\"".$link."page=$prev_page\">&lt;</a> \n";
    }

    for($i=$s_pages;$i<=$e_pages;$i++) {
        if ($i != $page) {
            $s .= "<a href=\"".$link."page=$i\">$i</a> \n";
        } elseif ($i != 1) {
            $s .= " <b>$i</b> ";
        } elseif ($page != $pages) {
            $s .= " <b>1</b> ";
        }
    }
    if($page != $pages) {
        $s .= "<a href=\"".$link."page=$next_page\">&gt;</a> \n";
        $s .= "<a href=\"".$link."page=$pages\">&gt;&gt;</a> \n";
    }

    return $s;
}

--------------------------------------------------------------------------------
а вызывать, например

$print_pages = getPages($total, $page, "$PHP_SELF?param1=1& param2=2&", $pp);
где $total - всего записей, $page - текущая страница, $pp - кол-во записей на страницу.


advocat 12.03.2002 00:40

2 Pejone и [subway]design : Спасибки ... попробую, будут проблеммы скажу, просто совсем меня уже достали на работе и маловато времени остается ;)

2 juggy: Насколько я помню, то постраничный вывод из тхт расматривался отдельным топиком, но там все проще, и этот скрипт (из тхт знаю давно ...)

nagash 12.03.2002 03:35

у меня как бы немного поменьше код получился... =)
Код:

// ÇÀÏÐÎÑ Â ÌÞÑÊË È ÏÎÄÑ×¨Ò ÎÁÙÅÃÎ ÐÅÇÓËÜÒÀÒÀ
$result = mysql_query($query);
$number = mysql_numrows($result);

// ÂÛÂÎÄ ÑÒÐÎÊÈ ÄËß ËÈÑÒÀÍÈß
if (!isset($page)) {
        $page=1;
}
$cikl = ceil($number / 5);
echo "<div align=left class=casino>found $number casinos<br>Pages: ";
for ($i=1;$i<=$cikl;$i++) {
        if ($page == $i) {
                echo "<b>$i</b> ";
        } else {
                echo "<a href='.?&page=".$i."'>$i</a> ";
        }
}
echo "</div>";

// ÇÀÏÐÎÑ Â ÌÞÑÊË ÇÀ ÏßÒÜÞ ÐÅÇÓËÜÒÀÒÀÌÈ
$page = ($page-1)*5;
$query .= " LIMIT $page,5";
$result = mysql_query($query);
$number = mysql_numrows($result);

// ÂÛÂÎÄ ÑÀÌÈÕ ÊÀÇÈÍÎ
for ($i=0;$i<$number;$i++){
        $info =  mysql_result($result,$i,"info");
        echo $i." - ".$info."<br>";
}


nagash 12.03.2002 03:51

ох лутше бы не постил этот код...
вобщем у кого будут вопросы спрашивайте... =)


Часовой пояс GMT +4, время: 06:10.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.