Форум программистов, компьютерный форум, киберфорум
Наши страницы

PHP для начинающих

Войти
Регистрация
Восстановить пароль
 
paskalnikita
85 / 85 / 23
Регистрация: 12.08.2014
Сообщений: 1,036
#1

Неправильно отображается количество страниц в постраничной навигации - PHP

13.07.2015, 20:00. Просмотров 428. Ответов 8
Метки нет (Все метки)

Всем доброго времени суток! Столкнулся с такой проблемой, что количество страниц не соответствует действительности.
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
<?php
        // ini_set("display_errors",1);
        // error_reporting(E_ALL); 
    $db = new PDO('mysql:dbname=blog;host=localhost','root', '');
    $page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
    $perpage = isset($_GET['per-page']) && $_GET['per-page'] <= 50 ? (int)$_GET['per-page'] : 5;
 
    $start = ($page > 1) ? ($page * $perpage) - $perpage : 0;
    $articles = $db->prepare("SELECT SQL_CALC_FOUND_ROWS *
    FROM users
    LIMIT {$start}, {$perpage}
    ");
 
    $articles->execute();
    $articles = $articles -> fetchALL(PDO::FETCH_ASSOC);
    $total = $db->query("SELECT FOUND_ROWS() AS total") -> fetch( PDO::FETCH_ASSOC);
    if ($perpage === 0) {$perpage = 1;}
    $pages = $total['total'] / $perpage;
?>
<?php foreach($articles as $article): ?>
        <div class="users-list">
                                <img style='float:left;margin:5px 5px;' src="<?php echo $article['profile']; ?>" class='round' height='50px' alt="<?php echo $user_data['profile'];?>'s profile">
                                        <li>
                                            First name: <?php echo $article['first_name']; ?>.
                                        </li>
                                        <li>
                                            First name: <?php echo $article['last_name']; ?>.
                                        </li>
                                            <li>
                                                <a href="/user/<?php echo $article['username']; ?>"><?php echo $article['username']; ?>'s profile</a>
                                            </li>
                                </div>
    <?php endforeach; ?>
    <div class="pagination">
        <?php for($x = 1; $x <= $pages; ++$x):
                endfor;
                // Проверяем нужны ли стрелки назад
                if ($page != 1) $firstpage = '<a href=?page=1>«</a> | <a href=?page='. ($page - 1).'&per-page='.$perpage.'> ‹ </a> | ';
                // Проверяем нужны ли стрелки вперед
                if ($page != $x) $nextpage = ' | <a href=?page='. ($page + 1) .'&per-page='.$perpage.'> › </a> | <a href=?page=' .$x. '>»</a>';
                // Находим две ближайшие станицы с обоих краев, если они есть
                if($page - 3 > 0) $page3left = '<a href=?page='. ($page - 3) .'&per-page='.$perpage.'>'. ($page - 3) .'</a> | ';
                if($page - 2 > 0) $page2left = '<a href=?page='. ($page - 2) .'&per-page='.$perpage.'>'. ($page - 2) .'</a> | ';
                if($page - 1 > 0) $page1left = '<a href=?page='. ($page - 1) .'&per-page='.$perpage.'>'. ($page - 1) .'</a> | ';
                if($page + 3 <= $x) $page3right = ' | <a href=?page='. ($page + 3) .'&per-page='.$perpage.'>'. ($page + 3) .'</a>';
                if($page + 2 <= $x) $page2right = ' | <a href=?page='. ($page + 2) .'&per-page='.$perpage.'>'. ($page + 2) .'</a>';
                if($page + 1 <= $x) $page1right = ' | <a href=?page='. ($page + 1) .'&per-page='.$perpage.'>'. ($page + 1) .'</a>';
                // Вывод меню если страниц больше одной
                if ($x > 1){
                Error_Reporting(E_ALL & ~E_NOTICE);
                $current_page = '<a href="$page"class="selected-page">'.$page.'</a>';
                echo $firstpage.$page1left.'<b>'.$current_page.'</b>'.$page1right.$nextpage;
                }
        ?>
    </div>
</p>
Получается так, что записей у меня 15, вывожу по 5 записей на страницу, и количество страниц у меня идет не 3. Скажите, что не так? Заранее спасибо!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2015, 20:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Неправильно отображается количество страниц в постраничной навигации (PHP):

Как избавится от дублирования страниц в постраничной навигации в PHP - PHP
Здравствуйте. Подскажите как избавиться от дублирования тегов &quot;title&quot;, &quot;meta_d&quot;, &quot;meta_k&quot; в постраничной навигации. Адрес ссылки имеет вид:...

Вопрос с постраничной навигации - PHP
Здравствуйте, Помогите разобраться с постраничной навигации,написал код,проблема в следующем,я вывожу товары на страницу по 5 штук,а мой...

Посздание постраничной навигации - PHP
Подскажите плиз ! Нужна постраничная навигация след вида : Есть например комментарии нужно выодить по 10 штук на страницу и по пять...

Меню постраничной навигации - PHP
Значит, есть меню постраничной навигации, которая выводит номера страниц по порядку. Код выглядит вот так: $total_number_of_pages =...

Ошибка в постраничной навигации - PHP
Здравствуйте! Помогите пожалуйста разобраться, прикручиваю к сайту постраничную навигацию, но что-то идет не так и выдает ошибки: ...

Многоточие в постраничной навигации - PHP
Здравствуйте. Есть небольшой скрипт игровой статы. Количество инфы увеличилось, и страниц стало так много, что не помещается в 22&quot; монитор,...

8
Июнь
Заблокирован
14.07.2015, 09:38 #2
Вы получаете количество записей на одной странице и пытаетесь на этой выборке делать пагинацию

Последняя формула тоже неправильная.
0
paskalnikita
85 / 85 / 23
Регистрация: 12.08.2014
Сообщений: 1,036
14.07.2015, 11:24  [ТС] #3
Так как тогда правильно будет?
0
paskalnikita
85 / 85 / 23
Регистрация: 12.08.2014
Сообщений: 1,036
15.07.2015, 23:34  [ТС] #4
Про формулу, вы имеете ввиду $pages? , округлить значение нужно или как? Подскажите, никак не могу понять, почему неправильно
0
Para bellum
Эксперт PHP
3027 / 2788 / 598
Регистрация: 06.01.2011
Сообщений: 8,125
16.07.2015, 09:42 #5
Может лучше это использовать?
Обмен готовыми решениями
0
paskalnikita
85 / 85 / 23
Регистрация: 12.08.2014
Сообщений: 1,036
16.07.2015, 11:44  [ТС] #6
Para bellum, ну у меня проблема в количестве страниц, а в готовом варианте это не совсем то, что я хочу решить
0
Para bellum
Эксперт PHP
3027 / 2788 / 598
Регистрация: 06.01.2011
Сообщений: 8,125
16.07.2015, 12:21 #7
Цитата Сообщение от paskalnikita Посмотреть сообщение
ну у меня проблема в количестве страниц
Ну так я и предлагаю более лучшее решение, чем с тем скриптом мучиться.
Дело Ваше.
0
Июнь
Заблокирован
16.07.2015, 16:21 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
paskalnikita, так программистом никогда не станете. Я вам подсказала, где искать ошибки

1) для получения общего числа записей используем в запросе COUNT(*) на всех записях, т.е. без условий и лимита;
2) для целочисленного деления формула выглядела бы как ($total+$perpage-1)/$perpage, но т.к. в php нет целочисленного деления, нужно избавиться от возможной дробной части вещественного результата ((int),intval()). Есть и другие способы добиться нужного результата, например, использование функции ceil.

Добавлено через 7 минут
Вот из моего нового блога, изучайте:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$pp=5;
 
if ($link=mysqli_open())
{
  if ($res=mysqli_query($link,'SELECT COUNT(*) FROM `site_articles`'))
  {
    list($count)=mysqli_fetch_row($res);
    $pc=(int)(($count+$pp-1)/$pp);
    mysqli_free_result($res);
    if ($pn==1||!($res=mysqli_query($link,'SELECT * FROM `site_articles` ORDER BY `id` DESC LIMIT '.(($pn-($pn>0))*$pp).','.$pp))) notfound();
  }
  else notfound();
  mysqli_close($link);
}
else notfound();
Вывод самих записей с освобождением объекта-результата, а также пагинация находятся отдельно (в шаблоне).

Добавлено через 8 минут
P.S. Условие в запросах все-таки может быть, но только для запрета выборки "скрытых" записей
1
Июнь
Заблокирован
22.07.2015, 16:39 #9
Проверка на обращение к несуществующей странице "сверху":
Код
$pn>$pc и далее ||$pn==1||...
0
22.07.2015, 16:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2015, 16:39
Привет! Вот еще темы с ответами:

скрипт постраничной навигации - PHP
Проблемка такая-задался мыслью переделать свой сайт...в том числе и навигацию постраничную...так как она была написана не мной и случайно...

Скрипт постраничной навигации - PHP
Здрасте всем!! Полазил по форуму и в поиске, нашел кучу всяких тем, но не одна не помогла, поэтому хочу попросить вас о помощи. Я новичок...

Косяк постраничной навигации в поиске - PHP
При поиске формируется вот такая ссылка ...

Отсортировать id по убыванию в постраничной навигации - PHP
Здравствуйте. Есть постраничная навигация, добавленная запись отображается последней. Как сделать так чтобы последние записи были...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru