Нужна Помощь с Постраничной Навигацией

Тема в разделе "PHP", создана пользователем kozax89, 18 июл 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. kozax89

    kozax89 Постоялец

    Регистр.:
    12 июл 2009
    Сообщения:
    135
    Симпатии:
    4
    Пытаюсь сделать постраничную навигацию и возникает проблема. параметр $subcategory (который равен $myrow['subcategory']) содержит по несколько слов на кирилице - например "менеджеры файлов" или "расширения и оболочки рабочего стола"... В адресной строке они выглядят как "view_programs.php?subcategory=%EC%E5%ED%E5%E4%E6%E5%F0%FB%20%F4%E0%E9%EB%EE%E2". Ну кодировка, дело понятное. Проблема возникает в ссылках URL в самой навигации. Там URL обрезаються до 75 знаков в общем, и навигация не работает корректно... Кто нибудь может помочь?

    Ниже прилагаю код с навигацией:


    <?php

    $result77 = mysql_query("SELECT str FROM options", $db);
    $myrow77 = mysql_fetch_array($result77);
    $num = $myrow77["str"];
    // Извлекаем из URL текущую страницу
    @$page = $_GET['page'];
    // Определяем общее число сообщений в базе данных
    $result00 = mysql_query("SELECT COUNT(*) FROM programsdb WHERE subcategory='$subcategory'");
    $temp = mysql_fetch_array($result00);
    $posts = $temp[0];
    // Находим общее число страниц
    $total = (($posts - 1) / $num) + 1;
    $total = intval($total);
    // Определяем начало сообщений для текущей страницы
    $page = intval($page);
    // Если значение $page меньше единицы или отрицательно
    // переходим на первую страницу
    // А если слишком большое, то переходим на последнюю
    if(empty($page) or $page < 0) $page = 1;
    if($page > $total) $page = $total;
    // Вычисляем начиная с какого номера
    // следует выводить сообщения
    $start = $page * $num - $num;
    // Выбираем $num сообщений начиная с номера $start

    $result = mysql_query("SELECT * FROM programsdb WHERE subcategory='$subcategory' LIMIT $start, $num",$db);
    $myrow = mysql_fetch_array($result);


    echo "<center><p class=\"font_sd_big\">На этой странице вы можете просмотреть программы из каталога: ".$myrow['subcategory']."!</p></center>";

    do {
    $r = $myrow["rating"]/$myrow["q_vote"];
    $r = intval($r);

    echo "<br><table width='60%' border='0' align='center' cellpadding='0' cellspacing='0'>
    <tr>
    <td align=\"center\" valign=\"bottom\" height='37' background=\"img/line1.png\" class=\"font_prog_name\"><a href='view_program.php?id=".$myrow['id']."'>".$myrow['name']."</a></td>
    </tr>
    <tr>
    <td align=\"center\" class=\"font_prog_name_2\"><a href='view_program.php?id=".$myrow['id']."'>читать подробно</a></td>
    </tr>
    </table>
    <br>
    <table width='60%' border='0' align='center' cellspacing='0' cellpadding='0'>
    <tr>
    <td align=\"center\" class=\"font_sd\"><img src='img/".$r.".png'></td>
    </tr>
    <tr>
    <tr>
    <td align=\"center\" class=\"font_sd\">проголосовали: ".$myrow['q_vote']." раз</td>
    </tr>
    <tr>
    <td class=\"font_sd\"><br>лицензия: ".$myrow['license']."</td>
    </tr>

    <td class=\"font_sd\">
    ОС: ".$myrow['os']."
    </td>
    <tr>
    <td align=\"justify\" class=\"font_sd_big\"><br>".$myrow['shortdesc']."</td>
    </tr>
    </tr>
    </table>
    <br>
    <table width='60%' border='0' align='center' cellpadding='0' cellspacing='0' background=\"img/line2.png\">
    <tr>
    <td align=\"right\" valign=\"top\" width='45%'><a href=\"download.php?id=".$myrow['id']."\"><img src=\"img/download.png\" width=\"23\" height=\"23\"></a>&nbsp;&nbsp;&nbsp;&nbsp;</td>
    <td align=\"left\" valign=\"top\" height='37' width='55%' class=\"font_prog_download\"><a href='download.php?id=".$myrow['id']."'> [СКАЧАТЬ]</a></td>
    </tr>
    </table>
    <br>";


    }

    while ($myrow = mysql_fetch_array($result));

    echo "<br><div class=\"navigation\">";
    // Проверяем нужны ли стрелки назад
    if ($page != 1) $pervpage = '<a href=view_programs.php?subcategory='. $subcategory .'&page=1><<<</a> | <a href=view_programs.php?subcategory='. $subcategory .'&page='. ($page - 1) .'><</a> | ';
    // Проверяем нужны ли стрелки вперед
    if ($page != $total) $nextpage = ' | <a href=view_programs.php?subcategory='. $subcategory .'&page='. ($page + 1) .'>></a> | <a href=view_programs.php?subcategory='. $subcategory .'&page=' .$total. '>>>></a>';

    // Находим две ближайшие станицы с обоих краев, если они есть
    if($page - 5 > 0) $page5left = ' <a href=view_programs.php?subcategory='. $subcategory .'&page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';
    if($page - 4 > 0) $page4left = ' <a href=view_programs.php?subcategory='. $subcategory .'&page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';
    if($page - 3 > 0) $page3left = ' <a href=view_programs.php?subcategory='. $subcategory .'&page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';
    if($page - 2 > 0) $page2left = ' <a href=view_programs.php?subcategory='. $subcategory .'&page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
    if($page - 1 > 0) $page1left = ' <a href=view_programs.php?subcategory='. $subcategory .'&page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';

    if($page + 5 <= $total) $page5right = ' | <a href=view_programs.php?subcategory='. $subcategory .'&page='. ($page + 5) .'>'. ($page + 5) .'</a>';
    if($page + 4 <= $total) $page4right = ' | <a href=view_programs.php?subcategory='. $subcategory .'&page='. ($page + 4) .'>'. ($page + 4) .'</a>';
    if($page + 3 <= $total) $page3right = ' | <a href=view_programs.php?subcategory='. $subcategory .'&page='. ($page + 3) .'>'. ($page + 3) .'</a>';
    if($page + 2 <= $total) $page2right = ' | <a href=view_programs.php?subcategory='. $subcategory .'&page='. ($page + 2) .'>'. ($page + 2) .'</a>';
    if($page + 1 <= $total) $page1right = ' | <a href=view_programs.php?subcategory='. $subcategory .'&page='. ($page + 1) .'>'. ($page + 1) .'</a>';

    // Вывод меню если страниц больше одной

    if ($total > 1)
    {
    Error_Reporting(E_ALL & ~E_NOTICE);
    echo "<div class=\"navigation\">";
    echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
    echo "</div>";
    }
    echo "</div>"

    ?>
     
  2. semakos

    semakos Постоялец

    Регистр.:
    26 окт 2008
    Сообщения:
    63
    Симпатии:
    14
    Введи в таблицу дополнительный столбец - идентификатор, например $sub_id, и присваивай каждой subcategory уникальное число, получится:

    programs.php?subcategory=1234
     
  3. kozax89

    kozax89 Постоялец

    Регистр.:
    12 июл 2009
    Сообщения:
    135
    Симпатии:
    4
    тоесть советуешь добавить ячейку subcat_id в таблицу с прогами и потом делать выборку из бд по этой ячейке? Это конечно вариант, сам о нем думал, только меня интересует от чего обрезает URL? в нете вычитал, что URL может имет 2000 с лишним знаков... а тут только 75...
     
  4. semakos

    semakos Постоялец

    Регистр.:
    26 окт 2008
    Сообщения:
    63
    Симпатии:
    14
    Это может зависеть от браузера, например iexplorer не правильно обрабатывает некоторые символы и прерывает url, тут надо пользоваться функциями urlencode($subcategory) и urldecode($subcategory)
     
    kozax89 нравится это.
  5. kozax89

    kozax89 Постоялец

    Регистр.:
    12 июл 2009
    Сообщения:
    135
    Симпатии:
    4
    Спасибо тебе semakos :) Ты на самом деле мне очень помог!
    :ay:
     
Статус темы:
Закрыта.