Получить текст из <option> Tag с помощью PHP
Я хочу получить текст внутри тегов <option>
, а также его значение.
Пример
<select name="make">
<option value="5"> Text </option>
</select>
Я использовал $_POST['make'];
, и я получил значение 5
, но я хочу получить как значение, так и текст.
Как это сделать с помощью PHP?
Ответы
Ответ 1
Чтобы получить как метку, так и значение, используя только PHP, вам нужно иметь оба аргумента как часть значения.
Например:
<select name="make">
<option value="Text:5"> Text </option>
</select>
Код PHP
<?php
$parts = $_POST['make'];
$arr = explode(':', $parts);
print_r($arr);
Выход:
Array(
[0] => 'Text',
[1] => 5
)
Это один из способов сделать это.
Ответ 2
Как насчет этого? Я считаю это лучшим решением, потому что вы разделили поля на каждую информацию. Только одно скрытое поле, которое обновляется при каждом изменении и избегает сопоставлений жесткого кодирования.
Это внутри 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
установить значение текста в значение тега параметра, будь то статическая разметка HTML или даже если она создается на стороне сервера script. Вы получите атрибут value только через POST
Другой вариант, однако, на стороне сервера - сопоставить значение ( "5" ) с ассоциативным массивом, то есть
<?php
$valueTextMap = array("5" => "Text");
$value = $_POST['make']; //equals 5
$text = $valueTextMap[$value]; //equals "Text"
?>
Ответ 4
Вам нужно будет включить этот текст в значение для начала (например: <option value="5_Text"> Text </option>
, а затем проанализировать или...
Вы можете использовать javascript на странице, чтобы отправить текст в качестве другого parm в действии POST.
Ответ 5
Я вижу, что все эти ответы используют php split()
которая была удалена в php 7.0.0.
Вместо этого вы можете использовать explode()
. Это похоже на раскол. Посмотреть здесь.
<select name="make">
<option value="Text:5"> Text </option>
</select>
PHP
$parts = $_POST['make'];
$arr = explode(':', $parts);
print_r($arr);
Ответ 6
Я всегда использовал очень элегантное решение, подобное уже представленным, что не требует большого количества дополнительного кода.
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, незаметно переходя к массиву и сразу выбираем элемент.
В моем случае я использую этот точный короткий код в форме контакта, где этот однострочный (чтобы получить выбранное название отдела) имеет решающее значение для сохранения кода, выглядящего чистым.