Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 958
1

Пагинация

12.05.2014, 10:43. Показов 2332. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Имею код вывода всех зарегистрированных пользователей:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php include 'header.html'; ?>
 
<table>
    <thead>
        <tr>
            <td><?=$lang['login']?></td>
            <td><?=$lang['email']?></td>
            <td><?=$lang['registration']?></td>
        </tr>
    </thead>
    <tbody> 
        
<?php foreach($users as $users):?>
        <tr>
            <td><a href="/user.php?p=user&id=<?=$users['id']?>"><?=$users['login']?></td>
            <td><?=$users['email']?></td>
            <td><?=$users['date_reg']?></td>
        </tr>
<?php endforeach;?>
 
    </tbody>
</table>
 
<?php include 'footer.html'; ?>
PHP
1
2
3
4
5
6
7
8
<?php
$title = $lang['all_users'];
 
$connect = mysqli_query($sql, "SELECT * FROM `user` ORDER BY `login` DESC") or die(mysqli_error());
$users = array();
while($data = mysqli_fetch_assoc($connect))
$users[] = $data;
?>
Сейчас все пользователи выводятся на одну страницу, как можно прикрутить пагинацию к этому скрипту?
Смотрел во этот код: http://phpfaq.ru/paginator который ниже - Новая версия, но так и не смог его привинтить...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2014, 10:43
Ответы с готовыми решениями:

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

Пагинация
Пытаюсь уже второй день разобраться с пагинацией на сайте, все разные ошибки выскакивают... Создал...

Пагинация
Здравствуйте. Помогите кому не трудно сделать переключатель страниц. &lt;?php $ordtype = 'title'; ...

Пагинация на сайте
Здравствуйте. Есть пагинация. Выглядит она вот так: Первая 1 2..Последняя &gt;&gt; Как сделать так,...

18
10 / 10 / 4
Регистрация: 26.12.2012
Сообщений: 141
12.05.2014, 10:56 2
PHP
1
2
3
4
5
6
7
8
9
$page = $_GET['page'];
if($page == 1)
{
$page = 0;
}
$connect = mysqli_query($sql, "SELECT * FROM `user` ORDER BY `login` DESC LIMIT 10 OFFSET $page * 10 ") or die(mysqli_error());
$users = array();
while($data = mysqli_fetch_assoc($connect))
$users[] = $data;
get параметром передаешь номер страницы... ну и чтобы узнать сколько всего страниц
PHP
1
2
$count = SELECT COUNT(*) FROM user ; тут запрос сами напишете, ну и не забываем что если записей мало (например < 10) то и страница 1 а не ( 5 / 10 = 0.5) проверки сделать надо
$count = $count / 10;
а дальше циклом выводишь номера страниц.
PHP
1
2
3
<?foreach($count as $i):?>
<a href="/?page=<?=$i;?>"><?=$i;?></a>
<?endforeach?>
вроде как то так... извиняюсь если что то упустил...
0
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 958
12.05.2014, 19:11  [ТС] 3
Спасибо, но не помогло...
Поищу еще решение....
0
129 / 50 / 8
Регистрация: 01.12.2013
Сообщений: 572
12.05.2014, 21:18 4
FastFrog вопрос: что за переменная $sql в 6 строке?
0
10 / 10 / 4
Регистрация: 26.12.2012
Сообщений: 141
12.05.2014, 23:09 5
Я не знаю. Это код автора, а не мой.
0
129 / 50 / 8
Регистрация: 01.12.2013
Сообщений: 572
12.05.2014, 23:13 6
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$id = (addslashes($_GET['id'])); // Забираем тему статей из URL
$res = mysql_query("select `tema_id`, `tema_name` from `tema`");
$result = mysql_query(" SELECT id, title, zag, anons, text, date, tema, img  FROM articles
                        WHERE tema='$id' ORDER BY id DESC ") or die(mysql_error());
$row = mysql_fetch_array($result);
?>
    <?php while($row = mysql_fetch_array($result)):?>  // Цикл вывода всех статей в этой теме
<!-- тут html код дизайна -->
        <?=$row['id']?>
        <?php echo $row['zag']?>
        <?php echo $row['date']?>
    <? endwhile;?>
<!-- тут хотелось бы пагинатор -->
<? mysql_close();?>
Вот как мне вставить пагинатор на предпоследнюю строку?
0
10 / 10 / 4
Регистрация: 26.12.2012
Сообщений: 141
12.05.2014, 23:18 7
Алгоритм использовать который я выше описал, а сам html код выводить как то так:
PHP
1
2
3
4
5
<?for($i = 0;i<$count;$i++)
{
echo '<a href="/?page='.$i.'">'.$i.'</a>';
}
?>
где $count соответственно кол-во страниц.
0
129 / 50 / 8
Регистрация: 01.12.2013
Сообщений: 572
12.05.2014, 23:24 8
Добавил запрос с COUNT

PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$id = (addslashes($_GET['id'])); // Забираем тему статей из URL
$res = mysql_query("select `tema_id`, `tema_name` from `tema`");
$result = mysql_query(" SELECT id, title, zag, anons, text, date, tema, img  FROM articles
                        WHERE tema='$id' ORDER BY id DESC ") or die(mysql_error());
 
$count = mysql_query(" SELECT COUNT id, title, zag, anons, text, date, tema, img  FROM articles
                        WHERE tema='$id' ORDER BY id DESC LIMIT ") or die(mysql_error());
$count = $count / 5;
 
$row = mysql_fetch_array($result);
?>
Результат: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2
0
10 / 10 / 4
Регистрация: 26.12.2012
Сообщений: 141
12.05.2014, 23:29 9
PHP
1
2
3
$result = mysql_query(" SELECT COUNT(*) as count FROM articles WHERE tema='$id'") or die(mysql_error());
$count = mysql_fetch_assoc($result);
$count = $count['count'];
1
129 / 50 / 8
Регистрация: 01.12.2013
Сообщений: 572
12.05.2014, 23:34 10
То же самое SQL syntax, сделал так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
include_once("db_blog.php");
 
$id = $_GET['id'];
$res = mysql_query("select `tema_id`, `tema_name` from `tema`");
$result = mysql_query(" SELECT id, title, zag, anons, text, date, tema, img  FROM articles
                        WHERE tema='$id' ORDER BY id DESC LIMIT ") or die(mysql_error());
$result_count = mysql_query(" SELECT COUNT(*) as count FROM articles WHERE tema='$id'") or die(mysql_error());
$count = mysql_fetch_assoc($result_count);
$count = $count['count'];
$count = $count / 5;
$row = mysql_fetch_array($result);
?>
0
10 / 10 / 4
Регистрация: 26.12.2012
Сообщений: 141
12.05.2014, 23:35 11
Как я вам отвечу на вопрос если я ни вижу кода (всего) ни что за ошибка...
0
129 / 50 / 8
Регистрация: 01.12.2013
Сообщений: 572
12.05.2014, 23:37 12
Это весь код запросов.
Ошибка: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2

FastFrog извиняюсь. Сам где-то косячу, пошёл в phpmyadmin и сделал запрос SELECT COUNT(*) as count FROM articles WHERE tema='$id'
Ответ: 3 - значит запрос правильный
0
10 / 10 / 4
Регистрация: 26.12.2012
Сообщений: 141
12.05.2014, 23:44 13
Ну вот. Написано же,
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2
а именно "у вас ошибка с синтаксисом проверьте документацию но использование ' ' тобишь скобочек "
PHP
1
2
$result = mysql_query(" SELECT id, title, zag, anons, text, date, tema, img  FROM articles
                        WHERE tema='$id' ORDER BY id DESC ") or die(mysql_error());
0
129 / 50 / 8
Регистрация: 01.12.2013
Сообщений: 572
12.05.2014, 23:54 14
Запрос sql прошёл, пагинатор не выводится внизу, решил глянуть что в переменной var_dump

PHP
1
2
3
4
<? var_dump ($count);?>
<?foreach($count as $i):?>
<a href="/?page=<?=$i;?>"><?=$i;?></a>
<?endforeach?>
Ответ: resource(10) of type (mysql result)
Может из-за того что тип mysql result не выводится, его надо преобразовать во что ни будь?
0
10 / 10 / 4
Регистрация: 26.12.2012
Сообщений: 141
13.05.2014, 00:04 15
я не совсем понимаю смысл этого кода
PHP
1
2
3
<?foreach($count as $i):?>
<a href="/?page=<?=$i;?>"><?=$i;?></a>
<?endforeach?>
если вы делаете что я сказал что в $count на данный момент хранится число а не массив, следственно и работать с ним надо по другому.
PHP
1
2
3
4
5
6
<?
for($i = 0;$i<$count;$i++)
{
echo '<a href="/?page='.$i.'">'.$i.'</a>';
}
?>
я уже писал вам этот код
1
129 / 50 / 8
Регистрация: 01.12.2013
Сообщений: 572
13.05.2014, 00:14 16
Сори, мне показалось что тот тоже ваш код из второго поста.

Поставил, в целом работает, только он мне выдал: 0123456789
Учитывая что записей 11 и делю я на 5, должно быть 3 страницы. Где же ошибка?
0
10 / 10 / 4
Регистрация: 26.12.2012
Сообщений: 141
13.05.2014, 00:30 17
Во первых это нужно сделать проверку ведь если 11 разделить на 5 не будет 3, а будет 2.2. Соответственно нужно округлить в большую сторону записи чтобы избежать подобных канфузов делается это так
PHP
1
$count =  ceil($count);
и во вторых, да... извиняюсь, цикл начинается не с 0 а с 1
PHP
1
2
3
4
5
6
<?
for($i = 1;$i<$count;$i++)
{
echo '<a href="/?page='.$i.'">'.$i.'</a>';
}
?>
и убедитесь что в $count именно страницы а не число записей
0
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 958
13.05.2014, 19:03  [ТС] 18
Цитата Сообщение от marrk Посмотреть сообщение
что за переменная $sql в 6 строке?
В этой переменной хранятся данные к БД. Без неё MySQL(i) ругается - выдает ошибку...

В общем кое что нашел, получилось так:
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
<?php
$title = $lang['all_users'];
$all_users = mysqli_num_rows(mysqli_query($sql, 'SELECT * FROM `user`'));
$lines_per_page = 5;
 
if (isset($_GET['page']))
{
    $limit = (($_GET['page'] * $lines_per_page) - $lines_per_page);
}
else
{
    $limit = 0;
}
if (($limit + $lines_per_page) > $all_users)
{
    $offset = $all_users - $limit;
}
else
{
    $offset = $lines_per_page;
}
 
$connect = mysqli_query($sql, 'SELECT * FROM `user` LIMIT '.$limit.', '.$offset.'') or die(mysqli_error($sql));
 
$users = array();
while($data = mysqli_fetch_assoc($connect))
$users[] = $data;
?>
Теперь страницы открываются по адресам: сайт.ru/user.php?p=users, сайт.ru/user.php?p=users&page=2, сайт.ru/user.php?p=users&page=3, но к сожалению я ни чего не понял, как сделать цикл для вывода ссылок-цифр страниц (самой пагинации) в шаблон...
Помогите, пожалуйста, допилить.
Спасибо.

Добавлено через 2 минуты
И еще, если поставить не существующею страницу, скажем: сайт.ru/user.php?p=users&page=4566, выдает ошибку:
PHP
1
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-1' at line 1
Что можно сделать?
0
10 / 10 / 4
Регистрация: 26.12.2012
Сообщений: 141
13.05.2014, 21:18 19
Ошибку выдает потому что нету проверок на то сколько страниц. А кодом offset вы сдвигаете записи на определенное кол-во едениц. Но если страниц 5999 а записей 5 то и из базы данных он не сможет их достать. Вот и получается нужно проверять имеет ли возможность сделать столько страниц.
На счет сколько может всего быть страниц я уже не раз тут рассказал. Как и сам цикл for для вывода ссылок.
0
13.05.2014, 21:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2014, 21:18
Помогаю со студенческими работами здесь

Не работает пагинация
Не работает пагинатор, при переходе на другую страницу, в строке меняется номер страницы, а на...

Пагинация на сайте
есть код, работает хорошо, только вот он выводит все страницы, а мне нужно что бы если допустим я...

Пагинация без БД
Здравствуйте. Ох, пагинация без БД это сложно, но мне нужна помощь. Нужно сделать пагинацию без...

Постраничная пагинация
Добрый вечер. Начинаю сходить с ума. Ребят. Как сделать нумерацию кнопок снизу? С выводом...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru