0

次のように、フォームの一部として使用している数値フィールドとドロップダウン リストがあります。

<label for="height">Height/Thickness</label>:
<input <?php if (empty($messages) == false) {echo 'value="'.htmlentities($_POST['height'], ENT_QUOTES).'"';} ?> type="number" name="height" id="height" />
                <select class="dimensions" name="heightunit">
                    <option value="">Select...</option>
                    <option value="mm">mm</option>
                    <option value="cm">cm</option>
                    <option value="m">m</option>
                    <option value="in">in</option>
                </select>

この$messages変数は、フォームによって生成されたエラー メッセージを格納する配列です。<?php&タグ間のビット?>は、エラーが発生した場合に、ユーザーが送信する前に入力した値をエコーバックすることを保証するためにあります。これにより、データを再入力する時間 (およびフラストレーション) を節約できます。

ドロップダウンリストでも同じことをしたい。現時点では、各オプション タグ内に次の行を追加しています (この回答と同様)。

<?php if ((empty($messages) == false) && ($_POST['lengthunit'] == 'mm') {echo 'selected="selected"';} ?>

しかし、それは本当に乱雑です:

....
<select class="dimensions" name="lengthunit">
    <option value="" <?php if ((empty($messages) == false) && ($_POST['lengthunit'] == '') {echo 'selected="selected"';} ?>>Select...</option>
    <option value="mm" <?php if ((empty($messages) == false) && ($_POST['lengthunit'] == 'mm') {echo 'selected="selected"';} ?>>mm</option>
    <option value="cm" <?php if ((empty($messages) == false) && ($_POST['lengthunit'] == 'cm') {echo 'selected="selected"';} ?>>cm</option>
    <option value="m" <?php if ((empty($messages) == false) && ($_POST['lengthunit'] == 'm') {echo 'selected="selected"';} ?>>m</option>
    <option value="in" <?php if ((empty($messages) == false) && ($_POST['lengthunit'] == 'in') {echo 'selected="selected"';} ?>>in</option>
</select>

私の質問は - 各オプションタグ内に php タグを追加せずに、これを行うためのよりエレガントな方法はありますか?

(私は次のように考えています: の if (OPTION_VALUE === $_POST['heightunit']) {echo 'selected="selected"';}代わりになるものはありOPTION_VALUEますか?)

編集:これをやりたい理由は、これを200を超える国のリストに適用したいからで、「良いコード」を書きたいだけです。

**編集: 今振り返ってみると、とても簡単に見えます...とにかく、助けてくれてありがとう、これが私が最終的に行ったものです:

function lengthlist($selectname) {
    $distanceunits = array('','mm','cm','m','in');
    foreach ($distanceunits as $value) {
    if ($value == '') {$value = '...';}
        if ($value == $_POST["$selectname"]) {
            echo "<option value=\"$value\" selected=\"selected\">$value</option>";
        } else {
            echo "<option value=\"$value\">$value</option>";
        }
    }
}
4

2 に答える 2

1

または、次元の値を配列にロードして、while ループに書き込むこともできます。

 <select class="dimensions" name="lengthunit">
<option>Select...</option>
<?php 
 $i=0;
 $array=array("mm", "cm", "m", "in");
while ($i<4){ ?>
<option value="<?php echo $array[$i];?>"<?php if ((empty($messages) == false) && 
($_POST['lengthunit'] == $array[$i])) {echo 'selected="selected"';} ?>><?php echo 
$array[$i];?></option>
<?php $i++; } ?>

</select>

他のケースでは、ユーザーが選択できるオプションをさらに追加したい場合があるため、それらを配列に追加するだけです。while の代わりに foreach ループを使用することもできます

于 2013-06-26T04:53:05.133 に答える