Показать полную графическую версию : Очередной вопрос по постраничному выводу
vadimiron
27-09-2005, 17:29
С самим постраничным выводом у меня проблем нет.
Проблема только с формированием ссылок на страницы.
Проблема заключается в том, что у меня через адресную строку передаётся несколько переменных, поэтому я не могу писать ссылки на страницы таким образом
href='?page=".$i." '
Мне нужно решение, чтобы не зависеть от знания того, сколько и какие переменные передаются в данный момент через адресную строку.
Единственное, до чего я дошёл, это просто вырезать ' page=".$page." ' из $_SERVER['REQUEST_URI'] и навесить на то, что осталось, значение page:
$number=$i-1;
$uri=$_SERVER['REQUEST_URI'];
$uri=str_replace("&page=".$page,"",$uri);
$text.="<a href='".$uri."&page=".$number."'>".$i."</a> ";
$_SERVER['REQUEST_URI'] я могу спокойно использовать, так как в любом случае хоть одна переменная, но наверняка передаётся через адресную строку
Vlad Drakula
27-09-2005, 22:28
vadimiron
$_GET['page']
а также есть:
$_POST, $_REQUEST, $_COOKIE и т. д.
elfoflorien
27-09-2005, 22:30
vadimiron
все переменные из адресной строки хранятся в массиве $_GET или $HTTP_GET_VARS (в PHP5 по умолчанию только $_GET), поэтому обращаться нужно вот так:
$page= $_GET['page'];
пока писал ответ меня опередили :(
vadimiron
27-09-2005, 23:20
Vlad Drakula,elfoflorien
Сори,блин, не то я объяснил
У меня нет проблем с получением переменной, у меня проблема с тем, что скорей всего адресная строка уже содержит эту переменную (то есть когда не на первой странице), то есть если просто "навесить", то в адресной строке будет уже две переменных page, ещё раз-уже три и тд.
vadimiron
а собственно, почему они у тебя множатся? ведь uri со всеми переменными тоже можно каждый раз формировать по-новому:
типа $PHP_SELF. '?id='$_GET['id']. 'page='. $_GET['page'] /* и так далее */ .
Кажется, на сей раз я чего-то не поняла :)
vadimiron
28-09-2005, 12:48
mar
Самая большая проблема то, что я не знаю какие и сколько там переменных сидят, я не могу сказать есть ли $_GET['id'] или нет.
$_GET['id'] натолкнуло меня ещё на одно решение, которое наверно будет самым правильным. Пройтись по всему массиву $_GET и записывать переменные обратну в строку так как они были, а page поставить свой, то есть что то типа этого:
foreach($_GET $key=>$value)
{
if($key=="page") $url.=$key."=".$page."&"
else $url.=$key."=".$value."&"
}
Самая большая проблема то, что я не знаю какие и сколько там переменных сидят
вообще-то это грозит инъекцией, или просто не знаешь, есть ли какая-то из обслуживаемых тобой? По-любому, то, что ты сам предложил с foreach - это выход.
vadimiron
28-09-2005, 15:39
или просто не знаешь, есть ли какая-то из обслуживаемых тобой
Да, просто хочется, чтобы в любой момент можно было бы добалять (или наоборот, удалять) новые переменные в скрипт, которые передаются через адресную строку, при этом не меняя уже написанного кода.
ну, я все-таки (особенно если дело идет о $_GET) предпочитаю из соображений безопасности разбираться с каждой своей предопределенной $_GET -переменной. Чтоб не скормить скрипту инъекции. Собственно, ведь переход на $_GET и $_POST в PHP и был обусловлен соображеиями безопасности
elfoflorien
28-09-2005, 17:07
vadimiron
Да, просто хочется, чтобы в любой момент можно было бы добалять ... новые переменные в скрипт, которые передаются через адресную строку
$_GET['var_name']
при этом не меняя уже написанного кода
в каком смысле не меняя? что-то я не могу понять, что именно надо?
если хотите формировать новую строку url с переменными, и с возможностью удалять лишние, ненужные переменные, то можно так
function generate_url( $_GET, $odd_vars = false )
{
foreach( $_GET as $var => $value )
{
if( $odd_vars && in_array( $var, $odd_vars )) continue;
$url .= "&$var=$value";
}
return $url;
}
// $odd_vars - массив "лишних" переменных: $odd_vars= array( 'var1', 'var2', 'var3', 'etc' );
"ламерский"(это как посмотреть), но действенный совет:
сессиии. суй туда переменныую $page и бери оттудова через массив $_SESSION
......
elfoflorien
28-09-2005, 23:15
Xcode
зачем такие сложности?
elfoflorien
1."ламерский"
2. собс-но, если переменные не через URL, то через что?... остаются сессии и кукисы...
elfoflorien
29-09-2005, 22:21
Xcode
собс-но, если переменные не через URL, то через что?... остаются сессии и кукисы...
кукисы, понятно, самый "безопасный" (:)) вариант...
А у vadimiron переменные как раз через URL, поэтому я и говорю - зачем мудрить, когда можно с легкостью манипулировать массивом переменных из запроса
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.