javascript _GET помогите решить вопрос, а то долго мучаюсь
:help: :help:
ну кароч постараюсь подробно описать суть вопроса. на сайте есть выбор региона (города страны). Это реализовано через select >> option В Option данные подтягиваются из БД при выборе конкретного города, его ID передается в GET . Передается следующим js кодом: onchange = "document.getElementById('element').submit();" после выбора получается: http://infor.com.ua/index.php?region_select=2 Жирным-подчеркнутым выделил то что передалось при выборе региона. И все прекрасно работает. НО... Если пользователь переходит на другую страницу сайта, где уже есть в GET другие элементы пример(http://infor.com.ua/objav_parent.php..._select=2&id=3) ТО на этой странице, при выборе региона? сбивается id, и остается только переданые данные. получается вот как: http://infor.com.ua/objav_parent.php?region_select=30 а хотелось бы получить просто изменение region_select региона http://infor.com.ua/objav_parent.php...select=30&id=3 Можете помочь кто нибудь, ну или хотя бы в какую сторону двигаться, а то я уже аш запарился мудрить с этим функционалом! :help: :cray: :help: :cray: |
Если get-параметры в url подставляется клиентский сценарий, то делать он должен как раз не так, как выделено жирным, а добавлять их с учетом существующих или нет других параметров. Вот и двигайтесь в то место, где эта операция производится.
|
Добавь форме атрибут method="post".
Цитата:
|
В курсе конечно. Я ошибку допустил, думая о сервере, написал о клиенте. А я так и понял, что так и есть - post с get в action, но теряют на сервере пришедшие параметры, и надо было бы http_build_query().
Но наверно да, не так понял. |
ну post мне тут ваще не подойдет, с гетом как то попроще будет. Я думаю может в идеале в сессию записать данные выбранные по региону!?, если да, подскажите плз, как это сделать. ... причем, опять же, в сессию добавить данные не затирая существующие в ней другие данные. есть какие-то мысли?
|
Я вот зациклился на ID и id, отбросив в сторону то, что первое, это имелось ввиду ID значения, и совсем не то представил.
Можно и в сессию записать, но это ведь тоже означает изменение логики работы в скрипте, так почему не заменить обработку GET на POST, который ничем не сложнее первого. Если же ничего не переделывать, то передавайте этот "теряющийся" id между страницами в скрытом поле формы. |
так не пойдет. пользователь не будет постоянно, на каждой странице использовать эту форму, поэтому по Вашей логике, постом можно отправить в переменную. но как мне зафиксировать выбранное значение на все время пользования(пока из формы опять незахочет поменять). ибо пользователь может ходить по сайту используя разные ссылки, а мне, ваще не вариант, прописывать в каждую ссылку данные из переменной полученных от первого POSTa.
конечно, как мне кажется, идеальным вариантом был бы вариант с get, а еще лучше передать в сессию. подскажите как в сессию передать? |
+ забыл уточнить, при каждом же переходе, данные формы устанавливаются на region_select=0 . ну типа поле по умолчанию "выбрать регион:" . и соответственно в переменной выбраный region_select перезаписывается на 0 ...
|
Это не моя логика, моя логика дала сбой сразу, потому как ваш пост почему-то здесь, а причем тут JS, если надо что-то запомнить?
У вас же проблема была в том, что теряется, не подходит POST, значит скрытым полем в GET. А запомнить на сервере, это значит проверить: if($_SESSION['keyname']) { //что-то делаем, если есть в сессии ключ //или есть и не равен 0, хотя смысла запомнить 0 нет } JS для этого совсем не нужен. |
JS использую для того чтобы при выборе региона, срабатывал submit без физического нажатия на кнопку. если это можно как то решить посредством PHP, напишите пжлста как это сделать... и действительно вопрос решен будет. по скольку яваскриптом отправляется только select_region(id-его)
|
Ну как решить... Я же не знаю что у вас там, но если надо запомнить выбор в сессии, то в скрипте принимающем этот выбор сохраните его значение в сессии. Но все остальные скрипты, которые используют это значение, должны при этом оперировать именно именно сессионным значением, а не GET параметром, иначе вся идея никуда не годится.
|
Ребят, в общем всем спасибо... натолкнули меня на правильные мысли, запоминалку сделал так:,
if (isset ($_POST['region_select'])) {$_SESSION['region'] = $_POST['region_select'];} if (isset ($_SESSION['region'])) {$region_sel_option=$_SESSION['region'];} Вывод в списке запоминается JQ (кароч вот весь код) <div id="region_select"> <form id='element' method="post"> <select title="Всё работает, но эта функция в разработке!" name="region_select" onchange="document.getElementById('element').submi t();"> <!-- disabled="disabled" --> <option value="0">Вся Украина:</option> <? $region_select = get_region_select(); foreach ($region_select as $item): $region_select = get_region_select();?> <option name="nregion" value="<?=$item['id'];?>" id="region"><?=$item['region'];?></option> <? endforeach;?> </select> <script>$("#element option[value='<?=$region_sel_option?>']").attr("selected", true);</script> <!-- JQ скрипт фиксирует выбранный элемент в списке регионов --> </form> </div> ... ну если чо, маленькая рекламка. это я делаю доску объявлений... если надо что то продать, продавайте только через меня))) http://infor.com.ua |
Уже все таки POST? Интересно кто вас на такое натолкнул? :)
Isset, конечно, он и в Африке isset, но если понимать, что делаем и при выключенном выводе предупреждений, можно и проще: $_SESSION['region'] = ($n = (int)$_POST['region_select']) ? $n : 0; //именно приведенное к integer, а не просто $_POST['region_select'] А вот на это: <script>$("#element option[value='<?=$region_sel_option?>']").attr("selected", true);</script> <!-- JQ скрипт фиксирует выбранный элемент в списке регионов --> вряд ли бы кто-то вас здесь сподвиг, ибо это пустое занятие. Зачем же вы тогда запоминали выбор, если формируя на сервере список не определяете сразу в нем выбранную опцию? <option name="nregion" value="<?=$item['id']?>" <?=$_SESSION['region']==$item['id'] ? 'selected' : null?>><?=$item['region']?></option> а id="region" опциям совсем не нужен, тем более, что id должно быть уникальным. Закрывать одну строку кода точкой с запятой не обязательно. |
Часовой пояс GMT +3, время: 00:39. |