пагинация и переменные в url

M
На сайте с 01.10.2014
Offline
61
646

Всем привет. Есть страница, где в зависимости от настроек фильтра выводятся картинки из бд, если картинок больше 40, то создается следующая страница картинок, но вот только, если я нажимаю на нее, то фильтр сбрасывается и выводятся все картинки, которые есть в бд. Вот так выглядит url в адресной строке браузера: cards?nabor%5B%5D=2&cards_name... , а вот так выглядит ссылка на следующую страницу картинок: cards?nabor=&cards_name=...?p=2 . То есть, видно, что в ссылке отсутствуют результат фильтра. Вот код:

function get2set ($key='', $val='') { // функция перевода переменных $_GET в массив, с учетом поправки

$set = array();
$set = $_GET;
if ( !empty($key) && is_array($set) ) {
if ( is_array($key) ) {
if ( count($key)>0 ) {
foreach ( $key as $k=>$v ) if ( empty($v) ) unset($set[$k]); else $set[$k] = $v;
}
} else {
if ( empty($val) ) unset($set[$key]); else $set[$key] = $val;
}
}
return $set;
}

function get2str ($key='', $val='') { // функция перевода переменных $_GET в строку, с учетом поправки
$set = get2set($key, $val);
if ( count($set)>0 ) {
foreach ($set as $k=>$v) $set[$k] = $k."=".urlencode($v);
return "?".implode("&",$set);
}
}

function pages ($total, $p, $pp=40) { // функция вывода страниц
$pages = array ();
$tpages = ceil ($total/$pp); // колличество страниц
$bpage = $p - 40; if ($bpage<1) $bpage = 1;
$epage = $p + 40; if ($epage>$tpages) $epage = $tpages;

if ( $p>1 ) $pages[] = '<a href="' . 'cards' . get2str("c", 1) . '">в начало</a>';
for ( $i=$bpage; $i<=$epage; $i++ ) $pages[] = ( $i==$p ) ? '<b>'.$i.'</b>' : '<a href="' . 'cards' . get2str("c", $i) . '">'.$i.'</a>';
if ( $p<$tpages ) $pages[] = '<a href="' . 'cards' . get2str("c", $tpages) . '">в конец</a>';

if ( count($pages)>0 ) echo '<p>'.implode (' | ',$pages).'</p>';
}
$p = (int) $_GET['c']; if ($p<1) $p=1; // текущая страница
$pp = 40; // колличество результатов на одной странице
$start = ($p-1)*$pp; // начальная позиция выборки строк результата запроса

$sql = "SELECT COUNT(*) FROM cards WHERE class_id $query_cost $query_attack $query_health $query_nabor $query_class $query_quality $query_race";
$r = mysql_query($sql,$link);
$total = mysql_result($r,0,0); // общее колличество результатов без разбиения на строки

$sql = "SELECT * FROM cards WHERE class_id $query_cost $query_attack $query_health $query_nabor $query_class $query_quality $query_race LIMIT ".$start.", ".$pp;
$r = mysql_query($sql,$link);
Подскажите, как сделать, чтобы в ссылке на следующую страницу, был тот же адрес, что и в адресной строке браузера, то есть с результатом фильтра. спасибо
Лучшая вап клик пп для выкупа подписок (https://mcwap.ru/?r=1153)
PN
На сайте с 22.08.2012
Offline
103
#1

может потому что %5B%5D - это скобки?

Мой совет помог? Не скупись! Bitcoin 1Lseddet1o1B6odgXQHbGaWGwRkt1Db8Ef Ethereum 0x450f1a17461e25194B7F9226cDEe70173F39e1e1
M
На сайте с 01.10.2014
Offline
61
#2

а что нужно поменять в коде, чтобы отображался весь урл? Сейчас он просто убирает %5B%5D эту часть

PN
На сайте с 22.08.2012
Offline
103
#3
mortido:
а что нужно поменять в коде, чтобы отображался весь урл? Сейчас он просто убирает %5B%5D эту часть

а там всегда будут скобки?)

M
На сайте с 01.10.2014
Offline
61
#4

ну это как бы массив. без них тогда фильтр криво работает

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий