2015-09-23 4 views
1

Я использую несколько элементов выбора на странице. URL этой страницы выглядит примерно так: "index.php?s=foo".select onchange add get variable to url

Теперь я хочу, чтобы мои изменения полей выбора будет изменять свой URL и обновите страницу, это только частично работает :( Вот пример:

<form action="'.$_SERVER['REQUEST_URI'].'" method="GET"> 
    <select name="this" onchange="this.form.submit()"> 
     <option value="1">Value 1</option> 
     <option value="2">Value 2</option> 
     <option value="3">Value 3</option> 
    </select> 
</form> 

Так что, если я изменить свой выбор URL-адрес будет поменять на "index.php?this=1", но я хотел бы держать предыдущие параметры _GET, поэтому изменения будут происходить в "index.php?s=foo&this=1".

Любой шанс я хотел бы получить, что?

большое спасибо за вашу помощь. С наилучшими пожеланиями

+0

Добавить это ' ' – ArtisticPhoenix

+0

Вы можете использовать поля ввода с' type = "hidden", которые автоматически добавляются.Вы можете использовать a для каждого цикла в php, чтобы создать их, если вы хотите добавить все существующие параметры get – newBee

+0

Почему вы хотите, чтобы люди видели, что вы отправляете между PHP-страницами? Просто используйте POST? – Naruto

ответ

0

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

if(!empty($_GET)) 
{ 
    foreach($_GET AS $k => $v) 
    { 
     echo '<input type="hidden" name="'.$k.'" value="'.$v.'">'; 
    } 
} 

Форма действие может быть закодировано что-то вроде имени файла или $_SERVER['SCRIPT_NAME']. Не $_SERVER['PHP_SELF'] - как указано в комментарии ниже.

Редактировать: ответ отправлен, прежде чем я закончил. :(

+0

Пожалуйста, не используйте PHP_SELF. Он представляет XSS. см. http://stackoverflow.com/questions/6080022/php-self-and-xss и http://seancoates.com/blogs/xss-woes – Timm

+0

@ Спасибо, также понял, что после того, как я отправил ответ, так что обновил его снова. – user2959229

+0

Спасибо, что работает почти идеально. За исключением того, что первый выбор добавляет параметр get, как я хочу, но если я хочу выбрать что-то другое в этом элементе select, он не заменяет параметр выше, он просто добавляет его к ранее. Но это я должен уметь исправлять, спасибо очень! – ChilliSchotte

0

Использование REQUEST_URI не включают в себя текущие параметры GET, Вам необходимо будет функция в этом сути, чтобы преобразовать все параметры в поле ввода:. https://gist.github.com/eric1234/5802030

<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="get"> 
    <?php array_to_input($_GET); ?> 
    <select name="this" onchange="this.form.submit()"> 
     <option value="1">Value 1</option> 
     <option value="2">Value 2</option> 
     <option value="3">Value 3</option> 
    </select> 
</form> 

ВНИМАНИЕ:. array_to_input может ввести XSS уязвимость . Пожалуйста, бежать содержимое переменной $_GET так что это не может произойти

0

простой ответ вместо этого:.

<form action="'.$_SERVER['REQUEST_URI'].'" method="GET"> 

Выполните действия, как это:

<form action="<?php echo $_SERVER['REQUEST_URI'].'?'.$_SERVER['QUERY_STRING']; ?>" method="GET"> 

который будет включать текущее $_GET значения в вашей форме действия/URL и расширением присутствовать, когда форма была отправлена. В основном это то, как формы в целом разрабатываются для обработки отправки на страницу с параметрами запроса, т.е. по умолчанию он работает.

Просто к сведению, но я думаю, что путь у вас есть теперь вы можете получить это для вашего действия/URL

"http://'.$_SERVER['REQUEST_URI'].'" 

Это только предположение, но это выглядит как форма HTML и РНР просто печатайте и не исполняйте как код (без тэгов php). Вероятно, это просто надстройка в примере кода. Но я бы ожидал этого в том виде, который у вас есть:

echo '<form action="'.$_SERVER['REQUEST_URI'].'" method="GET">'; 

Cheers!