Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
1 / 1 / 2
Регистрация: 15.09.2015
Сообщений: 158
1

Создание пагинации

06.02.2016, 18:58. Показов 2646. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,вот ниже мой код что читает з бд инфу и выкидывает на страницу,это ясно ,но выкидывает все записи их около 20-ти больше и не будет,надо как то сделать пагинацию,не пойму как ,вот мой код:

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
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>
    </title>
    <script src="js.js"></script>
<link rel="stylesheet" type="text/css" href="css.css" />
</head>
<body>
<?php
//Подключаюсь к бд
$link = mysql_connect('localhost', 'root', '');// My login = localhost  my,password= root
mysql_set_charset('utf8');//кодировка utf8
if (!$link) {
    die('подключение = fulse: ' . mysql_error());
}
$db_selected = mysql_select_db('news', $link);
if (!$db_selected) {
    die ('Не удалось выбрать базу: ' . mysql_error());
}
echo '<ul>';
$sql="SELECT news_title FROM `news`"; //делаю запрос
$ress=mysql_query($sql);
$count_golos=mysql_num_rows($ress);//получаю количество значений..нууу...мало ли понадобиться=)
$res = mysql_query("SELECT *, LEFT(`news_content`, 250) AS `news_content` FROM `news`");//Снова запрос
while($row = mysql_fetch_array($res)) {
     $no=$row['news_title'];
     $now=$row['news_content'];
     $id=$row['news_id'];
     $data=$row['news_date'];
     echo ("<div id='text$id'class='text'><b id='b'>$no </b><br> $now <br> <b id='b0'>Дата новости :$data</b></div>");//выводим названия новостей и сам контент (первые 500 символов)
}
</body>
</html>
а вот код который я нашел в инете:
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
<?php
  /* Входные параметры */
  $count_pages = 50;
  $active = 15;
  $count_show_pages = 10;
  $url = "/index.php";
  $url_page = "/index.php?page=";
  if ($count_pages > 1) { // Всё это только если количество страниц больше 1
    /* Дальше идёт вычисление первой выводимой страницы и последней (чтобы текущая страница была где-то посредине, если это возможно, и чтобы общая сумма выводимых страниц была равна count_show_pages, либо меньше, если количество страниц недостаточно) */
    $left = $active - 1;
    $right = $count_pages - $active;
    if ($left < floor($count_show_pages / 2)) $start = 1;
    else $start = $active - floor($count_show_pages / 2);
    $end = $start + $count_show_pages - 1;
    if ($end > $count_pages) {
      $start -= ($end - $count_pages);
      $end = $count_pages;
      if ($start < 1) $start = 1;
    }
?>
  <!-- Дальше идёт вывод Pagination -->
  <div id="pagination">
    <span>Страницы: </span>
    <?php if ($active != 1) { ?>
      <a href="<?=$url?>" title="Первая страница">&lt;&lt;&lt;</a>
      <a href="<?php if ($active == 2) { ?><?=$url?><?php } else { ?><?=$url_page.($active - 1)?><?php } ?>" title="Предыдущая страница">&lt;</a>
    <?php } ?>
    <?php for ($i = $start; $i <= $end; $i++) { ?>
      <?php if ($i == $active) { ?><span><?=$i?></span><?php } else { ?><a href="<?php if ($i == 1) { ?><?=$url?><?php } else { ?><?=$url_page.$i?><?php } ?>"><?=$i?></a><?php } ?>
    <?php } ?>
    <?php if ($active != $count_pages) { ?>
      <a href="<?=$url_page.($active + 1)?>" title="Следующая страница">&gt;</a>
      <a href="<?=$url_page.$count_pages?>" title="Последняя страница">&gt;&gt;&gt;</a>
    <?php } ?>
  </div>
<?php } ?>

или вот :


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
<?php
 
function pagination($all, $lim, $prev, $curr_link, $link)
{
//осуществляем проверку, чтобы выводимые первая и последняя страницы
// не вышли за границы нумерации
$strGet = "";
foreach ($_GET as $key => $value) {
    if ($key != "page") {
        $strGet .= $key . "=" . $value . "&";
    }
}
$first = $curr_link - $prev;
if ($first < 1) $first = 1;
$last = $curr_link + $prev;
if ($last > ceil($all / $lim)) $last = ceil($all / $lim);
 
//начало вывода нумерации
if ($first == $curr_link || $first == $last) {
    $href = '';
} else {
    $href = $link . '?' . $strGet . 'page=' . ($curr_link - 1);
}
if ($curr_link == 1)
    $href = $link;
echo "<a href={$href}>Назад</a>" . " ";
//выводим первую страницу
$y = 1;
if ($first > 1) echo "<a href='{$link}?{$strGet}page={$y}'>1</a> ";
//если текущая страница далеко от 1-й, то часть предыдущих страниц
//скрываем троеточием
$y = $first - 1;
if ($first > 2) {
    echo "<a href='{$link}?{$strGet}page={$y}'>...</a> ";
} else {
    //если текущая страница имеет номер до 10, то выводим все номера
    //перед заданным диапазоном без скрытия
    for ($i = 2; $i < $first; $i++) {
        echo "<a href='{$link}?{$strGet}page={$i}'>$i</a> ";
    }
}
//отображаем заданный диапазон: текущая страница +-$prev
for ($i = $first; $i < $last + 1; $i++) {
   if ($i == $curr_link) {
?>
        <span><a class='active' style='float:none'><?= $i ?></a></span>
        <?php
   } else {
         $alink = "<a href='{$link}";
        if ($i != 1 && $i != $last) {
            $alink .= "?{$strGet}page={$i}";
        } elseif ($i == $first) {
            $strGet = substr($strGet, 0, -1);
            $alink .= "?{$strGet}";
        } elseif ($i == $last) {
            if (substr($strGet, -1) == "&") {
                $strGet = substr($strGet, 0, -1);
            }
            $alink .= "?{$strGet}&page={$i}";
        }
        $alink .= "'>$i</a> ";
        echo $alink;
   }
}
if ($last == $curr_link || $first == $last) {
    $href = '';
} else {
    if (substr($strGet, -1) != "&") {
        $href = $link . '?' . $strGet . '&page=' . ($curr_link + 1);
    } else {
        $href = $link . '?' . $strGet . 'page=' . ($curr_link + 1);
    }
}
$y = $last + 1;
//часть страниц скрываем троеточием
if ($last < ceil($all / $lim) and ceil($all / $lim) - $last > 2) echo "<a href='{$link}?{$strGet}page={$y}'>...</a> ";
//выводим последнюю страницу
$e = ceil($all / $lim);
if ($last < ceil($all / $lim)) echo "<a href='{$link}?{$strGet}page={$e}'>$e</a>";
if ($curr_link == $last)
$href = $link.'?'.$strGet.'page='.$e;
echo " " . "<a href={$href}>Вперед</a>";
}
?>

каким чудом один из этих вариантов можно соеденить с моим кодом? зарание спасибо...сильно не ругайте,я как 3-тий день изучаю это)))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.02.2016, 18:58
Ответы с готовыми решениями:

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

Сортировка из двух таблиц MySQL в пагинации
Приветствую. Наткнулся на проблему с выводом данных в пагинации. Все данные выводятся из двух...

Выполнение php кода при пагинации
Все привет, у меня такая проблема. Мой сайт построен на принципе пагенации, т е каждый раз когда я...

Вопрос по пагинации
Здравствуйте! Очень волнует один вопрос. Вопрос очень банальный, но я в PHP знаю только include,...

7
7 / 7 / 3
Регистрация: 03.02.2016
Сообщений: 52
Записей в блоге: 3
06.02.2016, 19:11 2
VINDER_Z, решение "в лоб"
Кликните здесь для просмотра всего текста

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
<?php
 
    /* START PAGINATION */
 
    // Ссылка на эту страницу
    $thispage = $_SERVER['SCRIPT_NAME'];
    // Переменная хранит число сообщений выводимых на станице
    $num = 50;
    // Извлекаем из URL текущую страницу
    $page = $_GET['page'];
    // Определяем общее число сообщений в базе данных
    $result = mysql_query("SELECT COUNT(*) FROM table_name");
    $posts = mysql_result($result, 0);
    // Находим общее число страниц
    $total = intval(($posts - 1) / $num) + 1;
    // Определяем начало сообщений для текущей страницы
    $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 table_name LIMIT $start, $num");
    // В цикле переносим результаты запроса в массив $postrow
    // while ($postrow[] = mysql_fetch_array($result))
 
    /* END PAGINATION */
 
    ?>
 
    <div align="center">
        <nav>
            <ul class="pagination">
 
                <?php
 
                // Проверяем нужны ли стрелки назад
                if ($page != 1) {
                    $pervpage = '<li><a href=' . $thispage . '?page=1><span aria-hidden="true">&laquo;&laquo;</span></a></li>
                               <li><a href=' . $thispage . '?page=' . ($page - 1) . '><span aria-hidden="true">&laquo;</span></a></li>';
                } else {
                    $pervpage = '<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;&laquo;</span></a></li>
                                <li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>';
                }
 
                // Проверяем нужны ли стрелки вперед
                if ($page != $total) {
                    $nextpage = '<li><a href=' . $thispage . '?page=' . ($page + 1) . '><span aria-hidden="true">&raquo;</span></a></li>
                                   <li><a href=' . $thispage . '?page=' . $total . '><span aria-hidden="true">&raquo;&raquo;</span></a></li>';
                } else {
                    $nextpage = '<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">&raquo;&raquo;</span></a></li>
                                <li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">&raquo;</span></a></li>';
                }
 
                // Находим две ближайшие станицы с обоих краев, если они есть
                if ($page - 5 > 0) $page5left = '<li><a href=' . $thispage . '?page=' . ($page - 5) . '>' . ($page - 5) . '</a></li>';
                if ($page - 4 > 0) $page4left = '<li><a href=' . $thispage . '?page=' . ($page - 4) . '>' . ($page - 4) . '</a></li>';
                if ($page - 3 > 0) $page3left = '<li><a href=' . $thispage . '?page=' . ($page - 3) . '>' . ($page - 3) . '</a></li>';
                if ($page - 2 > 0) $page2left = '<li><a href=' . $thispage . '?page=' . ($page - 2) . '>' . ($page - 2) . '</a></li>';
                if ($page - 1 > 0) $page1left = '<li><a href=' . $thispage . '?page=' . ($page - 1) . '>' . ($page - 1) . '</a></li>';
                if ($page + 5 <= $total) $page5right = '<li><a href=' . $thispage . '?page=' . ($page + 5) . '>' . ($page + 5) . '</a></li>';
                if ($page + 4 <= $total) $page4right = '<li><a href=' . $thispage . '?page=' . ($page + 4) . '>' . ($page + 4) . '</a></li>';
                if ($page + 3 <= $total) $page3right = '<li><a href=' . $thispage . '?page=' . ($page + 3) . '>' . ($page + 3) . '</a></li>';
                if ($page + 2 <= $total) $page2right = '<li><a href=' . $thispage . '?page=' . ($page + 2) . '>' . ($page + 2) . '</a></li>';
                if ($page + 1 <= $total) $page1right = '<li><a href=' . $thispage . '?page=' . ($page + 1) . '>' . ($page + 1) . '</a></li>';
 
                // Вывод меню
                echo $pervpage . $page5left . $page4left . $page3left . $page2left . $page1left . '<li class="active"><a href="#">' . $page . '<span class="sr-only">(current)</span></a></li>' . $page1right . $page2right . $page3right . $page4right . $page5right . $nextpage;
 
                ?>
1
1 / 1 / 2
Регистрация: 15.09.2015
Сообщений: 158
06.02.2016, 21:51  [ТС] 3
лоб мой не пробился((((((((( толи по своей тупости то ли по не знанию я не смог это завести ибо сейчас использую уже такой код (вас послушал=))

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
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>
    </title>
    <script src="js.js"></script>
<link rel="stylesheet" type="text/css" href="css.css" />
</head>
<body>
<?php
//Подключаюсь к бд
 
$db = new PDO('mysql:host=localhost;dbname=news', 'root', '');
$db->query("SET CHARACTER SET utf8");
$db->query("SELECT * FROM users");
 
//Можно вычислить количество строк
$stmt = $db->query('SELECT * FROM news');
$row_count = $stmt->rowCount();
$dada_cout = $row_count;
$stm = $db->query('SELECT *, LEFT(`news_content`, 250) AS `news_content` FROM `news`');
while($row = $stm->fetch(PDO::FETCH_ASSOC)) {
 $no=$row['news_title'];
     $now=$row['news_content'];
     $id=$row['news_id'];
     $data=$row['news_date'];
     echo ("<div id='text$id'class='text'><b id='b'>$no </b><br> $now <br> <b id='b0'>Дата новости :$data</b></div>");
}
 
 
?>
 
 
</body>
 
</html>
сам файл по этому адресу http://localhost/news/pag.php


ничего не понимаю(((
1
7 / 7 / 3
Регистрация: 03.02.2016
Сообщений: 52
Записей в блоге: 3
06.02.2016, 22:26 4
VINDER_Z, я сейчас немного занят(дочку буду укладывать спать), так что гляну завтра, если меня никто не опередит.
0
1 / 1 / 2
Регистрация: 15.09.2015
Сообщений: 158
06.02.2016, 22:28  [ТС] 5
сделал так ,но думаю это бред.... да и не работает оно ...

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
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>
    </title>
    <script src="js.js"></script>
<link rel="stylesheet" type="text/css" href="css.css" />
</head>
<body>
<?php
//Подключаюсь к бд
 
$db = new PDO('mysql:host=localhost;dbname=news', 'root', '');
$db->query("SET CHARACTER SET utf8");
$db->query("SELECT * FROM users");
 
//Можно вычислить количество строк
$stmt = $db->query('SELECT * FROM news');
$row_count = $stmt->rowCount();
$dada_cout = $row_count;
$stm = $db->query('SELECT *, LEFT(`news_content`, 250) AS `news_content` FROM `news`');
while($row = $stm->fetch(PDO::FETCH_ASSOC)) {
 
     //echo ("<div id='text$id'class='text'><b id='b'>$no </b><br> $now <br> <b id='b0'>Дата новости :$data</b></div>");
}
 
/* START PAGINATION */
 
    // Ссылка на эту страницу
    $thispage = $_SERVER['index.php'];
    // Переменная хранит число сообщений выводимых на станице
    $num = 2;
    // Извлекаем из URL текущую страницу
    $page = $_GET['http://localhost/news/pag.php'];
    // Определяем общее число сообщений в базе данных
    $result = $stm;
 
    $posts = $dada_cout;
    // Находим общее число страниц
    $total = intval(($posts - 1) / $num) + 1;
    // Определяем начало сообщений для текущей страницы
    $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 table_name LIMIT $start, $num");
    $result = $db->query('SELECT * FROM news LIMIT $start, $num');
    // В цикле переносим результаты запроса в массив $postrow
 while($postrow[] = $stm->fetch(PDO::FETCH_ASSOC)) 
    /* END PAGINATION */
 
    ?>
 
    <div align="center">
        <nav>
            <ul class="pagination">
 
                <?php
 
                // Проверяем нужны ли стрелки назад
                if ($page != 1) {
                    $pervpage = '<li><a href=' . $thispage . '?page=1><span aria-hidden="true">&laquo;&laquo;</span></a></li>
                               <li><a href=' . $thispage . '?page=' . ($page - 1) . '><span aria-hidden="true">&laquo;</span></a></li>';
                } else {
                    $pervpage = '<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;&laquo;</span></a></li>
                                <li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>';
                }
 
                // Проверяем нужны ли стрелки вперед
                if ($page != $total) {
                    $nextpage = '<li><a href=' . $thispage . '?page=' . ($page + 1) . '><span aria-hidden="true">&raquo;</span></a></li>
                                   <li><a href=' . $thispage . '?page=' . $total . '><span aria-hidden="true">&raquo;&raquo;</span></a></li>';
                } else {
                    $nextpage = '<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">&raquo;&raquo;</span></a></li>
                                <li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">&raquo;</span></a></li>';
                }
 
                // Находим две ближайшие станицы с обоих краев, если они есть
                if ($page - 5 > 0) $page5left = '<li><a href=' . $thispage . '?page=' . ($page - 5) . '>' . ($page - 5) . '</a></li>';
                if ($page - 4 > 0) $page4left = '<li><a href=' . $thispage . '?page=' . ($page - 4) . '>' . ($page - 4) . '</a></li>';
                if ($page - 3 > 0) $page3left = '<li><a href=' . $thispage . '?page=' . ($page - 3) . '>' . ($page - 3) . '</a></li>';
                if ($page - 2 > 0) $page2left = '<li><a href=' . $thispage . '?page=' . ($page - 2) . '>' . ($page - 2) . '</a></li>';
                if ($page - 1 > 0) $page1left = '<li><a href=' . $thispage . '?page=' . ($page - 1) . '>' . ($page - 1) . '</a></li>';
                if ($page + 5 <= $total) $page5right = '<li><a href=' . $thispage . '?page=' . ($page + 5) . '>' . ($page + 5) . '</a></li>';
                if ($page + 4 <= $total) $page4right = '<li><a href=' . $thispage . '?page=' . ($page + 4) . '>' . ($page + 4) . '</a></li>';
                if ($page + 3 <= $total) $page3right = '<li><a href=' . $thispage . '?page=' . ($page + 3) . '>' . ($page + 3) . '</a></li>';
                if ($page + 2 <= $total) $page2right = '<li><a href=' . $thispage . '?page=' . ($page + 2) . '>' . ($page + 2) . '</a></li>';
                if ($page + 1 <= $total) $page1right = '<li><a href=' . $thispage . '?page=' . ($page + 1) . '>' . ($page + 1) . '</a></li>';
 
                // Вывод меню
                echo $pervpage . $page5left . $page4left . $page3left . $page2left . $page1left . '<li class="active"><a href="#">' . $page . '<span class="sr-only">(current)</span></a></li>' . $page1right . $page2right . $page3right . $page4right . $page5right . $nextpage;
 
?>
 
<script>
 
    </script>
 
</body>
</html>

ниже представляю скрины результата и тестовой бд=)

а еще код сиесес
CSS
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
body{
    background-color: rgb(157, 159, 155);
}
.text{
 
    color:blue;
    position: relative;
    font-size: 15px;
    width: 350px;
    height: 170px;
    background-color:orange;
    text-align: center;
    box-shadow: 15px;
    border-style: solid;
    border-color: red;
    cursor:pointer;
 
}
.text:active{
    border-color:blue;
    background-color: rgb(219, 137, 8);
}
.text:hover{
    border-width: 5px;
 
}
#b{
    
    font-size: 20px;
 
}
#b0{
    
    color:rgb(0, 13, 255);
 
}
Миниатюры
Создание пагинации   Создание пагинации  
0
1 / 1 / 2
Регистрация: 15.09.2015
Сообщений: 158
06.02.2016, 22:47  [ТС] 6
спасибо)))

Добавлено через 17 минут
на той записи ( в качестве скринов результат этого кода)


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
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>
    </title>
    <script src="js.js"></script>
<link rel="stylesheet" type="text/css" href="css.css" />
</head>
<body>
<?php
//Подключаюсь к бд
 
$db = new PDO('mysql:host=localhost;dbname=news', 'root', '');
$db->query("SET CHARACTER SET utf8");
$db->query("SELECT * FROM users");
 
//Можно вычислить количество строк
$stmt = $db->query('SELECT * FROM news');
$row_count = $stmt->rowCount();
$dada_cout = $row_count;
$stm = $db->query('SELECT *, LEFT(`news_content`, 250) AS `news_content` FROM `news`');
while($row = $stm->fetch(PDO::FETCH_ASSOC)) {
 $no=$row['news_title'];
     $now=$row['news_content'];
     $id=$row['news_id'];
     $data=$row['news_date'];
     echo ("<div id='text$id'class='text'><b id='b'>$no </b><br> $now <br> <b id='b0'>Дата новости :$data</b></div>");
}
 
 
?>
 
<script>
 
    </script>
 
</body>
</html>
0
Заблокирован
07.02.2016, 12:46 7

Не по теме:


Ну чЁ ощутили профит от использования PDO? :D

Вы решили весь ваш сайт собрать при помощи подсказок на форуме? Ядреный и крайне небезопасный винегрет получится. Хочу понять, что подвигло человека, познакомившегося с PHP 3 дня назад, на такое действо.



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

Во-первых, вам нужно вывести не все статьи, а их ограниченное число, скажем, не более 10, причем номер выбираемой десятки зависит от входного параметра – номера страницы в списке. Тут нужен такой запрос:
SQL
1
SELECT * FROM `news` LIMIT {($pn-1)*10}, 10
Значение параметра ($pn) вы уменьшаете на 1, чтобы например для первой страницы брать новости с 0 по 9, а не с 10 по 19.

Во-вторых, вам нужно вывести сам блок пагинации, для чего вам нужно знать общее количество страниц списка. Для этого вы можете первоначально запросить общее количество статей или прямо в запросе вычислить общее количество страниц на основе общего количества статей:
SQL
1
SELECT FLOOR((COUNT(*)+9)/10) FROM `news`
Для получения количества страниц тут использована известная формула (count+per_page-1) div per_page с поправкой на использование функции FLOOR вместо целочисленного деления (div).

После того, как общее количество страниц списка ($pc) получено, вы можете сразу выводить ссылки на все страницы при помощи цикла со счетчиком в диапазоне от 1 до $pc, однако обычно используют более изысканную пагинацию, для которой вам также понадобятся значения $first и $last, ограничивающие диапазон выводимых номеров страниц. Например, вот формулы для пагинации, которую я называю банковой:
PHP
1
2
$first=$pn-1-($pn-2)%$range;
$last=$pc>$first+$range?$first+$range:$pc;
В $range нужно предварительно поместить значение, определяющее ширину диапазона (например для вывода 7 номеров нужно поместить в $range значение 6). Если объединить все, что я выше написал, получится так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if ($result=mysqli_query($link,'SELECT FLOOR((COUNT(*)+9)/10) FROM `news`')))
{
  list($pc)=mysqli_fetch_row($result);
  mysqli_free_result($result);
  // две строчки ниже – это излюбленная практика отображать первую страницу
  // не под номером 1, а без номера (читай под номером 0), делая при этом номер 1 некорректным
  if ($pn==0) $pn++;
  elseif ($pn==1) $pn--;
  if ($pn==0||$pn>$pc) notfound();
  elseif ($result=mysqli_query($link,'SELECT * FROM `news` LIMIT '.(($pn-1)*10).',10'))
  {
    $range=6;
    $first=$pn-1-($pn-2)%$range;
    $last=$pc>$first+$range?$first+$range:$pc;
  }
  else unavailable();
}
else unavailable();
Остается только вывести строку пагинации:
PHP
1
2
3
4
5
6
7
8
9
  <nav>
    <ul class="pagination">
<?php for ($i=$first; $i<=$last; $i++): ?>
      <li<?= $i==$pn?' class="active"':'' ?>><a href="/news<?= pagelink($i) ?>"><?= $i ?></a></li>
<?php endfor; if ($pc>$last): ?>
      <li><a href="/news<?= pagelink($i) ?>">Далее</a></li>
<?php endif; ?>
    </ul>
  </nav>
Переключатель «Назад» можете не делать. В представленном варианте первый номер диапазона позволяет переключиться к предыдущему банку.
0
1 / 1 / 2
Регистрация: 15.09.2015
Сообщений: 158
07.02.2016, 14:22  [ТС] 8
спасибо,но я так и не могу это завести ,сначала выдало ошибку
Parse error: syntax error, unexpected ')' in D:\OpenServer\domains\localhost\news\pag.php on line 22

я убрал одну ")" выдает вот что:

Warning: mysqli_query() expects parameter 1 to be mysqli, resource given in D:\OpenServer\domains\localhost\news\pag.php on line 22

Fatal error: Call to undefined function unavailable() in D:\OpenServer\domains\localhost\news\pag.php on line 39

код я вставил так :
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
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>
    </title>
    <script src="js.js"></script>
<link rel="stylesheet" type="text/css" href="css.css" />
</head>
<body>
<?php
//Подключаюсь к бд
$link = mysql_connect('localhost', 'root', '');// My login = localhost  my,password= root
mysql_set_charset('utf8');//кодировка utf8
if (!$link) {
    die('подключение = fulse: ' . mysql_error());
}
$db_selected = mysql_select_db('news', $link);
if (!$db_selected) {
    die ('Не удалось выбрать базу: ' . mysql_error());
}
if ($result=mysqli_query($link,'SELECT FLOOR((COUNT(*)+9)/10) FROM `news`'))
{
  list($pc)=mysqli_fetch_row($result);
  mysqli_free_result($result);
  // две строчки ниже – это излюбленная практика отображать первую страницу
  // не под номером 1, а без номера (читай под номером 0), делая при этом номер 1 некорректным
  if ($pn==0) $pn++;
  elseif ($pn==1) $pn--;
  if ($pn==0||$pn>$pc) notfound();
  elseif ($result=mysqli_query($link,'SELECT * FROM `news` LIMIT '.(($pn-1)*10).',10'))
  {
    $range=6;
    $first=$pn-1-($pn-2)%$range;
    $last=$pc>$first+$range?$first+$range:$pc;
  }
  else unavailable();
}
else unavailable();
 
?>
</body>
 <nav>
    <ul class="pagination">
<?php for ($i=$first; $i<=$last; $i++): ?>
      <li<?= $i==$pn?' class="active"':'' ?>><a href="/news<?= pagelink($i) ?>"><?= $i ?></a></li>
<?php endfor; if ($pc>$last): ?>
      <li><a href="/news<?= pagelink($i) ?>">Далее</a></li>
<?php endif; ?>
    </ul>
  </nav>
</html>
что я не правильно сделал? я извиняюсь за тупизм мне даже стыдно ,но это уже капец...)

Добавлено через 32 секунды
переделывал на PDO та же ошибка только с PDO
0
07.02.2016, 14:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2016, 14:22
Помогаю со студенческими работами здесь

Оформление пагинации
Здраствуйте, не могу нормально оформить пагинацию пока сделал , что бы показывало как &quot;&quot;, через ид...

Оформление пагинации
Народ, прошу помощи. Нужно сделать такую же пагинацию, только на CSS Нужна под 01. Кто...

Позиционирование пагинации
Здравствуйте! Необходимо сделать, чтобы &lt;a&gt; теги были в середине, вот код и скриншоты: &lt;a...

Ищу плагин пагинации
Всем доброго времени суток. Делаем сайт для одной компании и для этого сайта необходимо...


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

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