Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/26: Рейтинг темы: голосов - 26, средняя оценка - 4.92
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860

При переходе по постраничной навигации выводится пустая страница

19.11.2014, 01:22. Показов 5841. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ребят помогите разобраться что я делаю не так?

написал скрипт, скрипт работает без ошибок, ну при переходе по навигации пустая страница, в чем я ошибся?


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

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

Реализация постраничной навигации при ЧПУ
Такая проблема, написал скрипт навигации, вывода постраничного новостей из базы данных, но вот на какой проблеме встрял: У меня некий...

"Пустая страница" при переходе в браузере на "localhost" (Denwer)
Все форумы облазил и окончательного решения так и не нашел. Я установил Dewner,все загрузилось и работает исправно, но проблема в том, что...

36
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
19.11.2014, 01:52
Цитата Сообщение от wolf Посмотреть сообщение
Error_Reporting(E_ALL & ~E_NOTICE);
вот это уберите и появится еще несколько недочетов, когда номер активной страницы меньше пяти или больше 15.

Добавлено через 1 минуту
Цитата Сообщение от wolf Посмотреть сообщение
for($i = 0; $i < mysql_num_rows($result);$i++){
$m = mysql_fetch_array($result);
PHP
1
while ($m = mysql_fetch_assoc($result)) {
0
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
19.11.2014, 01:53  [ТС]
Error_Reporting(E_ALL & ~E_NOTICE);
убрал и появились такие ошибки

Notice: Undefined variable: page5left in Z:\home\amm.su\WWW\modules\icq\index.php on line 744
[Денвер: показать возможную причину ошибки]
Notice: Undefined variable: pervpage in Z:\home\amm.su\WWW\modules\icq\index.php on line 744

Notice: Undefined variable: page4left in Z:\home\amm.su\WWW\modules\icq\index.php on line 744

Notice: Undefined variable: page3left in Z:\home\amm.su\WWW\modules\icq\index.php on line 744

Notice: Undefined variable: page2left in Z:\home\amm.su\WWW\modules\icq\index.php on line 744

Notice: Undefined variable: page1left in Z:\home\amm.su\WWW\modules\icq\index.php on line 744

Notice: Undefined variable: page4right in Z:\home\amm.su\WWW\modules\icq\index.php on line 744

Notice: Undefined variable: page5right in Z:\home\amm.su\WWW\modules\icq\index.php on line 744
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
19.11.2014, 01:58
Цитата Сообщение от wolf Посмотреть сообщение
<?
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href=index.php?page=1>Первая</a> | <a href=index.php?page='. ($page - 1) .'>Предыдущая</a> | ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' | <a href=index.php?page='. ($page + 1) .'>Следующая</a> | <a href=index.php?page=' .$total. '>Последняя</a>';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 5 > 0) $page5left = ' <a href=index.php?page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';
if($page - 4 > 0) $page4left = ' <a href=index.php?page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';
if($page - 3 > 0) $page3left = ' <a href=index.php?page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';
if($page - 2 > 0) $page2left = ' <a href=index.php?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href=index.php?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 5 <= $total) $page5right = ' | <a href=index.php?page='. ($page + 5) .'>'. ($page + 5) .'</a>';
if($page + 4 <= $total) $page4right = ' | <a href=index.php?page='. ($page + 4) .'>'. ($page + 4) .'</a>';
if($page + 3 <= $total) $page3right = ' | <a href=index.php?page='. ($page + 3) .'>'. ($page + 3) .'</a>';
if($page + 2 <= $total) $page2right = ' | <a href=index.php?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href=index.php?page='. ($page + 1) .'>'. ($page + 1) .'</a>';
// Вывод меню если страниц больше одной
if ($total > 1){
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div class=\"pstrnav\">";
echo $pervpage.$page5left.$page4left.$page3le ft.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right. $page4right.$page5right.$nextpage;
echo "</div>";
}
?>
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
    if ($page != 1) $prevpage = '<a href=index.php?page=1>Первая</a> | <a href=index.php?page='. ($page - 1) .'>Предыдущая</a> | '; else $prevpage = '';
    if ($page != $total) $nextpage = ' | <a href=index.php?page='. ($page + 1) .'>Следующая</a> | <a href=index.php?page=' .$total. '>Последняя</a>'; else $nextpage = '';
    for ($i = 5; $i > 0; --$i)
    {   
        $left = 'page'.$i.'left';
        $right = 'page'.$i.'right';
        if ($page - $i > 0) $$left =  '<a href=index.php?page='. ($page - $i) .'>'. ($page - $i) .'</a> | '; else $$left = '';
        if ($page + $i <= $total)  $$right = ' | <a href=index.php?page='. ($page + $i) .'>'. ($page + $i) .'</a>'; else $$right = '';
    }
    if ($total > 1)
    {
        echo "<div class=\"pstrnav\">";
        echo $prevpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
        echo "</div>";
    }
?>
0
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
19.11.2014, 02:02  [ТС]
переписал ссылки

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

PHP
1
2
for($i = 0; $i < mysql_num_rows($result);$i++){
$m = mysql_fetch_array($result);
на

PHP
1
while ($m = mysql_fetch_assoc($result)) {
и все равно не переходит по страницам, что ещё может быть?

Добавлено через 3 минуты
Kerry_Jr спасибо ошибки пропали, только вот по навигации все же пе переходит, в чем ещё может быть проблема?
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
19.11.2014, 02:05
wolf, стоп, а теперь внятно с толком с расстановкой объясните, что должно получиться, и что получается.
0
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
19.11.2014, 02:12  [ТС]
2 скрина
Миниатюры
При переходе по постраничной навигации выводится пустая страница   При переходе по постраничной навигации выводится пустая страница  
0
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
19.11.2014, 02:28  [ТС]
номеров в базу добавил около 30-ти, как видно на 1 скрине там вывелся у нас 1 номер, так как в переменную $num=1 я записал значение 1, и вывелась навигация, при переходе по навигации она нам выдает всегда этот 1 номер, а как сделать чтоб выдавались остальные номера?

Добавлено через 6 минут
Kerry_Jr в чем может быть тут проблема?(
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
19.11.2014, 10:03
wolf, вот, писал когда-то класс вывода постраничной навигации:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
<?php
    /*
    * Класс для генерации постраничной навигации
    */
    class Pagination
    {
        /**
        * 
        * @var Ссылок навигации на страницу
        * 
        */
        private $max = 10;
        
        /**
        * 
        * @var Текущая страница
        * 
        */
        private $current_page;
        
        /**
        * 
        * @var Общее количество записей
        * 
        */
        private $total; 
        
        /**
        * 
        * @var Записей на страницу
        * 
        */
        private $limit;
        
        /**
        * Запуск необходимых данных для навигации
        * @param integer $total - общее количество записей
        * @param integer $limit - количество записей на страницу
        * 
        * @return
        */
        public function __construct( $total, $limit )
        {
            # Устанавливаем общее количество записей
            $this->total = $total;
            
            # Устанавливаем количество записей на страницу
            $this->limit = $limit;
            
            # Вызываем метод установки текущей страницы
            $this->setCurrentPage();
        }
        
        /**
        *  Для вывода ссылок
        * 
        * @return HTML-код со ссылками навигации
        */
        public function get()
        {
            # Для ссылок
            $links = null;
            
            # Получаем ограничения для цикла
            $limits = $this->limits();
            
            # Генерируем ссылки
            for($page=$limits[0]; $page<=$limits[1]; $page++)
            {
                # Если текущая это текущая страница
                if($page == $this->current_page)
                    # Обводим жирным
                    $links .= '<strong>'. $page .'</strong>';
                else
                    # Заносим ссылку
                    $links .= '<a href="?page='. $page .'" title="'.$page.' страница">'. $page .'</a>';
            }
            
            # Если ссылки создались
            if(!is_null($links))
            {
                # Если текущая страница не первая
                if($this->current_page > 1)
                {
                    # Вычисляем предыдущую страницу
                    $prevPage = $this->current_page - 1;
                    
                    # Создаём ссылку "Предыдущая"
                    $links = '<a href="?page='.$prevPage.'" title="Предыдущая">&lt;</a>' . $links;
                }
                
                # Если текущая страница не последняя
                if($this->current_page < $this->amount())
                {
                    # Вычисляем предыдущую страницу
                    $nextPage = $this->current_page + 1;
                    
                    # Создаём ссылку "Предыдущая"
                    $links .= '<a href="?page='.$nextPage.'" title="Следующая">&gt;</a>';
                }
            }
                
            # Возвращаем ссылки
            return $links;
        }
        
        # Для получения, откуда стартовать
        private function limits()
        {
            # Получаем количество всех страниц
            $amount = $this->amount();
            
            # Вычисляем ссылки слева (чтобы активная ссылка была посередине)
            $left = $this->current_page - round($this->max / 2);
 
            # Вычисляем начало отсчёта
            $start = $left > 0 ? $left : 1;                
            
            # Если впереди есть как минимум $this->max страниц
            if($start + $this->max <= $amount)
                # Назначаем конец цикла вперёд на $this->max страниц или просто на минимум
                $end = $start > 1 ? $start + $this->max : $this->max;
            else
            {
                # Конец - общее количество страниц
                $end = $amount;
              
                # Начало - минус $this->max от конца
                $start = $amount - $this->max > 0 ? $amount - $this->max : 1;
              
            }
            
            # Возвращаем
            return array($start, $end);
        }
 
        # Для установки текущей страницы
        private function setCurrentPage()
        {
            # Получаем номер страницы
            $this->current_page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
            
            # Получаем общее количество страниц
            $amount = $this->amount();
            
            # Если текущая страница боле нуля
            if($this->current_page > 0)
            {
                # Если текунщая страница меньше общего количества страниц
                if($this->current_page > $amount)
                    # Устанавливаем страницу на последнюю
                    $this->current_page = $amount;
            }
            else
                # Устанавливаем страницу на первую
                $this->current_page = 1;
        }
        
        # Для получеия общего числа страниц
        private function amount()
        {
            # Делим и возвращаем
            return
                round( $this->total / $this->limit );
        }
    }

Попробуйте его использовать. Этот код поместите в отдельный файл, затем подключайте его в своём скрипте.
Использовать так:
PHP
1
2
3
4
5
6
7
8
9
/**
    * Начинаем работу с постраничной навигацией
    * Первый аргумент - общее количество
    * Второй - количество записей на страницу
    */
    $pagination = new Pagination(100, 5);
    
    # Выводим навигацию
    echo $pagination->get();
Согласитесь, чуть красивей?
Выборку из БД делайте, как и делали, а для вывода ссылок используйте мой класс.
С ним удобно работать, так как не придётся дублировать код навигации в тех местах, где понадобится навигация.
1
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
19.11.2014, 12:08  [ТС]
я вот думаю, может категории лучше сделать в бд? и по категориям выводить страницы?

Добавлено через 3 минуты
Согласитесь, чуть красивей?
то что красивее) я с вами согласен, ну я не пойму как должны выводиться страницы, если меня логика не подводит, то у нас получается должны быть категории в бд, у меня номера определяется по dig в бд, если номер 7 - то в dig записывается именно 7, а вот с постраничной навигацией наверное должно быть так, если номер 7 например то записывается в dig-7, а категория значит должна быть например 1 ну как определит код какое количество номеров вывести например на странице 2? если в бд где будет номер 7 все категории будут например 1 (как то запутано получается)
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
19.11.2014, 12:10
wolf, а если записей в категории много - всё равно придётся использовать навигацию.
0
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
19.11.2014, 12:12  [ТС]
я понимаю, поэтому я навигацию и делаю, ну только я не пойму её работу, как она должна определять в бд какую страницу вывести, нам получается нужна в таблице строка cat?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
19.11.2014, 12:24
Цитата Сообщение от wolf Посмотреть сообщение
как она должна определять в бд какую страницу вывести
Ну моя навигация допустим создаёт запрос: /?page=11
Т.е. в массиве $_GET у нас будет содержаться "page" со значением "11". Для того, чтобы вытащить следующие данные (для следующей страницы), нужно это значение помножить на значение "limit" (в моём случае это 5, из скрипта выше). Затем для выборки использовать:
SQL
1
LIMIT $start, 5
Где $start = 11 * 5;

Добавлено через 4 минуты
Я когда писал этот скрипт, у меня информацию о текущей странице и о количестве записей на страницу содержалась в Singleton-классе-регистре, поэтому текущая страница для выборки получалась напрямую из навигации (они как бы синхронизированны были). Но так как у Вас нет класса-регистра, Вам придётся "вручную" из GET получить значение page и помножить на количество записей на страницу.
0
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
19.11.2014, 12:28  [ТС]
lyod у меня просто ссылка уже формируется так
site.ru/m/icq/index?digs=7 тут получается будет дописываться просто /?page=11(или любое число)?

Добавлено через 2 минуты
у меня имеется такой скрипт

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?
 
$_GET['page']=isset($_GET['page'])?intval($_GET['page']):'first';
 
global $PAR,$MONTH_SHORT;
 
function news_index_one($n) {
  global $CATS,$KEYWORDS,$DESCRIPTION,$TITLE,$MONTH_SHORT;
  $nc=array(); foreach ($CATS['news.news'] as $id=>$x) $nc[$id]=$x['name'];
  $a=$n;
  $a['date_d']=date('d',$a['ts']);
  $a['date_m']=date('m',$a['ts']);
  $a['date_mon']=$MONTH_SHORT[date('n',$a['ts'])];
  $a['date_y']=date('Y',$a['ts']);
  $a['date_h']=date('H',$a['ts']);
  $a['date_i']=date('i',$a['ts']);
  $a['l']=self_url();
  $a['d']=$n['dt'];
  $a['n']=$nc[$n['cat']];
  $a['t']=str_from_web($n['title']);
  $a['s']=str_from_web($n['short']);
  $a['v']=str_from_web($n['value']);
  $a['f']=news_admin_funcs($n['id']);
  $a['r']=rating_show('news.one',$n['id'],self_url("id=$n[id]"));
  $TITLE=strip_tags(page_bb($n['title']));
  $DESCRIPTION=strip_tags(page_bb($n['short']));
  $KEYWORDS=$n['kw'];
  return(tpl('one',$a));
  }
 
function news_index_start() {
  return(tpl('start'));
  }
 
function news_index_pages($pgs,$page) {
  if ($pgs<1) return;
  for ($i=1; $i<=$pgs+1; $i++) $a[$i]=$i;
  $s=<<<CODE
<br>
{SKIN_FRAME_START}
<table class="print" cellspacing="0" style=""><tr>
<th class="p">Страницы:</th><td class="p">
CODE;
  foreach ($a as $i) {
    $style=($page==$i-1)?'font-weight:bold':'';
    $l=self_url("page=$i");
    $s.=<<<CODE
 <a href="$l" style="$style">$i</a>
CODE;
    }
  $s.=<<<CODE
</td></tr></table>
{SKIN_FRAME_END}
CODE;
  return $s;
  }
 
function news_index_list() {
  global $CATS,$TITLE,$DESCRIPTION,$KEYWORDS,$MONTH_SHORT;
  $cat=isset($_GET['cat'])?$_GET['cat']:0;
  $where=$cat?"cat='$cat'":'';
  $per=5;
  $r=mysql_query("select count(*) from news") or die(mysql_error());
  list($num)=mysql_fetch_row($r);
  $num=get_sql_count('news',$where);
  $pgs=floor(($num)/$per); if ($pgs>0) $pgs--;
  $page=$_GET['page'];
  if ($page=='first') $page=0; else $page--;
  if ($page<0) $page=0; if ($page>$pgs) $page=$pgs;
  $start=$page*$per;
  if ($page==$pgs) $lim=$num%$per+$per; else $lim=$per;
  $limit="limit $lim offset $start";
  $editor=($page==$pgs);
  
  $nc=array(); foreach ($CATS['news.news'] as $id=>$n) $nc[$id]=$n['name'];
  $c=get_sql_row('cats',$w);
  $TITLE=strip_tags($c['name']);
  $DESCRIPTION=strip_tags($c['short']);
  $KEYWORDS=$c['kw'];
  $c['pages']=news_index_pages($pgs,$page);
  $s=tpl('start',$c);
  $m=get_sql_table('news.id',$where,"dt desc $limit","unix_timestamp(dt)ts");
  foreach ($m as $id=>$n) {
    $a=$n;
    $a['date_d']=date('d',$a['ts']);
    $a['date_m']=date('m',$a['ts']);
    $a['date_mon']=$MONTH_SHORT[date('n',$a['ts'])];
    $a['date_y']=date('Y',$a['ts']);
    $a['date_h']=date('H',$a['ts']);
    $a['date_i']=date('i',$a['ts']);
    $a['id']=$id;
    $a['d']=$n['dt'];
    $a['t']=str_from_web(page_bb($n['title']));
    $a['s']=str_from_web(page_bb($n['short']));
    $a['l']=self_url("id=$id&page=".($page+1));
    $a['f']=news_admin_funcs($id);
    $s.=tpl('list',$a);
    }
      $s.=news_index_pages($pgs,$page);
  $s.=tpl('end',$c);
  return($s);
  }
 
if (isset($_GET['id']) and $n=get_sql_row('news',"id='".intval($_GET['id'])."'",'',"unix_timestamp(dt)ts,unix_timestamp(dth)tsh")) {
  $TITLE=strip_tags($n['title']);
  $DESCRIPTION=strip_tags($n['short']);
  $KEYWORDS=$n['kw'];
  $s=rating_actions('news.one',$n['id'],self_url("id=$n[id]"));
  if ($s) { echo $s; return; }
  if ($PAR['news']['COMMENTS']) {
    $s=comments_actions('news.one',$n['id'],self_url("id=$n[id]"));
    if ($s) { echo $s; return; }
    }
  echo page_bb(news_index_one($n));
  if ($PAR['news']['COMMENTS']) {
    echo comments_show('news.one',$n['id'],self_url("id=$n[id]"));
    }
  }
else
  echo page_bb(news_index_list());
 
?>
он выводит навигацию на страницу новостей и при нажатии по страницам он выдает нам ссылку вида
/m/news/index?page=2
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
19.11.2014, 12:53
Цитата Сообщение от wolf Посмотреть сообщение
тут получается будет дописываться просто /?page=11(или любое число)?
Конечно любое . 11 я для примера привёл.

Добавлено через 12 минут
Цитата Сообщение от wolf Посмотреть сообщение
у меня просто ссылка уже формируется так
site.ru/m/icq/index?digs=7
Т.е. Вы хотите, чтобы и digs=7 сохранялось? В принципе правильно хотите. Сейчас придумаем что-нибудь
0
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
19.11.2014, 13:13  [ТС]
Т.е. Вы хотите, чтобы и digs=7 сохранялось? В принципе правильно хотите. Сейчас придумаем что-нибудь
site.ru/m/icq/index?digs=7 так уже выводится) так выводит все номера которые 7-ми знакми, а к ним надо как то прикрутить постраничную навигацию

Добавлено через 3 минуты
у меня получается такой скриптик, который выводит наши номера

PHP
1
2
3
4
5
6
7
8
$num = 5; 
$result = mysql_query("SELECT COUNT(*) as cnt FROM `".prefix."icq` WHERE `dig`='".$digs."'");
$refs = mysql_result($result, 0, "cnt"); 
$total = intval(($refs - 1) / $num) + 1; 
if(!$page || $page < 0) $page = 1; 
if($page > $total) $page = $total; 
$start = $page * $num - $num;
$result = mysql_query("SELECT * FROM `".prefix."icq` WHERE `dig`='".$digs."' ORDER by `number` DESC LIMIT ".$start.", ".$num."");
Добавлено через 18 секунд
и вот ссылки номеров

PHP
1
2
3
4
    <a class='button23' href='?digs=6'>6-знаки</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    <a class='button23' href='?digs=7'>7-знаки</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    <a class='button23' href='?digs=8'>8-знаки</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    <a class='button23' href='?digs=9'>9-знаки</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
19.11.2014, 13:21
Цитата Сообщение от wolf Посмотреть сообщение
site.ru/m/icq/index?digs=7 так уже выводится
Цитата Сообщение от wolf Посмотреть сообщение
у меня просто ссылка уже формируется так
site.ru/m/icq/index?digs=7
Ну я и говорю, Вы хотите, чтобы навигация так формировалась? site.ru/m/icq/index?digs=7&page=11
0
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
19.11.2014, 13:24  [ТС]
Ну я и говорю, Вы хотите, чтобы навигация так формировалась? site.ru/m/icq/index?digs=7&page=11
да именно так)
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
19.11.2014, 13:41
Лучший ответ Сообщение было отмечено wolf как решение

Решение

Попробуйте так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<?php
    /*
    * Класс для генерации постраничной навигации
    */
    class Pagination
    {
        /**
        * 
        * @var Ссылок навигации на страницу
        * 
        */
        private $max = 10;
        
        /**
        * 
        * @var Текущая страница
        * 
        */
        private $current_page;
        
        /**
        * 
        * @var Общее количество записей
        * 
        */
        private $total; 
        
        /**
        * 
        * @var Записей на страницу
        * 
        */
        private $limit;
        
        /**
        * Запуск необходимых данных для навигации
        * @param integer $total - общее количество записей
        * @param integer $limit - количество записей на страницу
        * 
        * @return
        */
        public function __construct( $total, $limit )
        {
            # Устанавливаем общее количество записей
            $this->total = $total;
            
            # Устанавливаем количество записей на страницу
            $this->limit = $limit;
            
            # Вызываем метод установки текущей страницы
            $this->setCurrentPage();
        }
        
        /**
        *  Для вывода ссылок
        * 
        * @return HTML-код со ссылками навигации
        */
        public function get()
        {
            # Получаем параметры текущего запроса
            parse_str( $_SERVER['QUERY_STRING'], $params );
            
            # Для ссылок
            $links = null;
            
            # Получаем ограничения для цикла
            $limits = $this->limits();
            
            # Генерируем ссылки
            for($page=$limits[0]; $page<=$limits[1]; $page++)
            {
                # Если текущая это текущая страница
                if($page == $this->current_page)
                    # Обводим жирным
                    $links .= '<strong>'. $page .'</strong>';
                else{
                    # Заменяем в массиве GET данных page
                    $params['page'] = $page;
                    
                    # Формируем запрос
                    $query = http_build_query( $params );
                    
                    # Заносим ссылку
                    $links .= '<a href="?'. $query .'" title="'.$page.' страница">'. $page .'</a>';
                }
            }
            
            # Возвращаем ссылки
            return $links;
        }
        
        # Для получения, откуда стартовать
        private function limits()
        {
            # Получаем количество всех страниц
            $amount = $this->amount();
            
            # Вычисляем ссылки слева (чтобы активная ссылка была посередине)
            $left = $this->current_page - round($this->max / 2);
 
            # Вычисляем начало отсчёта
            $start = $left > 0 ? $left : 1;                
            
            # Если впереди есть как минимум $this->max страниц
            if($start + $this->max <= $amount)
                # Назначаем конец цикла вперёд на $this->max страниц или просто на минимум
                $end = $start > 1 ? $start + $this->max : $this->max;
            else
            {
                # Конец - общее количество страниц
                $end = $amount;
              
                # Начало - минус $this->max от конца
                $start = $amount - $this->max > 0 ? $amount - $this->max : 1;
              
            }
            
            # Возвращаем
            return array($start, $end);
        }
 
        # Для установки текущей страницы
        private function setCurrentPage()
        {
            # Получаем номер страницы
            $this->current_page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
            
            # Получаем общее количество страниц
            $amount = $this->amount();
            
            # Если текущая страница боле нуля
            if($this->current_page > 0)
            {
                # Если текунщая страница меньше общего количества страниц
                if($this->current_page > $amount)
                    # Устанавливаем страницу на последнюю
                    $this->current_page = $amount;
            }
            else
                # Устанавливаем страницу на первую
                $this->current_page = 1;
        }
        
        # Для получеия общего числа страниц
        private function amount()
        {
            # Делим и возвращаем
            return
                round( $this->total / $this->limit );
        }
    }
1
2 / 2 / 10
Регистрация: 17.09.2012
Сообщений: 860
19.11.2014, 13:47  [ТС]
lyod ооооооооо работает спасибо огромноееееееееееееееееее)))))) только ссылка получается такая
/m/icq/index?module=icq&unit=index&digs=7&page= 10
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.11.2014, 13:47
Помогаю со студенческими работами здесь

Пропадают POST-данные при постраничной навигации
Здравствуйте. На странице есть форма, которая служит фильтром для запроса в БД, который выводит некоторые данные. В примере ниже это...

Сброс данных фильтра при постраничной навигации
Добрый день. Данная тема, наверное, стара для многих, но тем не менее нужны подсказки. Суть проблемы: пользователь выбирает на...

Сохранение выбранной сортировки при постраничной навигации
Как сохранить выбранную сортировку при постраничной навигации. Пока получается только выбрать сортировку на главной странице, а при...

Код не выполняется / не работает / выводится в браузер / пустая белая страница
php Я установил apache2 и php Написал скрипт он выводился как код, прописал sudo find /var/www/* -type f -exec /bin/chmod 400...

PHP код не выполняется / не работает / выводится в браузер / пустая белая страница
Достаточно часто у начинающих разработчиков встречаются проблемы с запуском PHP-кода. Симптомы и причины могут быть самые разнообразные....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru