Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
3 / 3 / 3
Регистрация: 01.06.2016
Сообщений: 307

Пропадают POST-данные при постраничной навигации

06.10.2017, 11:06. Показов 2226. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

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

HTML5
1
2
3
4
5
6
<p>Выберите диапазон дат</p>
<form name="set_time" method="POST" class="inline-form">
    с <input type="text" id="datefrom" name="datefrom" value="<?echo $df;?>" size="10">
    по <input type="text" id="dateto" name="dateto" value="<?echo $dt;?>" size="10">
    <input type="submit" name="set" value="Выбрать"/>
</form>:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if (isset($_POST['datefrom'])) {
    $df = $_POST['datefrom'];
    $start = date('Y-m-d', strtotime($_POST['datefrom'])) . ' 00:00:00';
    } 
    else {
        $df = date('d.m.Y');
        $start = date('Y-m-d') . ' 00:00:00';
    }
 
if (isset($_POST['dateto'])) {
    $dt = $_POST['dateto'];
    $end = date('Y-m-d', strtotime($_POST['dateto'])) . ' 23:59:59';
    } 
    else {
        $dt = date('d.m.Y');
        $end = date('Y-m-d') . ' 23:59:59';
    }
Можно конечно передавать данные GET-ом, но дата это не единственный фильтр, их ещё несколько, поэтому GET-ом будет неудобно.
Читал, что можно как-то работать с сессиями в таком случае, но ни разу их ещё не использовал. Уже второй день мучаюсь, не пойму логику, как написать, чтобы при переходе по страницам POST-данные не терялись. Прошу помощи.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.10.2017, 11:06
Ответы с готовыми решениями:

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

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

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

24
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
06.10.2017, 11:24
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
session_start();
 
if($_SERVER['REQUEST_METHOD'] === 'POST')
{
    if(isset($_POST['datefrom']))
        $_SESSION['datefrom'] = $_POST['datefrom'];
    else
        $_SESSION['datefrom'] = date('d.m.Y');
 
    if(isset($_POST['dateto']))
        $_SESSION['dateto'] = $_POST['dateto'];
    else
        $_SESSION['dateto'] = date('d.m.Y');
}
?>
<p>Выберите диапазон дат</p>
<form name="set_time" method="POST" class="inline-form">
    с <input type="text" id="datefrom" name="datefrom" value="<?=$_SESSION['datefrom']?>" size="10">
    по <input type="text" id="dateto" name="dateto" value="<?=$_SESSION['dateto'];?>" size="10">
    <input type="submit" name="set" value="Выбрать"/>
</form>:
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
06.10.2017, 11:35
Prtoy, не надо использовать пост для навигации, это не правильно.
0
3 / 3 / 3
Регистрация: 01.06.2016
Сообщений: 307
06.10.2017, 11:44  [ТС]
Jewbacabra, так в навигации гет используется. Пост в форме.

Добавлено через 4 минуты
Jodah, не сработало...
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
06.10.2017, 11:54
Prtoy, покажите, как сделали.

У меня этот код работает. Отправил форму, затем перехожу по ссылкам, данные в форме не меняются.
0
3 / 3 / 3
Регистрация: 01.06.2016
Сообщений: 307
06.10.2017, 12:11  [ТС]
Jodah,

PHP/HTML
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
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if(isset($_POST['datefrom'])) {
        $_SESSION['datefrom'] = $_POST['datefrom'];
        $df = $_SESSION['datefrom']; //Это подставляется в value формы
        $start = date('Y-m-d', strtotime($_SESSION['datefrom'])) . ' 00:00:00'; //Это подставляется в запрос к БД
    }
    else {
        $_SESSION['datefrom'] = date('d.m.Y');
        $df = $_SESSION['datefrom']; //Это подставляется в value формы
        $start = date('Y-m-d', strtotime($_SESSION['datefrom'])) . ' 00:00:00'; //Это подставляется в запрос к БД
    }
 
    if(isset($_POST['dateto'])) {
        $_SESSION['dateto'] = $_POST['dateto'];
        $dt = $_SESSION['dateto']; //Это подставляется в value формы
        $end = date('Y-m-d', strtotime($_SESSION['dateto'])) . ' 23:59:59'; //Это подставляется в запрос к БД
    }
    else {
        $_SESSION['dateto'] = date('d.m.Y');
        $dt = $_SESSION['dateto']; //Это подставляется в value формы
        $end = date('Y-m-d', strtotime($_SESSION['dateto'])) . ' 23:59:59'; //Это подставляется в запрос к БД
    }
}
?>
<form name="set_time" method="POST" class="inline-form">
    с <input type="text" id="datefrom" name="datefrom" value="<?echo $df;?>" size="10">
    по <input type="text" id="dateto" name="dateto" value="<?echo $dt;?>" size="10">
    <input type="submit" name="set" value="Выбрать"/>
</form>
Если делаю так, то когда заходишь на страницу в форму дата не проставляется. Если сделать как у вас
HTML5
1
2
3
4
5
<form name="set_time" method="POST" class="inline-form">
    с <input type="text" id="datefrom" name="datefrom" value="<?=$_SESSION['datefrom']?>" size="10">
    по <input type="text" id="dateto" name="dateto" value="<?=$_SESSION['dateto'];?>" size="10">
    <input type="submit" name="set" value="Выбрать"/>
</form>
то даты подставляются, но при переходе по страницам всё равно теряются. Причём, если обновлять страницу без переотправки POST, то даты остаются ранее проставленные (из сессии), а надо чтобы возвращались к текущей дате.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
06.10.2017, 12:16
Prtoy, вот в этой форме и не надо использовать пост. Пост не для этого предназначен.
0
3 / 3 / 3
Регистрация: 01.06.2016
Сообщений: 307
06.10.2017, 12:24  [ТС]
Jewbacabra, а как тогда? Если гетом передавать все используемые параметры, то ссылка получится громадная...
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
06.10.2017, 12:44
Prtoy, громадная ссылка это не проблема
0
3 / 3 / 3
Регистрация: 01.06.2016
Сообщений: 307
06.10.2017, 13:00  [ТС]
Jewbacabra, но задача как раз избежать громадной ссылки...
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
06.10.2017, 13:25
Prtoy, так?
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
session_start();
 
$df = date('d.m.Y');
$dt = date('d.m.Y');
 
if(isset($_POST['set']))
{
    $df = $_SESSION['datefrom'] = $_POST['datefrom'];
    $dt = $_SESSION['dateto'] = $_POST['dateto'];
}
?>
<p>Выберите диапазон дат</p>
<form name="set_time" method="POST" class="inline-form">
    с <input type="text" id="datefrom" name="datefrom" value="<?=$df?>" size="10">
    по <input type="text" id="dateto" name="dateto" value="<?=$dt?>" size="10">
    <input type="submit" name="set" value="Выбрать"/>
</form>:
0
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
06.10.2017, 13:27
Храните данные формы (POST) в сессии. При постраничной навигации используйте фильтры формы, сохраненные в сессии.
Все данные сессии хранятся в суперглобальном массиве $_SESSION. Советую сначала почитать и подучить работу с сессиями, чем пробовать что-то делать. Благо там учить нечего, за час-два должны справиться
0
15 / 15 / 7
Регистрация: 17.12.2016
Сообщений: 172
06.10.2017, 13:29
Prtoy, если коротко, форма с методом POST одноразовая.
А на сколько она громадная если будет в GET?
0
3 / 3 / 3
Регистрация: 01.06.2016
Сообщений: 307
06.10.2017, 13:56  [ТС]
Jodah, да, так лучше. По страницам теперь даты сохраняются. Но при обновлении страницы без пост-запросов они тоже сохраняются, а хотелось бы их сбрасывать на date('d.m.Y'). Это возможно?

serj0110, Ну пока там 5 параметров (считая пагинацию). Потом возможно ещё будут добавляться. Но уже с 5-ю не очень комфортно.

Добавлено через 12 минут
Jodah, хотя нет, не сработало.

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
session_start();
 
$df = date('d.m.Y');
$dt = date('d.m.Y');
 
if(isset($_POST['set']))
{
    $df = $_SESSION['datefrom'] = $_POST['datefrom'];
    $dt = $_SESSION['dateto'] = $_POST['dateto'];
}
?>
<p>Выберите диапазон дат</p>
<form name="set_time" method="POST" class="inline-form">
    с <input type="text" id="datefrom" name="datefrom" value="<?=$_SESSION['datefrom']?>" size="10">
    по <input type="text" id="dateto" name="dateto" value="<?=$_SESSION['dateto']?>" size="10">
    <input type="submit" name="set" value="Выбрать"/>
</form>:
Работает вот так, но если заходить на страницу без сохранённой сессии, то даты не подставляются в форму...
0
15 / 15 / 7
Регистрация: 17.12.2016
Сообщений: 172
06.10.2017, 13:56
Цитата Сообщение от Prtoy Посмотреть сообщение
Но при обновлении страницы без пост-запросов они тоже сохраняются, а хотелось бы их сбрасывать на date('d.m.Y')
Как раз хотел сказать про это после магазина, что в сессии хранить не вариант, никак не определить когда нужно сбросить данные.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
06.10.2017, 14:35
Цитата Сообщение от Prtoy Посмотреть сообщение
хотя нет, не сработало.
Что именно не сработало?

Цитата Сообщение от Prtoy Посмотреть сообщение
если заходить на страницу без сохранённой сессии, то даты не подставляются в форму
Вы сказали, что брать данные из сессии не нужно, поэтому в моём примере система так и работает - если даты пришли из формы, то их и показываем, иначе показываем текущую дату. А в запрос к БД вы подставляете данные из сессии.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
06.10.2017, 14:36
Prtoy, а зачем избегать громадной ссылки? Выглядит как героическое решение надуманных проблем. Все равно что гвоздь забивать микроскопом вместо молотка, потому что молоток тяжелый.
Поисковые ссылки гугла не маленькие, это наоборот удобно, можно например скинуть ссылку в которой будут сразу все нужные параметры
0
3 / 3 / 3
Регистрация: 01.06.2016
Сообщений: 307
06.10.2017, 14:53  [ТС]
Jodah, не сработало сохранение дат при переходе на другие страницы.
Jewbacabra, ну во-первых, эстетически приятней (лично мне), когда ссылки не громоздкие. Во-вторых, когда появятся дополнительные параметры, например, фамилии и имена на кириллице, не все браузеры ещё умеют преобразовывать в адресной строке "%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B 2" в "Иванов". Согласен, вопрос больше принципиальный чем практически обоснованный, но хотелось бы в идеале всё-таки справиться с пост-запросами.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
06.10.2017, 14:58
Prtoy, мне гораздо приятенее видеть код соответствующий базовым принципам протокола http. Есть четкое обоснование когда использовать пост, когда гет, когда другие методы. Браузеры умеют рсскодировать юникод абсолютно все. А то что ссылки громоздкие всем все равно - браузеру, пользователю. Это именно тобой надуманная проблема.

PS. В одном из первых проектов мне доставшихся кто-то сделал навигацию постом. Какими словами я его не называл когда чинил это

Добавлено через 15 секунд
Prtoy, мне гораздо приятенее видеть код соответствующий базовым принципам протокола http. Есть четкое обоснование когда использовать пост, когда гет, когда другие методы. Браузеры умеют рсскодировать юникод абсолютно все. А то что ссылки громоздкие всем все равно - браузеру, пользователю. Это именно тобой надуманная проблема.

PS. В одном из первых проектов мне доставшихся кто-то сделал навигацию постом. Какими словами я его не называл когда чинил это
0
15 / 15 / 7
Регистрация: 17.12.2016
Сообщений: 172
06.10.2017, 14:59
Цитата Сообщение от Prtoy Посмотреть сообщение
Согласен, вопрос больше принципиальный чем практически обоснованный, но хотелось бы в идеале всё-таки справиться с пост-запросами.
Это будет настоящим извращение, если хочешь чтобы это была пагинация именно постом, делай на каждую кнопку отдельную форму, в которой будут передаваться данные(при этом, кроме кнопки перехода, остальные данные скрытые)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.10.2017, 14:59
Помогаю со студенческими работами здесь

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

Пропадают данные в POST
Вообще-то всё нормально, данные нормально подгружаются через пост и заносятся в бд, но лишь стоит добавить в форму хотя бы 1 файл, как...

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru