Как подменить значения некоторых переменных в GET запросе

VANHALEN

Новичок
Прошу прощения, может вопрос конечно для двоишников, но вот столкнулся. Раньше всегда сталкивался с тем, что значения GET уже были в запросе и если нужно было что-то добавить к URL, то я просто считывал текущие значения GET и отправлял их также, просто добавив к ним ещё одну переменную и её значение. А теперь понадобилось повесить сортировку на заголовки таблицы, чтобы сортировать по нужной колонке. Так вот до момента сортировки переменных нет, а при нажатии на кнопку (или столбец), аж целых 2 как минимум приходят. Это ID столбца (характеристики), по которому сортируется и направление.

Суть вопроса:Предположим что я не знаю сколько переменных появится, поэтому
PHP:
$_SERVER['REQUEST_URI']

Соответственно просто добавть к нему ?столбец=такой-то&направление=такое-то я не могу, Потому как, при нажатии второй раз, эти переменные вместе со значениями добавятся уже к существующим. Даже иногда работает, но это же пипец как неправильно. URL растёт как на дрожжах с каждым кликом, а если ещё на другой столбец нажать, тогда вообще труба. Всё поперепутано.

Какое нужно решение:Минимум кода, чтобы именно ЗАМЕНИТЬ значения только тех переменных, которые изменились, не трогая остальной URL и не добавляя новых, если их нет по задумке.

Моя криворукость подсказала мне страшный выход:
1. Проверяем есть ли переменные уже в гете, тогда либо добавляем либо нет. (кстати я же не уверен какие они вообще могут быть. Писал не я.)
2. Проверяем не изменились ли они
3. Если изменились вставляем новое значение, если нет - передаём старое.

Страшнее не придумаешь. Формирование гет запроса в 25 строк ...
 

VANHALEN

Новичок
Hello, ну так таки да. Сначала придётся всё-равно разобрать, потом всё равно сравнить.. к твоим ссылкам можно ещё добавить и parse_str и ещё наверное что-то. Значит придётся из-за такой простой надобности, как сортировка по клику на заголовке таблицы, такой огород городить, и уж тогда целую функцию писать, потому, как она 6 раз в документе используется. Эх блин..

Или после разбора строки предполагалось какое-то другое решение?
 

WMix

герр M:)ller
Партнер клуба
ну да, бывает типа реквест, а еще бывает типа вью, а в середине обычно считают
а вообще если правильно понимаю можно юзать готовое типо http://phpgrid.com/
 

Фанат

oncle terrible
Команда форума
первое - лишнее.
Квери стринг уже разобран до нас.

собственно, я не понимаю страданий автора.
Какая проблема присвоить нужные значения элементам $_GET (ок-ок, дублю этого масива) и сгенерить квери стринг заново?
 

VANHALEN

Новичок
Какая проблема присвоить нужные значения элементам $_GET (ок-ок, дублю этого масива) и сгенерить квери стринг заново?
Ну проблема как всегда вмозгах. Редко сейчас пишу что-то. В основном работа с переделыванием. Только вроде начал постигать что ты имел в виду, а потом чё-то забил и решил пойти старым простым способом, поскольку не уверен вообще, что буду пользоваться дальше этим скриптом. Решение банальное и короткое. Посылаем скрипт в самое начало (начало находим просто отрезав от текущего урла все переменные) и руками добиваем переменные. Поскольку скрипту уже доступна одна переменная (ID поля по которому сортируется), но сотаётся самая малость
PHP:
<?PHP $string = explode("?", $_SERVER['REQUEST_URI']); ?>
<a href="<?php echo $string[0]."?order=".$order."&orderdir=ASC";?>"><img src="<?php echo $this->baseurl ?>components/com_adsmanager/images/sort_asc.png" alt="+" /></a>
 <a href="<?php echo $string[0]."?order=".$order."&orderdir=DESC";?>"><img src="<?php echo $this->baseurl ?>components/com_adsmanager/images/sort_desc.png" alt="+" /></a>
Пока работает и ладно. По всем полям отлично сортирует. Загвоздка то в чём была? Цитирую сам себя
Предположим что я не знаю сколько переменных появится
. Ну если в шаблоне все кнопки есть, почему не знаю то? Я просто на будущее спрашивал, чтобы правильнее писать. Но сейчас правильнее не тратить время на то, что врядли заплатят.
 

WMix

герр M:)ller
Партнер клуба
PHP:
$defaults = array(
    'order' => 'id.ASC',
    'offset' => 1
);
echo http_build_query(array_merge($defaults, array_intersect_key($_REQUEST, $defaults)));
 

VANHALEN

Новичок
а вообще если правильно понимаю можно юзать готовое типо http://phpgrid.com/
Неа, нельзя.. Не тот случай. Да ещё и за деньги. Не рентабельно. Да и вообще там история о другом. Это доска обьявлений.
PHP:
$defaults = array(
    'order' => 'id.ASC',
    'offset' => 1
);
echo http_build_query(array_merge($defaults, array_intersect_key($_REQUEST, $defaults)));
Спасибо! Но не сейчас. Мой вариант к моему случаю больше подходит, в том числе и для дальнейшей работы. Раз заработало, то пусть работает дальше, ядёргать уже не буду пока сильно не понадобится.
 

hell0w0rd

Продвинутый новичок
ну и гавнокодер же ты, весело будет кому-то за тобой проект дорабатывать.
 

Redjik

Джедай-мастер
WMix дал единственный нормальный вариант, сам делал так же ага
 

WMix

герр M:)ller
Партнер клуба
Неа, нельзя.. Не тот случай. Да ещё и за деньги. Не рентабельно.
это не важно, я говорил просто о гриде.
Спасибо! Но не сейчас. Мой вариант к моему случаю больше подходит, в том числе и для дальнейшей работы.
спасибо парням, что оценили простоту твоего решения, и тебе урок, и себя в юнности вспомнили =)

на самом деле, ты сам себе делаешь сложнее, order by удобнее передавать одним полем, limit (offset) ограничивают до int, а завтра нужно будет добавить поисковое слово, и в каждом сцуко <a href="... придется добавлять &q=<?=$scuko_query?> в то время как можно бы было добавить
PHP:
$defaults = array(
  'order' => 'id.ASC',
  'offset' => 1,
+  'q' => ""
);
 

VANHALEN

Новичок
ну и гавнокодер же ты, весело будет кому-то за тобой проект дорабатывать.
«Ну и мразь же ты! Отвратительно!»
Ну обитатели форума никогда не отличались особой тактичнстью. За несколько лет жизни в России, я в принципе уже не удивляюсь. Это относится не только к форуму. Хорошо только что критика здесь содержательная и помогают быстро.
на самом деле, ты сам себе делаешь сложнее, order by удобнее передавать одним полем, limit (offset) ограничивают до int
Если бы я писал там же, где создаётся запрос к БД, я бы обязательно задумался, но я правлю шаблон вывода. Кроме того у меня и свой мозг есть и он не всегда согласен с динозварами небыдокодинга. Кроме того, я имею право на свои 15 секунд позора. В остальном всё ок.. Не зря задал вопрос.
 

hell0w0rd

Продвинутый новичок
При чем тут Россия?) Ты пришел на форум за решением проблемы, тебе объяснили как сделать правильно, а ты сделал абы как, лишь бы работало. Таких людей в любой стране называют гавнокодером;)
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
мы посовещались, и поняли что у немцев нет такого понятия, есть перенятое kodeaffe (code monkey) но это все не то. можно попробывать прилагательным scheußlich но слишком мягко звучит, альзо шайзе ист шайзе (короче говно это говно)
 
Сверху