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

Форум PHP

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

 

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

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

тема: Постраничный вывод вида: domain.com/page/?cid=1&page=2
 
 автор: Clocker   (04.10.2006 в 01:14)   письмо автору
 
 

Собственно вопрос: как сделать постраничный вывод вида domain.com/page/?cid=1&page=2.
Пример: страница с категориями, в категориях элементы, их и надо разбить постранично (например в категории на странице будет по 10 элементов).

Функции:


function DisplayRows($tbl, $db, $page, $page, $p_records, $cid)
    {
    if(!empty($cid))
    {
        $db->query("SELECT * FROM $tbl WHERE published=1 AND cid = $cid");
    }
    else
        {
        $db->query("SELECT * FROM $tbl WHERE published=1");
        }

        $result = $db->FetchArray();

        $all_lines = $db->numRows($result);

        if (!isset($page) or empty($page) or $page<=0) $page=1;
        else $page=(int)$page;

        $page_for_query = $page-1;
        $page_for_query2 = $page+1;

        $p_start = $page_for_query * $p_records;

        return array($all_lines, $page, $page_for_query, $page_for_query2,  $p_start);
    }

function DisplayNav($all_lines, $p_records, $page, $cid)
    {
     $count_pages = ceil($all_lines / $p_records);
          if ($_GET['page'] > $count_pages)
              {
                  echo '<div align="center"><h1>Ошибка 404. Нет такой страницы!</h1></div>';
                  echo '<br /><br />';
                  echo '<div align="center"><a href="javascript:history.go(-1)">Вернуться назад</a></div>';
              }
          else
              {
            if ($count_pages>1)
                  {
                  $cid = (int)$_GET['cid'];
                       echo ' <b>Страницы</b>&nbsp;&nbsp;&nbsp; ';
                        for ($i=1; $i<=$count_pages; $i++)
                        {
                            if($page==$i and $i!=1)
                                {
                                    echo ' <span class="navtext"> [ '.$i.' ] </span>&nbsp; ';
                                }
                            elseif ($page==$i and $i==1)
                                {
                                    echo ' <span class="navtext"> [ 1 ] </span>&nbsp;&nbsp; ';
                                }
                            elseif($i==1 and $page!=$i)
                                {
                                    echo ' <a class="navlink" href="?cid='.$cid.'&page='.$i.'"> '.$i.' </a>&nbsp; ';
                                }
                            elseif($i!=1 and $page!=$i)
                                {
                                    echo ' <a class="navlink" href="?cid='.$cid.'&page='.$i.'"> '.$i.' </a>&nbsp;&nbsp; ';
                                }
                        }
                    }
                }
    }



И сам запрос с выводом:


list($all_lines, $entry, $page_for_query, $page_for_query2,  $p_start) = DisplayRows($tbl, $db, $entry, $page, $p_records, $cid);

if(isset($_GET['cid']) and !empty($_GET['cid']))
    {
$cid = (int)$_GET['cid'];
CidError($tbl, $db);

include '../theme/header.inc.php';
echo '<p>';

    $db->query("SELECT id, cid, name, url, description FROM $tbl2 WHERE cid=$cid ORDER by name ASC");
        while ($row = $db->fetchAssoc())
            {
            echo '<img src="'.SITE_URL.'/images/point_o.gif"> &nbsp;&nbsp;<a href="http://'.$row['url'].'" target="blank">'.$row['name'].'</a><br />';
            echo '<p align="justify">'.$row['description'].'</p>';
            echo '<hr>';
            }
echo '</p>';

DisplayNav($all_lines, $p_records, $entry, $page);

    }


У меня в адресной строке все верно прописано, но переход не происходит на следующую страницу. Почему и в чем ошибка?

   
 
 автор: Lelik   (04.10.2006 в 01:31)   письмо автору
 
   для: Clocker   (04.10.2006 в 01:14)
 

чего-то много всего написано... короче, вот рабочий код, смотри, что не учел (он без функций)

<?php
  $db_location 
"localhost";
  
$db_name "bd_name";
  
$db_user "bd_user";
  
$db_pass "pass";

  
$db_connect = @mysql_connect($db_location$db_user$db_pass);
  if(!
$db_connect)
     {
        echo 
'<html><body><head><title>Недоступен сервер БД.</title></head>
              <div align="center" style="color:#363636; font-family: Arial; font-size:12px">
              Невозможно корректное отображение сайта. Недоступен сервер БД.</div></body></html>'
;
        exit;
     }
  if(!@
mysql_select_db($db_name$db_connect))
     {
        echo 
'<html><body><head><title>Недоступна БД.</title></head>
              <div align="center" style="color:#363636; font-family: Arial; font-size:12px">
              Невозможно корректное отображение сайта. Недоступна БД.</div></body></html>'
;
        exit;
     }

  
// Подсчитуем общее количество данных в БД
  
$quer "SELECT count(*) FROM hits";
  
$res mysql_query($quer);
  
$total mysql_fetch_array($res);
  
$count $total['count(*)'];

  
// Устанавливаем количество сообщений, которое будем выводить
  // и количество страниц которое получится в итоге
  
$end 30;
  if(
$_GET['start'] == ""$_GET['start'] = 0;
  if(
$_GET['start'] < $_GET['start'] = 0;
  
$start $_GET['start'];
  if(
$_GET['page'] == ""$_GET['page'] = 1;
  
$page $_GET['page'];
  
$dln $count $end;
  
$col = (int)$dln 1;


  
// Выводим данные из бд

  
$query "SELECT * FROM hits ORDER BY id_hit LIMIT ".$start.", ".$end;
  
$result mysql_query($query);
  if(!
$result) echo "Error - ".mysql_error();
  while(
$num mysql_fetch_array($result))
     {
         
$i++;
         if(
$num['txt'] == ""$txt "";
         else
            
$txt " - ".$num['txt'];
         echo 
"<b>".$i."</b> ".$num['hits'].$txt."<br>";
     }
  echo 
'<br>$count ='.$count;
  echo 
'<br>'.$col.'<br>';

  
// Делаем навигацию
  
for ($i 0$i $col$i++)
     {
         if(
$page == ($i+1))
            {
                
$href $page;
            }
         else
             
$href "<A href=\"index.php?start=".($end $i)."&page=".($i+1)."\">".($i+1)."</A>";
         echo 
$href." ";
     }
?>

   
 
 автор: Clocker   (04.10.2006 в 01:38)   письмо автору
 
   для: Lelik   (04.10.2006 в 01:31)
 

Благодарю, Lelik, но немного не то. Мне интересно где ошибка: либо в функции, либо в ее выводе...

   
 
 автор: Lelik   (04.10.2006 в 03:52)   письмо автору
 
   для: Clocker   (04.10.2006 в 01:38)
 

ошибка в SQL запросе

$query = "SELECT * FROM hits ORDER BY id_hit LIMIT ".$start.", ".$end;
// это мой запрос, делай и у себя такой же, то есть с применением LIMIT-а.

у тебя нету выборки конкретных элементов из БД с такого-то по такой-то

   
 
 автор: Clocker   (04.10.2006 в 11:14)   письмо автору
 
   для: Lelik   (04.10.2006 в 03:52)
 

Спасибо. Всю ночь тупо смотрел в функцию, а в запрос не додумался посмотреть :lol:
Еще раз спасибо.

   
Rambler's Top100
вверх

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