$QUERY_STRING, или как им правильно пользоваться...

mus

Новичок
$QUERY_STRING, или как им правильно пользоваться...

Господа, назрел вопрос.
Сайт устроен следующим образом, справа три рейтинга (пока один, остальные добавляю), параметры которых должны передаваться вне зависимости друг от друга, тоесть:
Есть рейтинг Counter-Strike, Quake3, WarCraft
Cs 1.6
kills | scores - это два параметра рейтинга.
Quake 3
kills | scores - то же самое и так далее...

Так же есть параметр page, который отвечает за страницу, на которой мы находимся, как Вы уже успели догадаться, все замутки происходят в файле index.php.

Теперь вопрос, формирую ссылки kills | scores, но мне же стоит учитывать тот факт, что при нажатии на ссылку мы должны переместиться на эту же страницу с дополнительным измененным параметром статистики Контры, к примеру, но при этом страница, на которой мы находимся, как я уже сказал, должна оставаться той же, а самое главное - ыбранные параметры других рейтингов так же должны сохраниться.

Тоесть, адресная строка может быть такой:
?page=news&cs_rating=kills&quake_rating=scores&warcraft_rating=scores
Так как параметров немалое множество (сервер будет расширяться другими играми, соответственно, параметров будет более, уж не говоря о том, что в скором будущем прибавиться немалое кол-во значений, к этим параметрам то...)

Сложность состоит в формировании ссылки:
<a href="<?=$PHP_SELF?>?cs_rating=kills&page=<?=$_GET['page']?>"
Вот это к примеру так сейчас выглядит с одним лишь КС-ом...
А мне хотелось бы, чтобы вместо $_GET['page'] сюда вставлялась бы адресная строка, именна та, что в данный момент сформирована, НО!
<a href="<?=$PHP_SELF?>?cs_rating=kills&page=<?=$_QUERY_STRING?>" - такой вариант не прокатит, не иначе как при изменении какого-либо параметра, ну скажем того же рейтинга КС к нашей уже сформированной строке сконкатенируется значение строки предыдущей, что даст нам следующее:
cs_rating=scores&page=news&cs_rating=kills&quake_rating=scores&warcraft_rating=scores
Во-первых выглядит глупо, а вто вторых - не сработает ничерта, ведь параметр изменения стоит перед старой строкой и старое значение затмит новое, хотя в любом случае порядок конкатенации можно поменять местами, но все же вернемся к пункту 1, а именно - Выглядит глупо так не делают.

По сему и вопрос: Как бы Вы решили эту пробелу.
Спасибо!
 

Andreika

"PHP for nubies" reader
PHP:
$games = array('cs'=>'kills','wc3'=>'default');
$str = array();
foreach ($games as $k=>$v) {
   
  $str[] = isset($_REQUEST[$k])?$_REQUEST[$k]:$v;
}

echo "<a href=?".implode('&',$str).">Str</a>";
как-то так..
 

mus

Новичок
А, клево, подстановка дефолтных значений, как я понял, осуществляется в массиве?
В принципе алгоритм классный!
Благодарю!
 

Andreika

"PHP for nubies" reader
ой.. немного не так )
$str[] = $k."=". и потом то, что есть.. если дефолтные не нужны, то isset в if вынести
 

mus

Новичок
А $str же может быть простой текстовой переменной?
По логике то вроде так, мы же этот массив более нигде ен перебираем, да и вообще...
 

Andreika

"PHP for nubies" reader
mus
мы его потом собираем в строку implode-ом..
мож сразу в строку добавлять, но тогда или & лишний будет или проверку на пустую строку добавлять надо будет
 

mus

Новичок
Но как мне сформировать ссылку под конкретный параметр?
Тоесть для CS-СОВСКОГО cs_ratin=score, к примеру...
 

Andreika

"PHP for nubies" reader
PHP:
// список игр и значения по умолчанию
$games = array('cs'=>'kills','wc3'=>'default'); 
$str = array(); 
// перечисляем игры
foreach ($games as $k=>$v) { 
   
  // если в параметрах такая игра есть, то не меняем значение.. иначе значение по умолчанию
  $str[$k] = "$k=".isset($_REQUEST[$k])?$_REQUEST[$k]:$v; 
}

// print_r($str); //  что получилось

// $str переехал в параметры.. 
function makeit($str,$p,$v) {
  
    // меняем в "параметре" значение на нужное
    $str[$p]="$p=".$v;
    // возвращаем результат объединения
    return implode('&',$str);
}

echo "<a href='".makeit($str,'hl2','list').">";
 

mus

Новичок
Слов нет...
Одни эмоушенз!
Спасибо!!!

-~{}~ 25.10.05 14:30:

$str[$k]
Только вот это чушь, вроде...
 

mus

Новичок
Беру слова обратно, по сему вопрос:
Как работает алгоритм? Словесно, быстренько...если можно =)
 
Сверху