За последние 24 часа нас посетили 17042 программиста и 1297 роботов. Сейчас ищут 1467 программистов ...

Постраничная навигация (сообщение 3)

Тема в разделе "PHP для новичков", создана пользователем Mr.ILLUMINOR, 5 мар 2012.

  1. Mr.ILLUMINOR

    Mr.ILLUMINOR Активный пользователь

    С нами с:
    6 фев 2012
    Сообщения:
    27
    Симпатии:
    0
    Код:

    Код (Text):
    1. $select_posts = mysql_query("SELECT `date`, `title`, `description`, `id` FROM `posts` ORDER BY `id` DESC LIMIT $start, $finish");
    2. while ($posts = mysql_fetch_array ($select_posts))
    3. {
    4. }
    Ошибка: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

    Ругается на:

    Код (Text):
    1. while ($posts = mysql_fetch_array ($select_posts))
    Почему?

    Если заменить $start и $finish на, например, 1 и 2, то всё работает. Следовательно проблема в LIMIT $start, $finish. Но почему?
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Re: mysql_fetch_array(): supplied argument is not a valid My

    ну, например, mysql_error() выведет вам в чем вы не правы.
     
  3. Mr.ILLUMINOR

    Mr.ILLUMINOR Активный пользователь

    С нами с:
    6 фев 2012
    Сообщения:
    27
    Симпатии:
    0
    Re: mysql_fetch_array(): supplied argument is not a valid My

    Проблему удалось решить, но возникла другая. Чтобы не создавать ещё одну тему опишу проблему здесь же.

    Код (постраничная навигация):

    Код (Text):
    1. function nav($x)
    2. {
    3.     global $start, $finish, $select_posts;
    4.     $select_all_posts = mysql_query("SELECT * FROM `posts`");
    5.     $all_posts = mysql_num_rows($select_all_posts);
    6.     $last_page = $all_posts/$x;
    7.     $last_page = ceil($last_page);  
    8.     if (!isset($_GET["page"]) or $_GET["page"] < 1 or $_GET["page"] > $last_page)
    9.     {
    10.         $_GET["page"] = 1;
    11.     }
    12.     $page = $_GET["page"];
    13.     $start = $page*$x-$x+1;
    14.     $finish = $page*$x;
    15.      
    16. }
    На данный момент у меня 6 записей. На одну страницу выводятся 4 записи. То есть на первой странице $start = 1, а $finish = 4. А на второй - $start = 5, а $finish = 8. Но записей ведь только 6. Как быть в таком случае?
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    для одной страницы? тогда мускул вернет "меньше или равно" чем лимит и все ок. в чем проблема?
     
  5. Mr.ILLUMINOR

    Mr.ILLUMINOR Активный пользователь

    С нами с:
    6 фев 2012
    Сообщения:
    27
    Симпатии:
    0
    Бред выходит какой-то.
    навигация:
    Код (Text):
    1. function nav($x)
    2. {
    3.     global $start, $finish;
    4.     $select_all_posts = mysql_query("SELECT * FROM `posts`");
    5.     $all_posts = mysql_num_rows($select_all_posts);
    6.     $last_page = $all_posts/$x;
    7.     $last_page = ceil($last_page);
    8.     if (!isset($_GET["page"]) or $_GET["page"] < 1 or $_GET["page"] > $last_page)
    9.     {
    10.         $_GET["page"] = 1;
    11.     }
    12.     $page = $_GET["page"];
    13.     $start = $page*$x-$x+1;
    14.     $finish = $page*$x;
    15.    
    16. }
    Сама страница:
    Код (Text):
    1. nav(2);
    2. $select_posts = mysql_query("SELECT `date`, `title`, `description`, `id` FROM `posts` ORDER BY `id` DESC LIMIT $start, $finish");
    3. while ($posts = mysql_fetch_array ($select_posts))
    4. {
    5.     echo '<div class="date">'.$posts["date"].'</div>
    6. <div class="title">'.$posts["title"].'</div>
    7. <div class="clear"></div>
    8. <div class="description">'.$posts["description"].'</div>
    9. <div class="read"><a href = "page.php?id='.$posts["id"].'">Читать</a></div>';
    10. }
    Таблица:
    [​IMG]

    На index.php?page=1 выводит записи с id 5 и 4. На index.php?page=2 - с id 3, 2, 1 (три записи!!!), а на index.php?page=3 с id 1. В чём проблема? Я уже голову сломал.
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    порядок вами запрошен.
    что не так?
     
  7. Mr.ILLUMINOR

    Mr.ILLUMINOR Активный пользователь

    С нами с:
    6 фев 2012
    Сообщения:
    27
    Симпатии:
    0
    то что должно выводиться 2 записи на страницу, А выводится то две, то три, то две.
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    запрос покажите
     
  9. Mr.ILLUMINOR

    Mr.ILLUMINOR Активный пользователь

    С нами с:
    6 фев 2012
    Сообщения:
    27
    Симпатии:
    0
    не понял, какой? Я вроде весь код выложил. Кстати, если вывести на 2й странице переменные $start и $finish, то выводит 3 и 4. Но при этом выводит три записи вместо двух.
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    блин глаза открой и посмотри топик выше.

    viewtopic.php?f=13&t=7193&start=210
     
  11. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ровно тот, который к базе отправляется.
     
  12. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    В MySQL в LIMIT передаётся не с какой записи начать и какой закончить, а с какой записи начать и сколько нужно. Т.е.

    страница 1: LIMIT 0, 4
    страница 2: LIMIT 4, 4
    ...
    страница N: LIMIT (N - 1) * 4, 4