Сохранение значений в запросе GET - PullRequest
1 голос
/ 11 февраля 2010
<form method="get" action="">
   <select name="name" onchange='this.form.submit()'>
      <option value="a">a</option>
      <option value="b">b</option>
   </select>
   <select name="location" onchange='this.form.submit()'>
      <option value="x">x</option>
      <option value="y">y</option>
   </select>
</form>

Я выбираю опцию «a», и она работает нормально, но затем, если я выбираю «x», значение «a» исчезает из URL, как мне сохранить все значения?

Редактировать: Также при отправке формы, как убедиться, что выбранные значения остаются выбранными и в выбранных меню?

Спасибо

Ответы [ 3 ]

5 голосов
/ 11 февраля 2010

Отправка формы загружает целевую страницу в окно (в данном случае целевой страницей является та же страница, на которой вы находитесь). Я настоятельно рекомендую , а не отправлять форму, когда пользователь выбирает элемент из списка; пользователь не ожидает, что это произойдет.

Но если вы сделали это, вам придется отслеживать поля, которые пользователь выбрал «до сих пор» на стороне сервера, а затем установить соответствующий атрибут selected в теге option для значения, которое они был выбран ранее, например при создании формы:

<option value='a' selected>a</option>

Но опять же, лучше всего позволить им сделать свой выбор, а затем отправить форму с какой-то кнопкой. Если вы хотите, чтобы содержимое списков изменялось на основе выбранных ими элементов, вы можете использовать клиентский JavaScript (возможно, в сочетании с Ajax-запросом к серверу), чтобы достичь этого.

0 голосов
/ 11 февраля 2010

Измените тег form на:

<form method="get" action="<?= _SERVER["REQUEST_URI"] ?>">
0 голосов
/ 11 февраля 2010

Вот краткое обновление вашей функции selfURL (), которая должна помочь вам решить вашу проблему.

function selfURL() 
{ 
    $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : ""; 
    $protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s; 
    $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
    $uri  = $_SERVER['REQUEST_URI'];
    $querystring = empty($_SERVER['QUERY_STRING']) ? '' : '?'.$_SERVER['QUERY_STRING'];
    return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI'].$url.$querystring;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...