Forum Webscript.Ru

Программирование => PHP => Тема начата: wheelszeus от 24 Января 2005, 11:30:30

Название: Постраничный вывод!
Отправлено: wheelszeus от 24 Января 2005, 11:30:30
Здравствуйте уважаемые. На форуме не раз рассматривалась тема постраничного вывода, но я все таки задам свой вопрос... почти во всех постах на эту тему запросы в базу были простые типа - SELECT * FROM catalog ...
Если я делаю простой запрос, то у меня все работает, а если запрос с условием, то нихрена не работает - выводит например первые 10 записей и показывает все страницы, но если нажимаю напимер на 5-ую страницу, то ничего нет - пусто. Подскажите почему.
Вот такой скрипт:
$lines_per_page = 5; //кол-во записей на страницу

include "dblib.php";
//ñíà÷àëà óçíàåì êîëè÷åñòâî ÂÑÅÕ çàïèñåé

$type_sdelki = "Аренда";
$show = "yes";
$ref = "";


     if ($country == type_c)
        {
         if ($type_home == type_h)
             {
              $sql = "SELECT * FROM catalog WHERE type_sdelki = \\"$type_sdelki\\" AND hide_show = \\"$show\\"
        ";
             }
         else
             {
              $sql = "SELECT * FROM catalog WHERE type_sdelki = \\"$type_sdelki\\" AND hide_show = \\"$show\\" AND type_home = \\"$type_home\\"
        ";
             }
        }
     else
         {
          if ($type_home == type_h)
              {
               $sql = "SELECT * FROM catalog WHERE type_sdelki = \\"$type_sdelki\\" AND hide_show = \\"$show\\" AND country = \\"$country\\"
        ";
              }
          else
              {
               $sql = "SELECT * FROM catalog WHERE type_sdelki = \\"$type_sdelki\\" AND hide_show = \\"$show\\" AND type_home = \\"$type_home\\" AND country = \\"$country\\"
        ";
              }
         }

$result = mysql_query($sql);
$all_lines = mysql_num_rows($result);
 if (!isset($page) or empty($page) or $page<=0) $page=1;
 else $page=(int)$page;
 $page_for_query = $page-1;
 $lpos = $page_for_query * $lines_per_page;

$sql_go = $sql . "ORDER BY add_date DESC LIMIT $lpos, $lines_per_page";

 $result = @mysql_query($sql_go) or die("$sql_go failed1!
".mysql_error());
while ($row = mysql_fetch_array($result)) {
        $id = $row[\'id\'];
        $ref = $row[\'ref\'];
        $country= $row[\'country\'];
        $type_sdelki = $row[\'type_sdelki\'];
        $type_home = $row[\'type_home\'];
        $title = $row[\'title\'];
        $city = $row[\'city\'];
        $desc_small = $row[\'desc_small\'];
        $price = $row[\'price\'];
        $type_home = $row[\'type_home\'];
        $img1 = $row[\'img1\'];

        $display_block .= "

       







\\"\\"
$country | $city | $type_home

Цена: $price

$desc_small


\\"\\"

        ";

}
echo $display_block;
$count_pages = ceil($all_lines / $lines_per_page);
if ($count_pages>1) {
 for ($i=1; $i<=$count_pages; $i++) {
   if($page==$i and $i!=1) {echo " | $i";}
   elseif ($page==$i and $i==1) {echo "1";}
   elseif($i==1 and $page!=$i) {echo "$i";}

   elseif($i!=1 and $page!=$i) {echo " | $i";}
 }
}
?>
Извините за длинный код.
В чем тут ошибка? Почему когда я нажимаю на 2-ую страницу - открывается пустой лист? Иеще вопросик... как сюда прикрутить кнопки НАЗАД и ВПЕРЕД?
Заранее спасибо.
Название: Постраничный вывод!
Отправлено: Меняздесьдавнонет от 24 Января 2005, 12:15:21
Цитировать
wheelszeus:
В чем тут ошибка?

Ищи сам. PHP FAQ: Ничего не работает! Что делать??? (http://phpfaq.ru/debug)

Раз тема сто раз обсуждалась - так пойди и возьми готовый код.
никакой разницы, какой запрос - сложный или простой - нету, конечно же
Название: Постраничный вывод!
Отправлено: wheelszeus от 24 Января 2005, 12:21:08
В том и дело, что я уже все перепробывал. Я думаю что когда я перехожу на вторую страницу, переменные $country и $type_home теряются. Т.е. теряется их значение и запрос идет с пустыми значениями, и поэтому ничего не выводится. Вот с этим как бороться?
Название: Постраничный вывод!
Отправлено: Меняздесьдавнонет от 24 Января 2005, 12:31:59
Вот видишь.
Можешь же ведь задать вопрос по-человечески, если захочешь.
дело, оказывается, не в запросе, а в переменных.
естественно - теряются. А ты как хотел?
То есть, ты прямо рассчитывал, что они откуда-то сами возьмутся?
Скажи-ка, мил человек, а ты фак на танке-то читал?

И ещё.
Цитировать
wheelszeus:
переменные $country и $type_home теряются. Т.е. теряется их значение

с чего ты взял,что теряется только значение, а не вся переменная целиком?
Название: Постраничный вывод!
Отправлено: for_i_0 от 24 Января 2005, 12:52:56
Не стал разбиратся в твоем коде.
И предпологаю, что за тебя никто не будет писать скрипт постраничного вывода.

Цитировать
wheelszeus:
 На форуме не раз рассматривалась тема постраничного вывода, но я все таки задам свой вопрос... почти во всех постах на эту тему запросы в базу были простые типа - SELECT * FROM catalog ...


SELECT * FROM some_table LIMIT($page, количество выводиых записей на страницу) - это основа. Без этого у тебя ничего и никогда не зара,отает. Вжно это понять. А потом уже составлять свой алгоритм программы который будет обрабатывать это все.

Далее приведу свой алгоритм построения:
Что нам нужно ?
1. Общее количество записей.
2. Лимит(выводимых данных).
3. Из этого можно извлечь  общее количество страниц.
ceil(общее количество записей/лимит);

4. Дальше идет ряд условий при которых выводишь текст типа "НАЗАД" с ссылкой где нужно убавить параметр страницы(int) на 1 единицу] а на счет Вперед ты наверное уже и сам догодлся.)

5. И конечно же последний пункт - это цикл где тебе придется перебрать общее количество страниц.
Название: Постраничный вывод!
Отправлено: for_i_0 от 24 Января 2005, 12:57:08
RomikChef
Ого! сколько всего произошло за время написания моего поста :)

wheelszeus
Ндеюсь, тебе пойдет на пользу.
Название: Постраничный вывод!
Отправлено: wheelszeus от 24 Января 2005, 13:01:59
На форум пришел, потому что не могу написать сам. А алгоритм знаю, тока ничего не получается, вот и прошу помощи.
Название: Постраничный вывод!
Отправлено: Меняздесьдавнонет от 24 Января 2005, 13:04:40
wheelszeus
раз не можешь написать сам - отвечай на вопросы, которые тебе задают.
Название: Постраничный вывод!
Отправлено: Меняздесьдавнонет от 24 Января 2005, 13:10:45
Если ты не можешь сделать - значит, ты чего-то не понимаешь.
Для того, чтобы тебе ответить - надо сначала понять - что именно ты не понимаешь.
чтобы понять - надотебе задать вопросы. И ещё надо, чтобы ты на них ответил.
Название: Постраничный вывод!
Отправлено: wheelszeus от 24 Января 2005, 13:27:37
Хорошо. может я плохо плохо задаю вопросы... попробую еще раз.
Есть запрос, далее я все сделал как написал for_i_0. Все вывелось нормально, но видимо переменная куда то исчезает. Куда и почему я не зна. Вот это и прошу объяснить мне. Именно это я не понимаю.
Название: Постраничный вывод!
Отправлено: Меняздесьдавнонет от 24 Января 2005, 13:35:23
окей.
повторим для тех, кто не видел
Дубль два.

Вот видишь.
Можешь же ведь задать вопрос по-человечески, если захочешь.
дело, оказывается, не в запросе, а в переменных.
естественно - теряются. А ты как хотел?
То есть, ты прямо рассчитывал, что они откуда-то сами возьмутся?
Скажи-ка, мил человек, а ты фак на танке-то читал?

И ещё.
Цитировать
wheelszeus:
переменные $country и $type_home теряются. Т.е. теряется их значение

с чего ты взял,что теряется только значение, а не вся переменная целиком?

Здесь имеется три вопроса.
Не затруднит ли тебя на них ответить?
Название: Постраничный вывод!
Отправлено: wheelszeus от 24 Января 2005, 14:22:43
1. Почему теряются я понял, но тогда как их передать дальше? Через сессии или еще как то?
2. Сами переменные не возьмуться ниоткуда, но я все равно не понимаю откуда их взять.
3. Фак читал, но ничего нового не нашел.
Название: Постраничный вывод!
Отправлено: for_i_0 от 24 Января 2005, 14:37:26
Цитировать
wheelszeus:
1. Почему теряются я понял, но тогда как их передать дальше? Через сессии или еще как то?
2. Сами переменные не возьмуться ниоткуда, но я все равно не понимаю откуда их взять.


Какие сессии ? Перед тем как юзать сессии необходима понять для каких целей они предназначены. далее (http://phpfaq.ru/sessions)  

Их нужно передавать в твоем случае в адресной строке. И называется этот метод передачи GET. далее (http://phpfaq.ru/globals)

Цитировать
wheelszeus:
3. Фак читал, но ничего нового не нашел.


Сомневаюсь. Это я не с воздуха беру. А сужу по твоим вопросам.
Название: Постраничный вывод!
Отправлено: Меняздесьдавнонет от 24 Января 2005, 14:38:45
Цитировать
wheelszeus:
 Сами переменные не возьмуться ниоткуда, но я все равно не понимаю откуда их взять.

оттуда же, откуда они брались на первой странице
это очевидно
Название: Постраничный вывод!
Отправлено: wheelszeus от 25 Января 2005, 12:18:49
еще раз, вот что я делаю:
коннект к базе и выбор базы
sql запрос
узнаю колво записей
потом делаю запрос с LIMIT
потом идет ряд условий и т.д.
все работает, но вторая страница не показывает ничего
вот тут проблема! просто скажите как передавать переменные, что б они не терялись и все
Название: Постраничный вывод!
Отправлено: Меняздесьдавнонет от 25 Января 2005, 12:43:40
точно так же
Название: Постраничный вывод!
Отправлено: wheelszeus от 25 Января 2005, 13:05:17
Кажеться я понял -)) Спасибо всем за ответы.
Название: Постраничный вывод!
Отправлено: WG от 26 Января 2005, 09:06:22
Если правильно понял, в начале кода тебе нужно получить переменные:

$country = $HTTP_GET_VARS["country"];
$type_home= $HTTP_GET_VARS["type_home"];

ну и запрос передавай методом get
Название: Постраничный вывод!
Отправлено: for_i_0 от 26 Января 2005, 10:57:52
WG
[OFF]если уж на то пошло:[/OFF]

if (isset($_GET[\'string\'])) $string = strval($_GET[\'string\']); else $string=\'\';
if (isset($_GET[\'intager\'])) $intager = intval($_GET[\'intager\']); else $intager=0;
Название: Постраничный вывод!
Отправлено: wheelszeus от 27 Января 2005, 13:13:35
сидел вчера пол дня разбирался, но все равно глюки
см. мой первый топик - там код
вот его кусок, где выводятся ссылки на страницы, уже измененный:
$count_pages = ceil($all_lines / $lines_per_page);
if ($count_pages>1) {
for ($i=1; $i<=$count_pages; $i++) {
if($page==$i and $i!=1) {echo " | $i";}
elseif ($page==$i and $i==1) {echo "1";}
elseif($i==1 and $page!=$i) {echo "$i";}

elseif($i!=1 and $page!=$i) {echo " | $i";}
}
}
?>

но все равно глюки - переъожу на вторую страницу и ничего
это попытался так переменные передавать дальше, а они опять не пепедаются
как быть?
Название: Постраничный вывод!
Отправлено: Меняздесьдавнонет от 27 Января 2005, 13:26:41
и что - так таки и не передается - адресная строка пустая?
Название: Постраничный вывод!
Отправлено: wheelszeus от 30 Января 2005, 13:46:38
Передается, но не та
всегда одна и та же
Название: Постраничный вывод!
Отправлено: Меняздесьдавнонет от 30 Января 2005, 13:59:45
ну так что сам передаёшь - то и передаётся.
передавай то, что нужно.
Название: Постраничный вывод!
Отправлено: wheelszeus от 31 Января 2005, 17:38:16
а как мне передать то, что нужно?
я передаю ему все переменные, которые могут быть в форме и он походу должен брать то что ему нужно для запроса, но он все время берет одно и тоже
вот в чем дело
Название: Постраничный вывод!
Отправлено: Меняздесьдавнонет от 31 Января 2005, 19:09:05
если берёт одно и то же, значит ты передаёшь ему одно и то же.
а не то, что нужно

передавать - обычно. оператором echo
Название: Постраничный вывод!
Отправлено: wheelszeus от 31 Января 2005, 19:34:20
может мне кто нить напишет как это должно быть?
я действительно не могу понять, но хочу разобратся
Название: Постраничный вывод!
Отправлено: Меняздесьдавнонет от 31 Января 2005, 20:19:54
да у тебя и так вроде бы правильно написано
может, проблема не в передаче?
Название: Постраничный вывод!
Отправлено: wheelszeus от 31 Января 2005, 20:30:08
а в чем еще может быть проблема, кроме как в передаче?
Название: Постраничный вывод!
Отправлено: Меняздесьдавнонет от 31 Января 2005, 20:39:11
не знаю.
пррблем может быть миллион.
в настройке сервера, в опечатках,
в твоём коде.

я вот не пойму никак.
у тебя в чем проблема-то?
как ппеременную по ссылке передать?
Это же, вроде, базовая операция пхп?
да ты и передавал номер страницы ведь?
какая разница- сколько передавать?
умеешь одну - значит, должен уметь все передавать.

как ты определил, что не передается?
откуда там берется "старое"?
Может быть, хватит уже ходить по форуму и канючить, а сесть и разобраться со СВОИМ скриптом, который ТЫ написал так, что он не работает, который НИКТО не видел и который никто не нанимался читатьи исправлять?

Ну что з а манера - при любой опечатке в форум бегать "найдите мне ошибку!!!"?
Название: Постраничный вывод!
Отправлено: wheelszeus от 01 Февраля 2005, 00:09:03
Цитировать
RomikChef:
Ну что з а манера - при любой опечатке в форум бегать "найдите мне ошибку!!!"?

Просто я серьезно не понимаю в чем ошибка и прошу помочь найти ее. Весь код 100 раз просмотрел - никаких ошибок. Переменную передавать конечно умею, но почему то здесь передается не то что нужно.
Название: Постраничный вывод!
Отправлено: Меняздесьдавнонет от 01 Февраля 2005, 12:21:22
Больше всего ненавижу три категории людей - лжецов, врунов и брехунов. причём из них самые отстойные - это те, которым не хватает ума не врать, если их легко могут поймать за руку.
Цитировать
wheelszeus:
Весь код 100 раз просмотрел -

и этот человек заявляет, что
Цитировать
wheelszeus:
 Фак читал, но ничего нового не нашел.

Этот человек нагло,прямо в глаза, врёт, что он все прочел!
при том, что там в первых же строках написано, что пялиться в свой код - Неправильно. что пялятся по сто раз только идиоты.
что умный человек имеет дроугие средства найти ошибку!

А потом эти средства подробно перечислены.
И после этого оно мне заявляет, что "ничего нового не нашло" и продолжает тупо втыкать в код, как будто таким способом можно найти ошибку.

Фантастика.
Название: Постраничный вывод!
Отправлено: Меняздесьдавнонет от 01 Февраля 2005, 12:24:16
вот почему одним ( http://forums.webscript.ru/showthread.php?s=&threadid=19307 ) достаточно дать ссылку - и они читают и делают то, что надо?
А другие будут ныть, попрошайничать, обивать пороги форума, но не сделают ни машейшего шага, чтобы помочь себе самому?