Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » постраничный вывод

Ответить
Настройки темы
постраничный вывод

Пользователь


Сообщения: 67
Благодарности: 0

Профиль | Отправить PM | Цитировать


PHP + SQL
Хотелось бы чтобы на страницу из базы выводилось по 50 позиций, на следующую еще 50 и т.д.

Отправлено: 10:52, 16-01-2004

 

Новый участник


Сообщения: 28
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


А в чем собственно проблема ... пишем
Код: Выделить весь код
<? 
$countres = mysql_query("SELECT COUNT(*) as `count` FROM `".$tbl_name."` WHERE 1"); 
$count = mysql_result($countres,"count"); 
 
$limit = 50; /* кол-во записей*/ 
$nowpage = $_GET[p]; /* текущая страница */ 
 
if ($count > $limit) { 
 * *$start = ($nowpage * $limit) - $limit; 
 * *$minus = ($count % $limit); 
 * *if ($minus == 0) { 
 * * *$countpage = ($count / $limit); 
 * *} else { 
 * * *$countpage = (($count - $minus) / $limit) + 1; 
 * *} 
 *} else { 
 * *$countpage = 1; 
 * *$start = 0; 
 *} 
 
//запрос к БД с лимитом записей 
mysql_query("SELECT COUNT(*) as `count` FROM `".$tbl_name."` WHERE 1 LIMIT ".$start.",",$limit); 
 
?>
Думаю вывод страниц сам сделаешь

-------
advocat - это не професия, а диагноз...[www.php.net.ua]


Отправлено: 11:27, 16-01-2004 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Кроме вышеприведенного кода постарничный вывод очень популярен у скриптописателей и скриптов реализующих эту феньку довольно много в Сети, поиск вам поможет.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 12:57, 16-01-2004 | #3


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


а я когда себе постраничный вывод делал, решил малость поизвращаться и, чтобы определить сколько у меня будет страниц, использовал функцию bcdiv с параметром 0, то есть

$a=bcdiv($n,$m,0); функция деления двух чисел, а третий переметр, сколько знаков после запятой

$n-записей в  базе, $m-сколько записей выводить на страницу

а если $a будет с остатком, то количество страниц равно $a+1



Конечно не проще, зато интересней

А вообще математические функции бывают очень полезны, хотя многие уделяют им не достаточно внимания

-------
Fortes fortuna adiuvat


Отправлено: 15:30, 16-01-2004 | #4


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Можно так еще... реализовать класс меню -
Код: Выделить весь код
<?
  define('PART1_LENGTH', 10);
  define('PART2_LENGTH', 3);
  define('PART3_LENGTH', 2);
  define('FULL_LENGTH', 37);

class Navigation
  {

   var $ParamName;      /* имя параметра строки адреса с инфой о меню*/
   var $FileName;       /* куда, собственно, меню будет строить ссылки*/
   var $Delimiter;      /* символ-разделитель пунктов*/
   var $DelimiterClass; /* имя стиля для символа-разделителя*/
   var $CurPage;        /* номер активной паги */
   var $Total;          /* общее число элементов */
   var $AClass;         /* имя стиля для ссылки*/
   var $NAClass;        /* имя стиля не для ссылки*/
   var $ColPerStr;      /* количество столбцов на строку при выводе номеров страниц*/

   function Info()
     {
      echo "<br>Class info:<br> CurPage: ".$this->CurPage."<br> Total: ".$this->Total."<br> ParamName: ".$this->ParamName."<br> FileName: ".$this->FileName."<br> Delimiter: ".$this->Delimiter."<br> AClass: ".$this->AClass."<br> NAClass: ".$this->NAClass."<br> DelimiterClass: ".$this->DelimiterClass."<br>";
     }

   function Init()
     {
      if (isset($_GET[$this->ParamName]))
        {
         $Str = substr($_GET[$this->ParamName], PART1_LENGTH);
        }
      else
        {
        $Str='';
        }

      if (!trim($Str))
        {
         $this->CurPage = $this->Total = 0;
         return false;
        }

      @list($CurPage, $Total) = preg_split('/[^0-9]/si', $Str, 3, PREG_SPLIT_NO_EMPTY);
      $this->CurPage = abs(intval($CurPage));
      $this->Total = abs(intval($Total));

      if ($this->Total<$this->CurPage)
        $this->CurPage=$this->Total;
     }

   function MakeSecureParam($CurIndex, $Total)
     {
      srand(time());
      $Part1 = substr(md5(uniqid(mt_rand())), 0, PART1_LENGTH);

      srand(time());
      $T_Str = eregi_replace('[0-9]', '', md5(uniqid(mt_rand())));
      $Part2 = substr($T_Str, 0, PART2_LENGTH);

      srand(time());
      $T_Str = eregi_replace('[0-9]', '', md5(uniqid(mt_rand())));
      $Part3 = substr($T_Str, 0, PART3_LENGTH);

      srand(time());
      return str_pad($Part1.$CurIndex.$Part2.$Total.$Part3,
                     FULL_LENGTH,
                     md5(uniqid(mt_rand())),
                     STR_PAD_RIGHT );
     }

   function ShowMenu()
     {
      if (strpos($this->FileName, "?")===false)
        $ParamDelimiter='?';
      else
        $ParamDelimiter='&';

      echo '<table cellpadding=3 cellspacing=0 border=0><tr>';

      $ColCnt = 0;

      for ($I=1;$I<=$this->Total;$I++)
        {
         if ($ColCnt<=$this->ColPerStr)
           {
            echo '<td>';
            $ColCnt++;
           }
         else
           {
            echo '</tr><tr><td>';
            $ColCnt = 0;
           }


         if ($I==$this->CurPage)
           {
            if (Trim($this->NAClass))
              echo "<span class=\"".Trim($this->NAClass)."\">".$I."</span>\n";
            else
              echo $I;

            if ($I<$this->Total)
              echo $this->Delimiter;
           }
         else
           {
            if (Trim($this->AClass))
              echo "<a class=\"".Trim($this->AClass)."\" href=\"".$this->FileName.$ParamDelimiter.$this->ParamName."=".$this->MakeSecureParam($I,$this->Total)."\">".$I."</a>\n";
            else
              echo "<a href=\"".$this->FileName."?".$this->ParamName."=".$this->MakeSecureParam($I,$this->Total)."\">".$I."</a>\n";
            if ($I<$this->Total)
              echo $this->Delimiter;
           }

         echo '</td>';
        }

      echo '</tr><tr><td align=center colspan='.$this->ColPerStr.'>';

      if ($this->CurPage>1)
        echo "<a class=\"".$this->AClass."\" href=\"".$this->FileName.$ParamDelimiter.$this->ParamName."=".$this->MakeSecureParam(($this->CurPage-1),$this->Total)."\">назад</a>".$this->Delimiter;
      else
        echo " <span class=\"".$this->NAClass."\">назад</span>".$this->Delimiter;
      if ($this->CurPage<$this->Total)
        echo " <a class=\"".$this->AClass."\" href=\"".$this->FileName.$ParamDelimiter.$this->ParamName."=".$this->MakeSecureParam(($this->CurPage+1),$this->Total)."\">вперед</a>";
      else
        echo " <span class=\"".$this->NAClass."\">вперед</span>";

      echo '</td></tr>';
      echo '<tr><td align=center colspan='.$this->ColPerStr.'>';
      echo " <a class=\"".$this->AClass."\" href=\"".$this->FileName.$ParamDelimiter.'full=1'."\">все страницы</a>";
      echo '</td></tr></table>';
     }

  function Navigation($ParamName, $FileName, $Delimiter, $AClass, $NAClass, $DelimiterClass, $ColPerStr)
     {
      $this->CurPage        = $this->Total = 0;
      $this->ParamName      = $ParamName;
      $this->FileName       = $FileName;
      $this->Delimiter      = $Delimiter;
      $this->AClass         = $AClass;
      $this->NAClass        = $NAClass;
      $this->DelimiterClass = $DelimiterClass;
      $this->ColPerStr      = $ColPerStr;
     }
  }
?>
Скажем выборка из БД (здесь это MySql) производится НЕ по лимиту (см. LIMIT). Создаем экземпляр класса и инициализируем его:
Код: Выделить весь код
 $Result = mysql_query ('какой-то запрос');
  $StringsNum = mysql_num_rows($Result)
//инициализация страничной системы
     $NavMenu = new Navigation('nav', 'index.php', ' ', 'navmenu', 'navmenu', '', 15);
// nav - имя параметра где от скрипта к скрипту будет хранится информация о текущей странице и их полного числа
// index.php - скрипт который будет участвовать в ссылках страниц
// 15 - число страниц в строке, остальные переносятся на новую
     $NavMenu->Init();
     if ($NavMenu->CurPage==0 && $NavMenu->Total==0)
       {
        $NavMenu->CurPage=1;
        // StringsPerPage - константа с числом записей на странице (= лимиту выборки)
        $NavMenu->Total=$NewsNum / StringsPerPage;
        if ($StringsNum % StringsPerPage!=0)
        $NavMenu->Total+=1;
       }
     $Page = $NavMenu->CurPage;
Теперь нам нужно организовать вывод:
Код: Выделить весь код
    while ($Row = mysql_fetch_array($Result, MYSQL_NUM))
       {
        $Data[]=$Row;
       }
    // собственно вывод
    foreach (Range (($Page-1)*StringsPerPage, $Page*StringsPerPage-1) as $I)
        {
         if (isset($Data[$I]))
           {
              вывод в каком угодно виде
           }
        }
    //проверка надобности рисования менюшки страничной системы и отрисовка в каком надо виде
    if ($StringsNum>StringsPerPage)
       {
        echo "<br><center>";
        $NavMenu->ShowMenu();
        echo "</center>";
       }
вот... кажется нигде не ошибся...

[s]Исправлено: Prisoner, 2:20 17-01-2004[/s]

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 22:46, 16-01-2004 | #5



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » постраничный вывод

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Постраничный вывод PHP + MySQL (готовое решение) darksmoke Вебмастеру 6 19-05-2011 20:43
[решено] Алгоритм. Постраничный вывод. SQL. Scorpion666 Вебмастеру 5 26-06-2007 07:14
Вывод на печать???? Novistok Microsoft Windows NT/2000/2003 4 08-11-2005 10:52
Вывод на телевизор dascon Программное обеспечение Windows 15 04-09-2004 06:55
Как сделать постраничный вывод? FADE Вебмастеру 7 20-07-2004 18:37




 
Переход