За последние 24 часа нас посетили 19140 программистов и 1629 роботов. Сейчас ищет 851 программист ...

Проблема с пейджером

Тема в разделе "PHP для новичков", создана пользователем LAlexS, 24 апр 2011.

  1. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    PHP:
    1. function yandex_link_bar($page, $count, $pages_count, $show_link)
    2. {
    3. if ($pages_count == 1) return false;
    4. $sperator = '  ';
    5. $style = 'style="color: #808000; text-decoration: underline;"';
    6. $style2 = 'style="color: #000000; text-decoration: none; font-size: 20px;"';
    7. $style3 = 'style="color: #000000; text-decoration: none; font-size: 20px;"';
    8. $begin = $page - intval($show_link / 2);
    9. unset($show_dots);
    10.  
    11. if ($pages_count <= $show_link + 1) $show_dots = 'no';
    12. if (($begin > 2) && ($pages_count - $show_link > 2)) {
    13. echo '<a '.$style.' href='.$_SERVER['PHP_SELF'].'?page=1&id='.$id.'> |< </a> ';
    14. }
    15. for ($j = 0; $j <= $show_link; $j++)
    16. {
    17. $i = $begin + $j;
    18. if ($i < 1) continue;
    19. if (!isset($show_dots) && $begin > 1) {
    20. echo ' <a '.$style3.' href='.$_SERVER['PHP_SELF'].'?page='.($i-1).'&id='.$id.'></a>&nbsp; ... &nbsp; ';
    21. $show_dots = "no";
    22. }
    23. if ($i > $pages_count) break;
    24. if ($i == $page) {
    25. echo ' <a '.$style2.' >'.$i.'</a> ';
    26. } else {
    27. echo ' <a '.$style.' href='.$_SERVER['PHP_SELF'].'?page='.$i.'&id='.$id.'>'.$i.'</a> ';
    28. }
    29. if (($i != $pages_count) && ($j != $show_link)) echo $sperator;
    30.  
    31. if (($j == $show_link) && ($i < $pages_count)) {
    32. echo ' <a '.$style3.' href='.$_SERVER['PHP_SELF'].'?page='.($i+1).'&id='.$id.'></a>&nbsp; ... &nbsp; ';
    33. }
    34. }
    35. if ($begin + $show_link + 1 < $pages_count) {
    36. echo ' <a '.$style.' href='.$_SERVER['PHP_SELF'].'?page='.$pages_count.'&id='.$id.'> >| </a>';
    37. }
    38. return true;
    39. }
    40.  
    41. $perpage = 12;
    42. if (empty($_GET['page']) || ($_GET['page'] <= 0)) {
    43. $page = 1;
    44. } else {
    45. $page = (int) $_GET['page'];
    46. }
    47. $result2 = mysql_query("SELECT * FROM product_info WHERE parent_categorie = $id");
    48. $count = mysql_num_rows($result2);
    49. $pages_count = ceil($count / $perpage);
    50. if ($page > $pages_count) $page = $pages_count;
    51. $start_pos = ($page - 1) * $perpage;
    $id я получаю через GET, поэтому в ссылках мне необходимо, чтобы значение id передавалось, чтобы остаться в рамках нужной категории списка. Но когда я добавляю &id='.$id.' почему значение $id не видно когда навожу на ссылку, а если перейти по ссылке, то получаю ошибку
    В вышеприведенном коде строка имеется в виду строка 48.

    Что я делаю не так?
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    $id откуда берется?
    mysql_query вместо ресурса false возвращает.
     
  3. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    из GET
     
  4. runner

    runner Активный пользователь

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    1)В функции function yandex_link_bar используется переменная $id и значение этой переменной неопределено. Поэтому параметр в ссылке будет равен ''.
    2) При нажатии на такой ссылке запрос будет равен
    $result2 = mysql_query("SELECT * FROM product_info WHERE parent_categorie =");

    что является неверным запросом. Поэтому у тебя и выводится сообщение об ошибке.
     
  5. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    runner

    Она у меня определена. Просто я не стал писать весь код, он длинный. Более того, эта переменная участвует в других местах кода и все работает и определяется. А вот именно в показанном участке она почему-то не работает.
    Я привел только этот кусок кода, потому что он целиком ответственнен за постраничную нумерацию.

    PHP:
    1. $id = $_GET ['id'];
     
  6. runner

    runner Активный пользователь

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    Отсюда у меня единственный вывод- переменная $id неопределена или $id='' или просто в браузере не видно параметра ссылки. Для выяснения причины нужно ответить на несколько вопросов:
    2)Поскольку переменная $id не передается в качестве параметра, то возникает вопрос- а что $_GET ['id'] всегда определена? Даже в самом начале работы скрипта?
    2) В HTML коде страницы чему равно id ссылки?
    3)чему равно значение $id прямо перед формированием ссылок?
    4) чему равно $_GET ['id'] перед формированием запроса?
     
  7. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    runner
    id определяется в самом начале и имеет постоянное значение на протяжении всего кода.

    есть код списка категорий
    PHP:
    1. $group_list = mysql_query('SELECT * FROM groups') or die('Фигня!');
    2. $categorie_list = mysql_query('SELECT * FROM categories ORDER BY position') or die('Фигня!');
    3.  
    4. while ($group = mysql_fetch_array($group_list))
    5.     {if ($group['onoff_g'] == 1)
    6.     {
    7.     echo "<p><span class='group_name'><big>".$group['group_name']."</big></span></p>";}
    8.         while ($categorie = mysql_fetch_array($categorie_list))
    9.             {$products_exist = mysql_query ("SELECT parent_categorie FROM product_info WHERE parent_categorie = '".$categorie['id']."'");
    10.             $exist = mysql_num_rows($products_exist);
    11.             if ($categorie['parent_group']==$group['id'] AND $categorie['onoff_c'] == 1 AND $categorie['id'] == $id AND $exist > 0)
    12.                 echo "<span class='cat_menu_active'>&bull;&nbsp;".$categorie['categorie_name']."</span><br>";
    13.                     elseif ($categorie['parent_group']==$group['id'] AND $categorie['onoff_c'] == 1 AND $exist > 0)
    14.                         echo "&bull;&nbsp;<a href='listofgoods.php?id=".$categorie['id']."' class='cat_menu'>".$categorie['categorie_name']."</a><br>";}
    15. mysql_data_seek($categorie_list, 0);}
    в 14 строке задается значение id. Но в самом начале есть
    PHP:
    1. if (isset($_GET['id'])) {$id = $_GET ['id'];}
    2.     else $id = 1
    т.е. либо id будет равно 1, либо что передаст GET.

    id определенно - это факт, т.к. я специально в разных местах кода вставлял echo $id; и везде есть одинаковое значение. Кроме случая, который я описал выше.
     
  8. runner

    runner Активный пользователь

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    2) В HTML коде страницы чему равно id ссылки?
     
  9. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    runner

    23 если выводить echo $id;
    в самой ссылке пусто
     
  10. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Внутри функций она не видна, т.к. у функции своя область видимости, а $id находится не в глобале.
     
  11. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Kreker
    Блин, "вон оно чё Михалыч!"
    Огромное спасибо! А я даже и не знал, что такое может быть! Заработало!!!

    runner
    Спасибо за участие!!!