к нумерации страниц в целом:
Обычно при разбиении на страницы две вещи выполняются по-разному. Во-первых, вместо того, чтобы указывать серверу «идти дальше» или «назад», серверу предлагается перейти к определенному индексу. Это серверы двух целей. Во-первых, это более простая логика и проще для тестирования - is it going to the right index? Then it works.
. Во-вторых, он позволяет пользователю добавить свое текущее место в нумерацию страниц.
Далее, в большинстве случаев, если нет существенной причины , а не , чтобы (например, запрос занимал полминуты при каждом запуске), страница обычно отображается на основе использования LIMIT. (или эквивалент) в БД. Это может привести к несколько более сложным запросам, но в целом это проще.
Ваш запрос может выглядеть следующим образом:
SELECT * FROM $tbl_name WHERE user_id IN (
SELECT USER_ID FROM SOME_OTHER_TABLE LIMIT $index, 1
);
Ваш вопрос конкретно:
next
и prev
не хранятся в сериализованном массиве, и именно так массивы хранятся в $ _SESSION между обновлениями.
// serialization loses index!
$a = array(1,2,3);
echo next($a); // 2
echo current($a); // 2
// !! resets the index !!
echo current(unserialize(serialize($a))); // 1
Вместо next
и prev
вы можете рассмотреть:
$index = $_SESSION['paginatino_index'];
if (isset($_GET['prev']))
{
if ($_GET['prev'] == "1")
{
$index = ( $index > 1 )? $index - 1: 0;
}
}
// this will never exist simultaneously with $_GET['prev'] unless the user
// does something very bad.
elseif (isset($_GET['next']))
{
if ($_GET['next'] == "1")
{
$count = count( $_SESSION['user_ids'] ) - 1;
$index = ( $index < $count - 1 )? $index + 1: $count;
}
}
// caution! will not work with associative arrays.
$id_view = $_SESSION['user_ids'][ $index ];
Долгое и скучное время истории
Был один раз, когда я хотел сохранить каждую страницу в закладках, но это привело к чрезвычайно сложному URL, и я хотел избежать этого. Поэтому я сериализовал объект данных, сохранил его в базе данных и сохранил параллельную версию в сеансе индивидуума. Если сеанс существовал, разбиение на страницы работало как ниже. Если сеанс не существует, объект данных десериализуется и сохраняется в сеансе. Результат? Мне удалось сохранить 15 чрезвычайно длинных параметров, хранящихся только с search_id=1
, что позволило получить параметры search_id=1&page=2
. Я думал, что это умно, но я никогда не хотел за гордость ...