Получить текст из тега <option>с помощью PHP - PullRequest
11 голосов
/ 21 июля 2011

Я хочу получить текст внутри тегов <option> и его значение.

Пример

<select name="make">
<option value="5"> Text </option>
</select>

Я использовал $_POST['make']; и получаю значение 5, но я хочу получить и значение, и текст .

Как мне это сделать с помощью PHP?

Ответы [ 5 ]

6 голосов
/ 21 июля 2011

Чтобы получить как метку, так и значение, используя только PHP, вам необходимо иметь оба аргумента как часть значения.

Например:

<select name="make">
    <option value="Text:5"> Text </option>
</select>

PHP Code

<?php
$parts = $_POST['make'];
$arr = explode(':', $parts);

print_r($arr);

Вывод:

Array(
  [0] => 'Text',
  [1] => 5
)

Это один из способов сделать это.

4 голосов
/ 21 июля 2011

А как насчет этого?Я думаю, что это лучшее решение, потому что вы разделили поля для каждой информации.Только одно скрытое поле, которое обновляется при каждом изменении и позволяет избежать жесткого сопоставления.

Это внутри HTML:

<select name='make' onchange="setTextField(this)">
<option value = '' selected> None </option>
<option value = '5'> Text 5 </option>
<option value = '7'> Text 7 </option>
<option value = '9'> Text 9 </option>
</select>
<input id="make_text" type = "hidden" name = "make_text" value = "" />
<script type="text/javascript">
    function setTextField(ddl) {
        document.getElementById('make_text').value = ddl.options[ddl.selectedIndex].text;
    }
</script>

Это внутри PHP:

<?php
$value = $_POST["make"];
$text = $_POST["make_text"];
?>
3 голосов
/ 21 июля 2011

установите значение text в значение тега option, будь то с помощью статической разметки HTML или даже если оно генерируется сценарием на стороне сервера.Атрибут value будет получен только через POST

. Однако на стороне сервера другой вариант - сопоставить значение ("5") с ассоциативным массивом, т.е.

<?php
$valueTextMap = array("5" => "Text");

$value = $_POST['make'];  //equals 5
$text = $valueTextMap[$value];  //equals "Text"
?>
2 голосов
/ 21 июля 2011

Вам нужно будет включить этот текст в значение для начала (например, <option value="5_Text"> Text </option>, а затем выполнить синтаксический анализ или ...

Вы можете использовать javascript на странице для отправки текста в качестве другого параметра в действии POST.

0 голосов
/ 19 февраля 2018

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

HTML

<select name="make">
  <option value="1:First Option">First Option Text</option>
  <option value="2:Second Option">Second Option Text</option>
  <option value="3:Third Option Text">Third Option Text</option>
</select>

PHP

$value = split(':', $make)[0];
$text = split(':', $make)[1];

Преимущества этого метода
Да, определенно есть сходство с ответом serialworm, но мы минимизируем код в нашем PHP-блоке, незаметно преобразуя его в массив и выбирая необходимый элемент сразу.

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

...