получить значение параметра из формы выбора вместо строки запроса

У меня есть структура URL со строкой запроса и параметром под названием position,

пример:

http://computerhelpwanted.com/jobs/?occupation=administrator&position=network+administrator

У меня также есть выпадающий список выбора формы с именем выбора формы position,

пример:

<form action="/jobs/" method="GET" id="menuform">

<select name="occupation" onChange="populate(this.id,\'position\')">
<option selected="" disabled="">Select Occupation</option>
<option value="administrator">Administrator</option>
</select>

<select name="position" onChange="this.form.submit()">
<option selected="" disabled="">Select Position</option>
<option value="network administrator">Network Administrator</option>
</select>

</form>

Когда пользователь делает выбор, он отправляет значения параметра в атрибут действия с параметром select name = «position» в качестве параметра для использования в строке запроса.

У меня вопрос, как мне получить доступ к значениям выбора формы отдельно от значений строки запроса?

Я использую метод _GET для вызова значения из параметра строки запроса.

пример:

$position = isset($_GET['position']) ? ($_GET['position']) : '';

Очевидно, это получает значение из структуры URL, а не элемента формы. Или, может быть, это так, не уверен. Но, проверяя его, я, кажется, пришел к выводу, что он получает его по URL, а не по форме.

Как я могу получить доступ к значению выбора формы при сравнении в моем PHP?

Обновить

У меня проблема с каноническим URL-адресом, указанным в заголовке.

<link rel="canonical" href="http://computerhelpwanted.com/jobs/?occupation=administrator&position=network-administrator" />

эта ссылка является индексированной ссылкой в ​​Google. Я знаю, что могу просто перенаправить htaccess на новую ссылку, но я просто пытаюсь выяснить, как отобразить канонический URL для этой страницы.

так должно быть

<link rel="canonical" href="http://computerhelpwanted.com/jobs/?occupation=administrator&position=network+administrator" />

единственная разница заключается в - и + в строке запроса.

Не все строки моего запроса имеют +. У некоторых есть -. Но я показываю контент по обоим URL, независимо от того, есть ли у него — или +. В любом случае, оба URL получают одинаковое содержимое страницы.

Но поскольку каноническое создается динамически из URI, а не из значения элемента формы, на обеих страницах контента есть 2 разных канонических символа.

Использование _Get (‘value’) извлекает значение из строки запроса вместо элемента формы. Я знаю это, потому что значение элемента формы имеет пробел между network administrator который получает urlencoded, когда форма представляет как network+administrator, Так что, если я могу сравнить со значением элемента формы, я могу установить правильный канонический.

0

Решение

HTTP — это протокол без сохранения состояния, вы генерируете HTML-контент после вызова требуемой страницы, и затем он там. При взаимодействии с form элемент, вы можете поместить значения выбора из предопределенных (построенных с DOM) опций, и вы можете передать это в другой файл для обработки. Когда вы передаете значения в этот файл процессора, вы можете сделать это с помощью различных методологий (для простоты давайте просто взглянем на GET и POST).

GET: преобразует параметры формы в URL-запрос, который вы также разместили в своем вопросе. Когда ваши данные поступают в виде массива GET в файл вашего процессора, сам файл не знает, из какой формы он их получил, он видит только запрос.

POST: закодирует ваши параметры в транспортный уровень, если он явно не виден, однако он все еще там.

Используя GET, вы можете вручную сформировать запрос с намеренно неверными или вредоносными параметрами и вызвать файл вашего процессора с ними. POST также может быть программно настроен как вредоносный, но обеспечивает удобный уровень запутывания как таковой, и, учитывая ваш вопрос, может обеспечить искомый эффект («не принимая его непосредственно из URL»).

редактировать:

Код для упрощения обработки параметров формы в соответствии с видимым шаблоном, видимым в вопросе и комментарии OP:

$validKeys = array(
'position',
'occupation'
);

foreach ($validKeys AS $key){
${$key} = isset($_GET[$key]) ? $_GET[$key] : '';
}

/* other processing code */

С учетом вышесказанного, если бы у вас было, скажем, 15 входных параметров, вам не пришлось бы проходить их все по одному, так как ${$key} позволяет создавать переменные с динамическим именем, и вы просто обновляете $validKeys контейнер (который также может быть заполнен значениями, хранящимися в базе данных и не контролируемыми вручную). Из вашего обновленного комментария я придумал, что вы можете искать что-то подобное.

1

Другие решения

Это потому, что вы используете GET, которым можно легко управлять через URL.

Я предлагаю изменить метод на POST. Его можно редактировать, используя отладчики.

0

По вопросам рекламы [email protected]