Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Постраничная выдача из базы данных
 
 автор: Legenda   (04.10.2008 в 11:49)   письмо автору
 
 

Народ подскажите оптимальное решение вопроса.

При выборке из БД MySQL выдается длинный список записей, как правильно разделить его на страницы с шагом в 10 записей?

Вод код выдачи:


<?
$r_posl 
mysql_query ("SELECT * FROM object WHERE id_categ = '1' ORDER BY id DESC");
$nr_posl=mysql_num_rows($r_posl);

if (
$nr_posl>0
   {
        while (
$rr_posl mysql_fetch_array($r_posl))
             {
                  if (isset (
$rr_posl['id'])) 
                      {
                
// Вывод данных
                    
echo $rr_posl['name'];
                    echo 
$rr_posl['kopi'];
                    echo 
$rr_posl['ob'];
                    echo 
$rr_posl['dtl'];
                    echo 
'<br>';
                     }
                }
            }
?>

  Ответить  
 
 автор: cheops   (04.10.2008 в 12:25)   письмо автору
 
   для: Legenda   (04.10.2008 в 11:49)
 

Возможно вас заинтересует тема по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3044.

  Ответить  
 
 автор: Legenda   (04.10.2008 в 12:43)   письмо автору
 
   для: cheops   (04.10.2008 в 12:25)
 

Посмотрел указанную вами тему и все посты на которые имелись ссылки из указанной темы, но к сожалению так и не нашел ответа. Про разбиение на станицы информации выводимой из БД MySQL там крайне мало информации, или я просто не могу вникнуть в примеры. Просто я новичек и плохо разбираюсь в php и MySQL информацию изучаю на живых примерах. Если не сложно приведите пример кода для разбиения информации на страницы, для приведенного выше кода.

  Ответить  
 
 автор: cheops   (04.10.2008 в 13:39)   письмо автору
 
   для: Legenda   (04.10.2008 в 12:43)
 

Хорошо, давайте отталкиваться от функции вида
<?php
  
function pager($page$total$pnumber$page_link$parameters)
  {
    
// Вычисляем число страниц в системе
    
$number = (int)($total/$pnumber);
    if((float)(
$total/$pnumber) - $number != 0$number++;
    
// Проверяем есть ли ссылки слева
    
if($page $page_link 1)
    {
      echo 
"<a class=menuinfo href=$_SERVER[PHP_SELF]?page=1{$parameters}>
 <nobr>[1-
$pnumber]</nobr></a>&nbsp;<em class=currentpage>
<nobr>&nbsp;...&nbsp;</nobr> </em>&nbsp;"
;
      
// Есть
      
for($i $page $page_link$i<$page$i++)
      {
          echo 
"&nbsp;<a class=menuinfo href=$_SERVER[PHP_SELF]?page=$i{$parameters}>
 <nobr>["
.(($i 1)*$pnumber 1)."-".$i*$pnumber."]</nobr></a>&nbsp;";
      }
    }
    else
    {
      
// Нет
      
for($i 1$i<$page$i++)
      {
          echo 
"&nbsp;<a class=menuinfo href=$_SERVER[PHP_SELF]?page=$i{$parameters}
<nobr>["
.(($i 1)*$pnumber 1)."-".$i*$pnumber."]</nobr></a>&nbsp;";
      }
    }
    
// Проверяем есть ли ссылки справа
    
if($page $page_link $number)
    {
      
// Есть
      
for($i $page$i<=$page $page_link$i++)
      {
        if(
$page == $i)
          echo 
"<em class=currentpage><nobr>&nbsp;[".(($i 1)*$pnumber 1)."-".$i*$pnumber."]&nbsp;</nobr> </em>";
        else
          echo 
"&nbsp;<a class=menuinfo href=$_SERVER[PHP_SELF]?page=$i{$parameters}
<nobr>["
.(($i 1)*$pnumber 1)."-".$i*$pnumber."]</nobr></a>&nbsp;";
      }
      echo 
"<em class=currentpage><nobr>&nbsp;...&nbsp;</nobr> </em>&nbsp;
<a class=menuinfo href=
$_SERVER[PHP_SELF]?page=$number{$parameters}> <nobr>[".(($number 1)*$pnumber 1)."-$total]</nobr></a>&nbsp;";
    }
    else
    {
      
// Нет
      
for($i $page$i<=$number$i++)
      {
        if(
$number == $i)
        {
          if(
$page == $i)
            echo 
"<em class=currentpage><nobr>&nbsp;[".(($i 1)*$pnumber 1)."-$total]&nbsp;</nobr></em>";
          else
            echo 
"&nbsp;<a class=menuinfo href=$_SERVER[PHP_SELF]?page=$i{$parameters}>
["
.(($i 1)*$pnumber 1)."-$total]</a>&nbsp;";
        }
        else
        {
          if(
$page == $i)
            echo 
"<em class=currentpage><nobr>&nbsp;[".(($i 1)*$pnumber 1)."-".$i*$pnumber."]&nbsp;</nobr> </em>";
          else
            echo 
"&nbsp;<a class=menuinfo href=$_SERVER[PHP_SELF]?page=$i{$parameters}
<nobr>["
.(($i 1)*$pnumber 1)."-".$i*$pnumber."]</nobr></a>&nbsp;";
        }
      }
    }
  }
?>

Т.е. текущий номер страницы передается через GET-параметр page. Тогда выбрать данные для текущей страницы можно при помощи запроса вида
<?php
    
// Отображаем темы по $pnumber штук
    
$page intval($_GET['page']);
    
$pnumber 30;
    
// Если в строке запроса не передана страница
    // выводим первую страницу
    
if($page <= 0$page 1;
    
$begin = ($page 1)*$pnumber;
    
// Запрашиваем информацию об $pnumber позициях
    
$query "SELECT * FROM object
              WHERE id_categ = '1'
              LIMIT 
$begin$pnumber";
?>

А вывести постраничную навигацию можно при помощи скрипта
<?php
      $page_link 
4;
      
// Запрашиваем информацию о количестве всех позиций
      
$query "SELECT COUNT(*) FROM object
              WHERE id_categ = '1'"
;
      
$tot mysql_query($query);
      if(!
$tot) exit(mysql_error());
      if(
mysql_num_rows($tot)) $total mysql_result($tot,0);
      
// Выводим постраничную навигацию
      
pager($page$total$pnumber$page_link"");
?>

  Ответить  
 
 автор: Legenda   (04.10.2008 в 14:04)   письмо автору
 
   для: cheops   (04.10.2008 в 13:39)
 

Что то не получается.
Ссылки на страницы выводятся и подсчет записей в БД идет корректный, но данные из БД выводятся всем массивом, т.е. все записи на одной странице. И при переходе на 2 и последующие страницы выдается весь список записей.

  Ответить  
 
 автор: cheops   (04.10.2008 в 14:28)   письмо автору
 
   для: Legenda   (04.10.2008 в 14:04)
 

Запрос именно такой используете для извлечения данных
<?php
    $query 
"SELECT * FROM object 
              WHERE id_categ = '1' 
              LIMIT 
$begin$pnumber";
?>

Если не сложно, прикрепите к сообщению дамп таблицы object, чтобы можно было воспроизвести ситуацию.

  Ответить  
 
 автор: Legenda   (04.10.2008 в 14:32)   письмо автору
 
   для: cheops   (04.10.2008 в 14:28)
 

А огромное спасибо!
Нашел свою ошибку, теперь все работает!
Еще раз огромное спасибо!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования