За последние 24 часа нас посетили 15754 программиста и 1544 робота. Сейчас ищут 999 программистов ...

посмтраничная навигация

Тема в разделе "PHP для новичков", создана пользователем wolf777, 18 ноя 2014.

  1. wolf777

    wolf777 Новичок

    С нами с:
    26 авг 2014
    Сообщения:
    207
    Симпатии:
    0
    ребят как тут сделать постраничную навигацию?
    а то у меня тока 10 строк выводит и все
    Код (Text):
    1.     $num = 10;
    2.         $result = mysql_query("SELECT COUNT(*) as cnt FROM `".prefix."icq` WHERE `dig`='".$digs."'");
    3.         $refs = mysql_result($result, 0, "cnt");
    4.         $total = intval(($refs - 1) / $num) + 1;
    5.         if(!$page || $page < 0) $page = 1;
    6.         if($page > $total) $page = $total;
    7.         $start = $page * $num - $num;
    8.         $result = mysql_query("SELECT * FROM `".prefix."icq` WHERE `dig`='".$digs."' ORDER by `number` DESC LIMIT ".$start.", ".$num."");
     
  2. metadon

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

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Всё правильно, через LIMIT, проблема с алгоритмом?
     
  3. wolf777

    wolf777 Новичок

    С нами с:
    26 авг 2014
    Сообщения:
    207
    Симпатии:
    0
    metadon как его на экран вывести? через какую переменную?
     
  4. metadon

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

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Что через переменную вывести?
     
  5. wolf777

    wolf777 Новичок

    С нами с:
    26 авг 2014
    Сообщения:
    207
    Симпатии:
    0
    metadon на экран хочу вывести саму навигацию, ну что то мне подсказывает подсознание что тут она дописана не до конца, верно?
     
  6. metadon

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

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Ага, можно дописать.
    Как обычно, лучше весь алгоритм расписать по пунктам и потом реализовать код.
     
  7. wolf777

    wolf777 Новичок

    С нами с:
    26 авг 2014
    Сообщения:
    207
    Симпатии:
    0
    metadon ща попробую)
     
  8. wolf777

    wolf777 Новичок

    С нами с:
    26 авг 2014
    Сообщения:
    207
    Симпатии:
    0
    ребят написал навигацию до конца ну есть проблема( помогите разобраться
    вот сам скрипт
    Код (Text):
    1. $num = 5;
    2. $page = $_GET['page'];
    3. $result = mysql_query("SELECT COUNT(*)  FROM `".prefix."icq` WHERE `dig`='".$digs."'");
    4. $temp = mysql_fetch_array($result);
    5. $posts = $temp[0];
    6. $total = (($posts - 1) / $num) + 1;
    7. $total =  intval($total);
    8. $page = intval($page);
    9. if(empty($page) or $page < 0) $page = 1;
    10. if($page > $total) $page = $total;
    11. $start = $page * $num - $num;
    12.  
    13. $result = mysql_query("SELECT * FROM `".prefix."icq` WHERE `dig`='".$digs."' ORDER by `number` DESC LIMIT ".$start.", ".$num."");
    вот вывод

    Код (Text):
    1. // Проверяем нужны ли стрелки назад
    2. if ($page != 1) $pervpage = '<a href=index.php?page=1>Первая</a> | <a href=index.php?page='. ($page - 1) .'>Предыдущая</a> | ';
    3. // Проверяем нужны ли стрелки вперед
    4. if ($page != $total) $nextpage = ' | <a href=index.php?page='. ($page + 1) .'>Следующая</a> | <a href=index.php?page=' .$total. '>Последняя</a>';
    5.  
    6. // Находим две ближайшие станицы с обоих краев, если они есть
    7. if($page - 5 > 0) $page5left = ' <a href=index.php?page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';
    8. if($page - 4 > 0) $page4left = ' <a href=index.php?page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';
    9. if($page - 3 > 0) $page3left = ' <a href=index.php?page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';
    10. if($page - 2 > 0) $page2left = ' <a href=index.php?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
    11. if($page - 1 > 0) $page1left = '<a href=index.php?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
    12.  
    13. if($page + 5 <= $total) $page5right = ' | <a href=index.php?page='. ($page + 5) .'>'. ($page + 5) .'</a>';
    14. if($page + 4 <= $total) $page4right = ' | <a href=index.php?page='. ($page + 4) .'>'. ($page + 4) .'</a>';
    15. if($page + 3 <= $total) $page3right = ' | <a href=index.php?page='. ($page + 3) .'>'. ($page + 3) .'</a>';
    16. if($page + 2 <= $total) $page2right = ' | <a href=index.php?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
    17. if($page + 1 <= $total) $page1right = ' | <a href=index.php?page='. ($page + 1) .'>'. ($page + 1) .'</a>';
    18.  
    19. // Вывод меню если страниц больше одной
    20.  
    21. if ($total > 1)
    22. {
    23. Error_Reporting(E_ALL & ~E_NOTICE);
    24. echo "<div class=\"pstrnav\">";
    25. echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
    26. echo "</div>";
    ошибка такая

    Notice: Undefined index: page in \modules\icq\index.php on line 712

    и при переходе по навигации пустая страница
    /m/icq/index.php?page=2

    получается что page не видит, как исправить?
     
  9. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    что из этого 712?
     
  10. wolf777

    wolf777 Новичок

    С нами с:
    26 авг 2014
    Сообщения:
    207
    Симпатии:
    0
    переписал скрипт получилось так

    Код (Text):
    1.         if(!$digs){
    2.         $num = 10;
    3.         $result = mysql_query("SELECT COUNT(*) as cnt FROM `".prefix."icq`");
    4.         $refs = mysql_result($result, 0, "cnt");
    5.         $total = intval(($refs - 1) / $num) + 1;
    6.         if(!$page || $page < 0) $page = 1;
    7.         if($page < $total) $page = $total;
    8.         $start = $page * $num - $num;
    9.  
    10.         $result = mysql_query("SELECT * FROM `".prefix."icq` ORDER by `number` DESC LIMIT ".$start.", ".$num."");
    11.     } else {
    12.         $num = 10;
    13.         $result = mysql_query("SELECT COUNT(*) FROM `".prefix."icq` WHERE `dig`='".$digs."'");
    14. $temp = mysql_fetch_array($result);
    15. $posts = $temp[0];
    16. $total = (($posts - 1) / $num) + 1;
    17. $total =  intval($total);
    18. $page = intval($page);
    19. if(empty($page) or $page < 0) $page = 1;
    20. if($page > $total) $page = $total;
    21. $start = $page * $num - $num;
    22.         $result = mysql_query("SELECT * FROM `".prefix."icq` WHERE `dig`='".$digs."' ORDER by `number` DESC LIMIT ".$start.", ".$num."");
    23.    
    24.    
    25. ?>
    26. <?
    27. // Проверяем нужны ли стрелки назад
    28. if ($page != 1) $pervpage = '<a href=index.php?page=1>Первая</a> | <a href=index.php?page='. ($page - 1) .'>Предыдущая</a> | ';
    29. // Проверяем нужны ли стрелки вперед
    30. if ($page != $total) $nextpage = ' | <a href=index.php?page='. ($page + 1) .'>Следующая</a> | <a href=index.php?page=' .$total. '>Последняя</a>';
    31.  
    32. // Находим две ближайшие станицы с обоих краев, если они есть
    33. if($page - 5 > 0) $page5left = ' <a href=index.php?page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';
    34. if($page - 4 > 0) $page4left = ' <a href=index.php?page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';
    35. if($page - 3 > 0) $page3left = ' <a href=index.php?page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';
    36. if($page - 2 > 0) $page2left = ' <a href=index.php?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
    37. if($page - 1 > 0) $page1left = '<a href=index.php?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
    38.  
    39. if($page + 5 <= $total) $page5right = ' | <a href=index.php?page='. ($page + 5) .'>'. ($page + 5) .'</a>';
    40. if($page + 4 <= $total) $page4right = ' | <a href=index.php?page='. ($page + 4) .'>'. ($page + 4) .'</a>';
    41. if($page + 3 <= $total) $page3right = ' | <a href=index.php?page='. ($page + 3) .'>'. ($page + 3) .'</a>';
    42. if($page + 2 <= $total) $page2right = ' | <a href=index.php?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
    43. if($page + 1 <= $total) $page1right = ' | <a href=index.php?page='. ($page + 1) .'>'. ($page + 1) .'</a>';
    44.  
    45. // Вывод меню если страниц больше одной
    46.  
    47. if ($total > 1)
    48. {
    49. Error_Reporting(E_ALL & ~E_NOTICE);
    50. echo "<div class=\"pstrnav\">";
    51. echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
    52. echo "</div>";
    53. }
    54. ?>
    ошибки исправил, теперь 1 вопрос, при переходе по навигации страница пустая,
    получается такая ссылка
    /m/icq/index?digs=7page=2

    как это исправить?

    Добавлено спустя 1 минуту 32 секунды:
    сама ссыль где видна информация /m/icq/index?digs=7
     
  11. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Разделить параметры амперсандом: /m/icq/index?digs=7&page=2.
    А вашу страшную пагинацию можно сделать гораздо симпатичнее:
    Код (PHP):
    1. for ($i=max(2, $page-5); $i<=min($total-1; $page+5); $i++) 
    2.    if ($i != $page)
    3.       $pagination[] = "<a href='index.php?page=$i'>$i</a>"; 
    Потом еще добавляете $pervpage и $nextpage и соединяете путем join(' | ', $pagination);