web-dev-qa-db-ja.com

PHP)を使用して<option>タグからテキストを取得する

<option>タグ内のテキストとその値を取得したいと思います。

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

$_POST['make'];を使用し、値5を取得しましたが、値とテキストの両方を取得にします。

PHPを使用してそれを行うにはどうすればよいですか?

13
Abdul wahab

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つの方法です。

9
serialworm

これはどうですか?各データにフィールドを分けているので、これが最善の解決策だと思います。変更のたびに更新され、マッピングのハードコーディングを回避する非表示フィールドは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"];
?>
4
armandomiani

テキストの値をオプションタグの値に設定します。静的HTMLマークアップを使用する場合でも、サーバーサイドスクリプトによって生成される場合でも同様です。 POSTを介してのみvalue属性を取得します

ただし、サーバー側の別のオプションは、値( "5")を連想配列にマップすることです。

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

$value = $_POST['make'];  //equals 5
$text = $valueTextMap[$value];  //equals "Text"
?>
3
thescientist

最初にそのテキストを値に含める必要があります(例:<option value="5_Text"> Text </option>次に解析、または...

ページでjavascriptを使用して、POSTアクションの別のパラメーターとしてテキストを送信できます。

2
Jonathan M

私はいつも非常にエレガントなソリューションを使用してきましたが、これはすでに提示したものと同様で、多くの追加コードを必要としません。

[〜#〜] 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ブロックのコードを最小限に抑えています。

私の場合、この正確な速記コードを連絡フォームで使用します。このワンライナー(選択した部門名を取得するため)は、コードをきれいに見せるために重要です。

0
ProGrammer