Тема: Постраничная навигация

Нашел скрипт по страничной навигации адаптировал его к своим страницам , на странице на которой выводится вся информация из таблицы постраничная навигация работает хорошо, но на страницах где вывод определен условием работает криво..пример кода

Подключение к базе 
выбор базы
// количество записей, выводимых на странице
$per_page=7;
// получаем номер страницы
if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
// вычисляем первый оператор для LIMIT
$start=abs($page*$per_page);
$query = "SELECT NAIMENOVANIE_NAIMENOVANIE, NAZVANIE_PRODUKCIYA, OPISANIE_PRODUKCIYA, PHOTO_PRODUKCIYA, PROIZVODITEL_PROIZVODITEL, NAZVANIE_RAZMERYKPB, ID_PRODUKCIYA, naimenovanie.ID_NAIMENOVANIE
FROM naimenovanie, produkciya, proizvoditel, razmerykpb
WHERE produkciya.ID_PROIZVODITEL = proizvoditel.ID_PROIZVODITEL
AND produkciya.ID_NAIMENOVANIE = naimenovanie.ID_NAIMENOVANIE
AND produkciya.ID_RAZMERYKPB = razmerykpb.ID_RAZMERYKPB
AND naimenovanie.ID_NAIMENOVANIE = '".$_REQUEST['id']."'
LIMIT $start,$per_page;";
$result = mysql_query($query);
if (!$result) {
  die("невозможно исполнить запрос к бд: <br />". mysql_error());
}
while ($result_row = mysql_fetch_array($result, MYSQL_ASSOC)){
  echo "------------------------------------------------------------------------------<br />";
echo '<a href ="photo2.php?id=' . $result_row['ID_PRODUKCIYA'] . '"target = "_blank" ><img src="photo2.php?id=' . $result_row['ID_PRODUKCIYA'] . '" WIDTH=100 HEIGHT=100 align=left></a> <br />';
//echo '<font size="2" align="left">';
echo '<font size="2" align=left>наименование: '.$result_row['NAIMENOVANIE_NAIMENOVANIE'].' </font><br />';
echo '<font size="2" align=left>Название: '.$result_row['NAZVANIE_PRODUKCIYA'].' </font><br />';
echo '<font size="2" align=left>Размеры: '.$result_row['NAZVANIE_RAZMERYKPB'].' </font><br />';
echo '<font size="2" align=left>Производитель: '.$result_row['PROIZVODITEL_PROIZVODITEL'].' </font><br />';
//echo '</font>';
echo "<br />";
echo "<br />";
echo "<br />";
}
// дальше выводим ссылки на страницы:
$q="SELECT count(*) FROM `produkciya` WHERE ID_NAIMENOVANIE= '".$_REQUEST['id']."'";  //если здесь поставить такое условие
//то скрипт понимает сколько записей и сколько доллжно появится страниц в моем случае 2 страницы,первая страница с 7ю записями отображается, а вторая на которой должно быть 3 записи открывается пустой а ссылка на первую проподает.
$res=mysql_query($q);
$row=mysql_fetch_row($res);
$total_rows=$row[0];

$num_pages=ceil($total_rows/$per_page);
echo '--------------------------------------------';
for($i=1;$i<=$num_pages;$i++) {
  if ($i-1 == $page) {
    echo $i." ";
  } else {
    echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'"><em>'.$i."</em></a> ";
  }
}

Если ставить просто "SELECT count(*) FROM `produkciya`" то скрипт считает что страниц должно быть 3 а не 2 и все равно при переходе на остальные страницы там пусто, а первая страница пропадает
подскажите пожалуйста в чем может быть проблема.

Учусь у всех, не подрожаю никому.

2

Re: Постраничная навигация

clone-future
В листалке не хватает параметра [mono]id[/mono].

echo '<a href="'.$_SERVER['PHP_SELF'].'?id=' . $_REQUEST['id'] . '&page='.$i.'"><em>'.$i."</em></a> ";

3

Re: Постраничная навигация

Большое спасибо Hanut вы как всегда выручаете)

Учусь у всех, не подрожаю никому.

4 (изменено: clone-future, 2010-06-07 11:51:17)

Re: Постраничная навигация

еще один вопрос

<?php

if (isset($_GET['dan']))
{
$dan = $_GET['dan'];

//-------------------//
$link = mysql_connect("localhost", "root", "") or die("Не соединилось!!!");
mysql_query("SET NAMES cp1251") or die("Error: " . mysql_error());
mysql_select_db("pro-son") or die("Не найдена БД");
// количество записей, выводимых на странице
$per_page=5;
// получаем номер страницы
if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
// вычисляем первый оператор для LIMIT
$start=abs($page*$per_page);
$query = "SELECT NAIMENOVANIE_NAIMENOVANIE, NAZVANIE_PRODUKCIYA, OPISANIE_PRODUKCIYA, PHOTO_PRODUKCIYA, PROIZVODITEL_PROIZVODITEL, NAZVANIE_RAZMERYKPB, ID_PRODUKCIYA
FROM naimenovanie, produkciya, proizvoditel, razmerykpb
WHERE produkciya.ID_PROIZVODITEL = proizvoditel.ID_PROIZVODITEL
AND produkciya.ID_NAIMENOVANIE = naimenovanie.ID_NAIMENOVANIE
AND produkciya.ID_RAZMERYKPB = razmerykpb.ID_RAZMERYKPB
HAVING NAIMENOVANIE_NAIMENOVANIE LIKE '%".$dan."%'
OR NAZVANIE_PRODUKCIYA LIKE '%".$dan."%'
OR PROIZVODITEL_PROIZVODITEL LIKE '%".$dan."%'
OR NAZVANIE_RAZMERYKPB LIKE '%".$dan."%'
LIMIT $start,$per_page;";
$result = mysql_query($query) or die("Запрос ошибочный");
$line = mysql_num_rows($result);
//-------------------//
$outData = '<font size="2"><b>Ничего не найдено</b></font>' ;
if($line)
{
$out = "<table>\n";
$end = "</table>\n";
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
  echo "------------------------------------------------------------------------------<br />";
echo '<a href ="photo2.php?id=' . $row['6'] . '"target = "_blank" ><img src="photo2.php?id=' . $_REQUEST['id'] . '" WIDTH=100 HEIGHT=100 align=left></a> <br />';
echo '<font size="2" align=left>наименование: '.$row['0'].' </font><br />';
echo '<font size="2" align=left>Название: '.$row['1'].' </font><br />';
echo '<font size="2" align=left>Производитель: '.$row['4'].' </font><br />';
echo '<font size="2" align=left>Размеры: '.$row['5'].' </font><br />';
echo "<br />";
echo "<br />";
echo "<br />";
}
// дальше выводим ссылки на страницы:
$q="SELECT count(*) FROM produkciya Where ID_PRODUKCIYA = ' ".$row['7']." '";
$res=mysql_query($q);
$row=mysql_fetch_row($res);
$total_rows=$row[0];

$num_pages=ceil($total_rows/$per_page);
echo '--------------------------------------------';
for($i=1;$i<=$num_pages;$i++) {
  if ($i-1 == $page) {
    echo $i." ";
  } else {
echo '<a href="'.$_SERVER['PHP_SELF'].'?id=' .$row['7']. '&page='.$i.'"><em>'.$i."</em></a> ";
  }
}
echo '--------------------------------------------';
$outData = $out.$end;
}

}
echo $outData;
?>

это код поиска как тут условие правильно организовать?пожалуйста подскажите .всю голову сломал

Учусь у всех, не подрожаю никому.

5

Re: Постраничная навигация

clone-future

$query = "SELECT NAIMENOVANIE_NAIMENOVANIE, NAZVANIE_PRODUKCIYA, OPISANIE_PRODUKCIYA, PHOTO_PRODUKCIYA, PROIZVODITEL_PROIZVODITEL, NAZVANIE_RAZMERYKPB, ID_PRODUKCIYA
FROM naimenovanie, produkciya, proizvoditel, razmerykpb
WHERE produkciya.ID_PROIZVODITEL = proizvoditel.ID_PROIZVODITEL
AND produkciya.ID_NAIMENOVANIE = naimenovanie.ID_NAIMENOVANIE
AND produkciya.ID_RAZMERYKPB = razmerykpb.ID_RAZMERYKPB
AND (NAIMENOVANIE_NAIMENOVANIE LIKE '%".$dan."%'
OR NAZVANIE_PRODUKCIYA LIKE '%".$dan."%'
OR PROIZVODITEL_PROIZVODITEL LIKE '%".$dan."%'
OR NAZVANIE_RAZMERYKPB LIKE '%".$dan."%')
LIMIT $start,$per_page";

В запросах с LIMIT обязательно указывайте поле или поля для сортировки (ORDER BY), иначе листалка будет работать неправильно.

6

Re: Постраничная навигация

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

Учусь у всех, не подрожаю никому.

7

Re: Постраничная навигация

clone-future
Предыдущий пример тоже надо сделать с сортировкой. Выберите поле по которому необходимо отсортировать записи (поле должно быть уникальным), это может быть название, или цена, или и название и цена.

Пример:

$query = "SELECT NAIMENOVANIE_NAIMENOVANIE, NAZVANIE_PRODUKCIYA, OPISANIE_PRODUKCIYA, PHOTO_PRODUKCIYA, PROIZVODITEL_PROIZVODITEL, NAZVANIE_RAZMERYKPB, ID_PRODUKCIYA
FROM naimenovanie, produkciya, proizvoditel, razmerykpb
WHERE produkciya.ID_PROIZVODITEL = proizvoditel.ID_PROIZVODITEL
AND produkciya.ID_NAIMENOVANIE = naimenovanie.ID_NAIMENOVANIE
AND produkciya.ID_RAZMERYKPB = razmerykpb.ID_RAZMERYKPB
AND (NAIMENOVANIE_NAIMENOVANIE LIKE '%".$dan."%'
OR NAZVANIE_PRODUKCIYA LIKE '%".$dan."%'
OR PROIZVODITEL_PROIZVODITEL LIKE '%".$dan."%'
OR NAZVANIE_RAZMERYKPB LIKE '%".$dan."%')
ORDER BY NAIMENOVANIE_NAIMENOVANIE
LIMIT $start,$per_page";

8

Re: Постраничная навигация

Как делать сортировку я понимаю вопрос в том как сделать листалку в скрипте поиска по каким критериям он должен считать количество записей ..если не сложно ткните носом  куда что подставить.

Учусь у всех, не подрожаю никому.

9

Re: Постраничная навигация

clone-future
Считать количество записей надо по тем же критериям, по которым делается выборка данных (разумеется, без LIMIT). Только вместо данных ставим [mono]COUNT(*)[/mono].

10 (изменено: clone-future, 2010-06-08 00:08:03)

Re: Постраничная навигация

это все понятно.я видимо не так выражаюсь.в предыдущем вопросе мы выбирали по одному условию по наименованию а тут мы выбираем по всем полям по которым можно искать и соответсвенно количество страниц другое .там мы приравнивали реквест к id_naimenovanie. как я понимаю тут должно быть что то подобное но что я не как не пойму

Сообщение добавлено Tue Jun  8 01:07:33 2010

$q="SELECT count(*) FROM naimenovanie, produkciya, proizvoditel, razmerykpb
WHERE produkciya.ID_PROIZVODITEL = proizvoditel.ID_PROIZVODITEL
AND produkciya.ID_NAIMENOVANIE = naimenovanie.ID_NAIMENOVANIE
AND produkciya.ID_RAZMERYKPB = razmerykpb.ID_RAZMERYKPB
HAVING NAIMENOVANIE_NAIMENOVANIE LIKE '%".$dan."%'
OR NAZVANIE_PRODUKCIYA LIKE '%".$dan."%'
OR PROIZVODITEL_PROIZVODITEL LIKE '%".$dan."%'
OR NAZVANIE_RAZMERYKPB LIKE '%".$dan."%'
ORDER BY NAZVANIE_PRODUKCIYA";

а если я пишу такое условие для подсчета записей то получается ошибка :
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in(путь и номер строки)

Учусь у всех, не подрожаю никому.

11

Re: Постраничная навигация

clone-future
Я давал исправленный запрос, используйте его с COUNT(*).

12 (изменено: clone-future, 2010-06-08 00:30:38)

Re: Постраничная навигация

извините не заметил скобки с этим запросом без лимита он понимант сколько записей.но при переходе на вторую страницу старая картина пусто и ссылка на первую проподает
echo '<a href="'.$_SERVER['PHP_SELF'].'?id=' . $_REQUEST['id'] . '&page='.$i.'"><em>'.$i."</em></a> ";
тут вместо реквеста что то другое должно быть?

Учусь у всех, не подрожаю никому.

13

Re: Постраничная навигация

разобрался сам с этим.Еще раз спасибо тебе .
echo '<a href="'.$_SERVER['PHP_SELF'].'?dan=' . $dan . '&page='.$i.'"><em>'.$i."</em></a> ";
вот так должна выглядеть строка если кому надо.
как будет по лучше с деньгами не забуду про поддержку проэкта

Учусь у всех, не подрожаю никому.