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

Форум PHP

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

 

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

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

тема: Проблема с постраничной навигацией.
 
 автор: Roman2   (06.06.2007 в 14:37)   письмо автору
 
 

Такая ситуация, есть база статей, в ней реализована постраничная навигация; она работает нормально, но если я сортирую статьи по группам (чтобы выводились только статьи одной группы), то навигация не работает, вернее первая страница нормально работает, но ссылки на следующие страницы не работают. И он делает выборку по всем страницам сразу (то есть в базе 100 статей, а в группе 30, он показывает в навигации, что статей 100 в разделе). Подскажите кто знает. Много чего перепробовал не получилось.

<?
// Соединяемся с базой данных
require_once("../admin/config.php");
require_once(
"../admin/utils.pager.php");
 
// Число ссылок в постраничной навигации
  
$page_link 3;
  
// Число позиций на странице
  
$pnumber 10;
  
// Проверяем переменную $page, равную порядковому номеру первой новости на странице
  
$page $_GET['page'];
  if(empty(
$page)) $page 1;
  
$begin = ($page 1)*$pnumber;
  
if(isset(
$_GET['id_article']))
{
  
$query="SELECT * FROM articles WHERE id_article=".$_GET['id_article'];
  
$res mysql_query($query);
  if (
$res && mysql_num_rows($res)>0)
  {
    
$pageold mysql_fetch_array($res);
    if (
$pageold['html_title']!=""$title $pageold['html_title'];
    
$description $pageold['html_description'];
    
$keywords $pageold['html_keywords'];  
    
    echo 
"<p><a href=http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?id_page=".$pageold['id_page'].">Все статьи из текущего раздела</a>";
    include 
"art.php"
  } 
}
else
{

  
// Если не указана группа статей, путем передачи
  // номера группы через параметр id_page выводим список групп
  
if(!isset($_GET['id_page']))
  {
    
// Производим выборку всех групп статей
    
$query "SELECT * FROM artpage ORDER BY id_artpage";
    
$pgs mysql_query($query);
    
// Если запрос выполнен успешно и число
    // групп больше 0 выводим список групп
    
if($pgs && mysql_num_rows($pgs) > 0)
    {
      
?>
         <h1 class=artnamepage>Законодательная база</h1> 
      <?
      
echo "<ol>";
      while(
$pageold mysql_fetch_array($pgs))
      {
         echo 
"<li><a href=http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?id_page=".$pageold['id_artpage'].">".$pageold['name']."</a>";
      }
      echo 
"</ol>";
    }
  }
  
// Если номер группы передан через параметр id_page, работаем с данной
  // группой
  
else
  {
    
// Если не указана статья, путем передачи
    // номера статьи через параметр id_page выводим список статей
    // текущей группы
      // Выбираем статьи этой группы с порядковым номером id_page
      
$query "SELECT * FROM articles
                WHERE id_page="
.$_GET['id_page'].
                      AND hide='show' 
                LIMIT 
$begin$pnumber";
      
$art mysql_query($query);
      if(!
$artputerror("Ошибка при обращении к блоку статей");
      
// Смотрим сколько статей на странице
      // Если одна, просто выводим статью
      
if(mysql_num_rows($art) == 1)
      {
        echo 
"<p><a href='http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."'>Все статьи</a><br><br>";      
        
$articles mysql_fetch_array($art);
        
$_GET['id_article'] = $articles['id_article'];
        include 
"art.php";
      }
      
// Если больше одной - выводим список статей
      
else
      {
      
?>
         <h1 class=artnamepage>Законодательная база</h1> 
      <?

        
echo "<p><a href='http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."'>Все статьи</a><br><br>";
        echo 
"<ol>";
        while(
$articles mysql_fetch_array($art))
        {
          echo 
"<li><a href=http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?id_article=".$articles['id_article'].">".$articles['name']."</a><br>".
                       
"<p>".$articles['description']."</p>";
        }
        echo 
"</ol>";
      }
   
// Постраничная навигация
 
$query "SELECT COUNT(*) FROM articles 
  ORDER BY pos"
;
 
/*  $query = "SELECT COUNT(*) FROM articles  
            WHERE hide='show'
            ORDER BY pos";*/
  
$tot mysql_query($query);

  
$total mysql_result($tot,0);
  
$number = (int)($total/$pnumber);
  if((float)(
$total/$pnumber) - $number != 0$number++;
  
  
$str "";
          
// Постраничная навигация
  
pager($page$total$pnumber$page_link$str);
  }
}

?>

   
 
 автор: Roman2   (06.06.2007 в 16:51)   письмо автору
 
   для: Roman2   (06.06.2007 в 14:37)
 

-

   
 
 автор: Roman2   (06.06.2007 в 22:20)   письмо автору
 
   для: Roman2   (06.06.2007 в 16:51)
 

Кто вообще сталкивался с таким. Подскажите как решить такую задачу (чтобы навигация была не по всем позициям в таблице а выборочно). Какие алгоритмы использовать?

   
 
 автор: Trianon   (07.06.2007 в 10:11)   письмо автору
 
   для: Roman2   (06.06.2007 в 14:37)
 

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

Кроме того, непонятно, почему параметр номера страницы id_page влияет на выбираемую группу. Если это лишь совпадение - то крайне неудачное.

   
 
 автор: mihdan   (07.06.2007 в 11:30)   письмо автору
 
   для: Roman2   (06.06.2007 в 14:37)
 

В ссылках на следующие страницы пропиши параметры для сортировки!

   
Rambler's Top100
вверх

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