Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
21 / 10 / 4
Регистрация: 02.04.2015
Сообщений: 779

Добавить к пагинации данные из параметров в ссылке

06.11.2025, 22:02. Показов 1780. Ответов 21
Метки нет (Все метки)

Доброго времени, есть такой скрипт пагинации, почти все работает так как мне нужно
но только вот траблы у меня с пагинацией, данные города и раздела берутся из ссылки
вида - https://domen.com/poisk.php?gorod=New York, NY&razdel=Household appliances

и передаются в последствии в бд , на выходе получаю данные из бд, но только отображает первую страницу
А пагинация на следующие страницы идет без параметров
такого вида - https://domen.com/poisk.php?search.php?page=2

Помогите дополнить скрипт, чтобы в пагинации добавлялись параметры и ссылки в пагинации имели вид
НЕ ТАКОЙ....
poisk.php?page=2
poisk.php?page=3
poisk.php?page=4
poisk.php?page=5

А ТАКОЙ...
poisk.php?gorod=New%20York,%20NY&razdel= Household%20appliances&page=2
poisk.php?gorod=New%20York,%20NY&razdel= Household%20appliances&page=3
poisk.php?gorod=New%20York,%20NY&razdel= Household%20appliances&page=4
poisk.php?gorod=New%20York,%20NY&razdel= Household%20appliances&page=5

Чтобы передавало параметры в ссылке!

Там вся проблема в том что это функция и внутри у нее ограниченна видимость переменных


вот я добавил код
в функцию

// добавляет к пагинации (город и категорию)
$gorod = $_GET['gorod'];
$razdel = $_GET['razdel'];
$loccat = "&gorod=$gorod&razdel=$razdel";
// print_r($loccat);


как теперь мне связать вместе чтобы получить линки в пагинации вида?
poisk.php?gorod=New%20York,%20NY&razdel= Household%20appliances&page=2
poisk.php?gorod=New%20York,%20NY&razdel= Household%20appliances&page=3
poisk.php?gorod=New%20York,%20NY&razdel= Household%20appliances&page=4
poisk.php?gorod=New%20York,%20NY&razdel= Household%20appliances&page=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
108
109
110
111
112
113
114
115
<?php
$gorod1 = isset($_GET['gorod']) ? $_GET['gorod'] : 'New York, NY';
$gorod = addslashes($gorod1); // экранирует (\, ', ", NULL). 
 
 
$razdel1 = isset($_GET['razdel']) ? $_GET['razdel'] : 'Household appliances';
$razdel = addslashes($razdel1); // экранирует (\, ', ", NULL).
 
// вид ссылки с параметрами https://domen.com/poisk.php?gorod=New York, NY&razdel=Household appliances
?>
 
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8">
 
</head>
<body>
 
 
 
 
 
 
<?php
$servername = "localhost";
$database = "bdmames1";
$username = "bdmames1";
$password = "12121212";
// Устанавливаем соединение
$db = mysqli_connect($servername, $username, $password, $database);
 
 
 
// Проверяем соединение
if (!$db) {
die("Connection failed: " . mysqli_connect_error());
}
 
// выводим из бд
$db = new mysqli($servername, $username, $password, $database);
mysqli_set_charset($db, "utf8");
if($db->connect_error){
    die("Ошибка: " . $db->connect_error);
}
 
 
$pageformat = 'search.php?page={pagenum}'; //Формат ссылки вместо {pagenum} будет номер страницы
 
 
$address_sql = "%$gorod%";
$category_sql = "$razdel";
 
 
$page = $_GET['page']; //Номер страницы
$num = 10; //Количество записей
$sql = "FROM `bdmames1` WHERE category='$category_sql' AND address LIKE '$address_sql' ORDER BY id DESC"; //sql запрос без SELECT
 
$result = Pagination ($db, $sql, $num, $pageformat, $page, $loccat);
 
 
function Pagination ($db, $sql, $num, $pageformat, $page){
$result = $db->query("SELECT COUNT(*) ". $sql)->fetch_row();
$total = intval(($result[0] - 1) / $num) + 1;
$page = intval($page);
 
 
// добавляет к пагинации (город и категорию)
$gorod = $_GET['gorod'];
$razdel = $_GET['razdel'];
$loccat = "&gorod=$gorod&razdel=$razdel";
// print_r($loccat);
 
 
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
$start = $page * $num - $num;
$getinfo = $db->query("SELECT * " .$sql. " LIMIT $start, $num");
$info = $getinfo->fetch_all(MYSQLI_ASSOC);
preg_match('/(?<a>.*?){pagenum}(?<b>.*?)/', $pageformat, $pg);
if ($page != 1) $pervpage = "<a href={$pg['a']}1{$pg['b']}><<</a><a href={$pg['a']}".($page - 1)." {$pg['b']}><</a>";
if ($page != $total) $nextpage = ' <a href='.$pg['a']. ($page + 1) .$pg['b'].'>></a><a href='.$pg['a'] .$total. $pg['b'].'>>></a>';
if($page - 2 > 0) $page2left = ' <a href='.$pg['a']. ($page - 2).$pg['b'].'>'. ($page - 2) .'</a> ';
if($page - 1 > 0) $page1left = '<a href='.$pg['a']. ($page - 1).$pg['b'].'>'. ($page - 1) .'</a> ';
if($page + 2 <= $total) $page2right = '  <a href='.$pg['a']. ($page + 2).$pg['b'] .'>'. ($page + 2).'</a>';
if($page + 1 <= $total) $page1right = '  <a href='.$pg['a']. ($page + 1).$pg['b'].'>'. ($page + 1).'</a>';
$pagination =  $pervpage.$page2left.$page1left.'<a class="active" href="#">'.$page.'</a>'.$page1right.$page2right.$nextpage;
$result = array('result' => $info);
 
 
 
 
 
foreach ($result['result'] as $row) {
 
 
 
echo "тут вывод данных из бд"; 
}
 
 
echo "<span>$pagination</span>";
 
 
 
}
$db->close(); 
?>
 
 
 
 
 
</body>
</html>
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.11.2025, 22:02
Ответы с готовыми решениями:

Принятие параметров в ссылке и их отправка далее по ссылке без action
Доброго времени суток. У меня есть данный кусок кода &lt;?php if (isset($_GET)) { $_SESSION...

Пагинация. Вывод не соответствующих данных
Доброго времени суток, жители форума. Пытаюсь освоить принцип пагинации, и мне почти удалось. Но...

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

21
21 / 10 / 4
Регистрация: 02.04.2015
Сообщений: 779
09.11.2025, 20:52  [ТС]
PHP
1
2
3
4
5
6
7
8
echo Pagination ($db, $sql, $num, $page);
 
 //выводит ссылки пагинации если будет статей более одной странице
    if ($total > 1) {
        
        echo "<span>$pagination</span>";
        
    }
так прописал толку 0
0
1317 / 1009 / 232
Регистрация: 01.10.2018
Сообщений: 3,917
11.11.2025, 09:22
serauto79, строка навигации формируется не так, как вы показали. Показанный вариант - это с каких-то курсов, где преподают студенты-самоучки.

Как написал sad67man, сначала нужно "разобрать" все параметры адреса, а потом "собрать" нужные (когда меняется только строка запроса, путь можно считать единым параметром). При сборке строки запроса использование http_build_query или аналогичной функции обязательно, т.к. в $_GET находятся уже декодированные значения. Браузер может что-то закодировать сам при переходе по соответствующим ссылкам, но это он уже исправляет ошибки разработчиков.

Что касается изменения параметра page, ветвления обычно используются для ссылок наподобие "Предыдущая"/"Следующая" или "Первая"/"Последняя". Для основных ссылок строки навигации достаточно использовать обычный цикл for. Ограничители диапазона вычисляются по формулам. Например, вот для самого распространенного метода:
PHP
1
2
3
4
5
6
7
function pagination($pn, $pc, $range = 4)
{
  $last = $pn + ($range >> 1) < $pc ? $pn + ($range >> 1) : $pc;
  $first = $last - $range > 1 ? $last - $range : 1;
  $last = $first + $range < $pc ? $first + $range : $pc;
  return [$first, $last];
}
Добавлено через 3 минуты
Значение $range = 4 - это для вывода максимум пяти ссылок.

Ссылку на текущую страницу можно заменить другим элементом, например при помощи ветвления внутри цикла.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.11.2025, 09:22

Пагинация, страницы
$CountListPage=5; if(empty($_GET))$Page=1;else $Page=$_GET; $start=($Page-1)*$CountListPage; ...

Дерево комментариев с пагинацией
Что то я гуглю гуглю, но что то не нагуглю... Я делал раньше просто: id, parent_id, text... И всё...

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

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

Пагинация на php
ребятки помогите с пагинацией есть количество страниц всего, это число и оно хранится в переменной...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов • Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp • Смежный проект:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru