<option>
タグ内のテキストとその値を取得したいと思います。
例
<select name="make">
<option value="5"> Text </option>
</select>
$_POST['make'];
を使用し、値5
を取得しましたが、値とテキストの両方を取得にします。
PHPを使用してそれを行うにはどうすればよいですか?
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
)
これはそれを行う1つの方法です。
これはどうですか?各データにフィールドを分けているので、これが最善の解決策だと思います。変更のたびに更新され、マッピングのハードコーディングを回避する非表示フィールドは1つだけです。
これは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"];
?>
テキストの値をオプションタグの値に設定します。静的HTMLマークアップを使用する場合でも、サーバーサイドスクリプトによって生成される場合でも同様です。 POSTを介してのみvalue属性を取得します
ただし、サーバー側の別のオプションは、値( "5")を連想配列にマップすることです。
<?php
$valueTextMap = array("5" => "Text");
$value = $_POST['make']; //equals 5
$text = $valueTextMap[$value]; //equals "Text"
?>
最初にそのテキストを値に含める必要があります(例:<option value="5_Text"> Text </option>
次に解析、または...
ページでjavascriptを使用して、POSTアクションの別のパラメーターとしてテキストを送信できます。
私はいつも非常にエレガントなソリューションを使用してきましたが、これはすでに提示したものと同様で、多くの追加コードを必要としません。
[〜#〜] 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ブロックのコードを最小限に抑えています。
私の場合、この正確な速記コードを連絡フォームで使用します。このワンライナー(選択した部門名を取得するため)は、コードをきれいに見せるために重要です。