3

データベース内の関連情報を表示し、顧客が自分の情報を編集できる顧客アカウント ページを作成しています。以下のコードは、データベースから顧客のアカウント情報を取得して表示し、その情報に一致する値を事前に選択しますが、数百の選択および/または複数選択要素があるため、データベースが値(つまり$rows['gift_privacy'])は現在のオプションと一致します。

<?php   
try {  
$stmt = $conn->prepare("SELECT * FROM customer_info WHERE user_id = :user_id");  
$stmt->bindValue(':user_id', $user_id); 
$stmt->execute();
}catch(PDOException $e) {echo $e->getMessage();}
$row = $stmt->fetch();
?>
<form action="account_information-exec.php" method="post">
<select name="gift_privacy">
    <option value="Standard" <?php if($row['gift_privacy']=='Standard') echo "selected='selected'"; ?>>Standard</option>
    <option value="Gift_ID_Req" <?php if($row['gift_privacy']=='Gift_ID_Req') echo "selected='selected'"; ?>>Require program ID</option>
    <option value="Not_Enrolled" <?php if($row['gift_privacy']=='Not_Enrolled') echo "selected='selected'"; ?>>Do not enroll</option>
</select>
<input type="submit" value="submit">
</form>

編集 -複数選択要素のコードはわずかに異なります。要素名の後には角かっこ(つまりname="notifications[]")が続き、値は内破された配列としてデータベースに挿入されますimplode(',', $_POST['notifications'])。これらのコンマは、フェッチされた値から取り除かれ、オプションの値と適切に比較されます$row1 = str_replace(',', '', $row);

既存機能

この関数はselected="selected"正しいオプションに適用されますが、非常に多くの要素で使用するのは面倒で、すべての選択要素や複数選択要素に簡単に適用できるようにコードを変更する方法がわかりません。また、ページは現在、ハードコーディングされたオプションを持つ標準の選択要素を使用しているため、要素ごとに配列を作成する必要のないソリューションを望んでいます。

<select name="gift_privacy">
    <?php
    $gifts = array("Standard" => "Standard", "Gift_ID_Req" => "Require Program ID", "Not_Enrolled" => "Do not Enroll");
    $gift = $row['gift_privacy'];
    foreach($gifts as $key => $value) {
    if($key == $gift) {
        echo '<option selected="selected" value="'. $key .'">'. $value .'</option>';
    } else {
        echo '<option value="'. $key .'">'. $value .'</option>';
    }
    }
    ?>
</select> 
4

4 に答える 4

2

私は一度同じ問題に直面し、オプション リストを処理する関数 (またはクラスの静的メソッド) を作成して解決しました。

オプションを印刷するには、とにかくそれらを循環する必要があるため、循環中に、現在選択されている必要があるかどうかを各オプションで確認することは何も悪いことではありません.

次のような関数を作成するだけです。

function printSelectOptions($dataArray, $currentSelection) {
    foreach ($dataArray as $key => $value) {
        echo '<option ' . (($key == $currentSelection) ? 'selected="selected"' : '') . ' value="' . $key . '">' . $value . '</option>';
    }
}

キー$dataArray/値オプション配列$currentSelectionとして、および選択したオプションのキーとして指定します。

したがって、コードでは、次のようにこの関数を呼び出すだけです。

<select id='mySelect' name='mySelect'>
    <?php echo printSelectOptions($gifts, $gift); ?>
</select>

これでうまくいくはずです!

編集:複数選択で動作するようにサンプルを追加しています...

<?php
$options = array(   1   =>  "Test 1",
                    2   =>  "Test 2",
                    3   =>  "Test 3");

$selected = array(1, 3);

function printSelectOptions($dataArray, $selectionArray) {
    foreach ($dataArray as $key => $value) {
        echo '<option ' . (in_array($key, $selectionArray) ? 'selected="selected"' : '') . ' value="' . $key . '">' . $value . '</option>';
    }
}
?>

<select multiple>
    <?php echo printSelectOptions($options, $selected); ?>
</select>

秘訣は、選択した値を単一のキーではなく、キーの配列として渡すことです。サンプルではダミー配列を提供しましたが、明らかにデータベースから自分のものを構築する必要があります... :)

編集:質問から取得した配列でマルチを選択してください...

<?php
$gifts = array("Standard" => "Standard", "Gift_ID_Req" => "Require Program ID", "Not_Enrolled" => "Do not Enroll");
$gift = array($row['gift_privacy']);

function printSelectOptions($dataArray, $selectionArray) {
    foreach ($dataArray as $key => $value) {
        echo '<option ' . (in_array($key, $selectionArray) ? 'selected="selected"' : '') . ' value="' . $key . '">' . $value . '</option>';
    }
}
?>

<select multiple>
    <?php echo printSelectOptions($gifts, $gift); ?>
</select>

編集:複数の選択した値を分解する

複数の値をコンマ区切りの文字列として選択している場合は、提供した関数に渡す前にそれを分解する必要があります...

$selectedOptionsArray = explode(',', $selectedOptionsString);

したがって、終了コードは次のようになります...

<?php
$gifts = array("Standard" => "Standard", "Gift_ID_Req" => "Require Program ID", "Not_Enrolled" => "Do not Enroll");
$gift = explode(',', $row['gift_privacy']);

function printSelectOptions($dataArray, $selectionArray) {
    foreach ($dataArray as $key => $value) {
        echo '<option ' . (in_array($key, $selectionArray) ? 'selected="selected"' : '') . ' value="' . $key . '">' . $value . '</option>';
    }
}
?>

<select multiple>
    <?php echo printSelectOptions($gifts, $gift); ?>
</select>
于 2013-02-13T08:06:45.860 に答える
1

次のような関数を使用して単純化できます。

<?php
function renderOption($key, $value, $current) {
    echo '<option value="' . $key . '"' . ($key == $current ? ' selected="selected"' : '') . '>' . $value. '</option>';
}
?>

<select name="gift_privacy">
    <?php
    $gifts = array("Standard" => "Standard", "Gift_ID_Req" => "Require Program ID", "Not_Enrolled" => "Do not Enroll");
    $gift = $row['gift_privacy'];
    foreach($gifts as $key => $value) 
        renderOption($key, $value, $gift);
    ?>
</select>
于 2013-02-13T08:01:43.913 に答える
0

より簡単な方法を使用します。

<?php
 echo '<option '.($key == $gift ? 'selected="selected" ' : '').'value="'. $key .'">'. $value .'</option>';
?>

編集:2番目のオプション

 echo '<option '.selected_option($key, $gift).'value="'. $key .'">'. $value .'</option>';

 function selected_option($val1, $val2){
  if($val1 == $val2){
   return 'selected="selected" ';
  }else{
   return '';
  }
 }
于 2013-02-13T07:58:07.787 に答える
-1

あなたが持っているものに何の問題もありません.これ、または非常によく似たものが、この問題への典型的なアプローチです.

あなたはそれを実際の関数でラップする/することができます.select自体を含むprint_select( $array, $selected );全体を出力する/出力することができます.<select>

最終的なコードは次のようになります。

print_select( $gifts, $selected_gift );
print_select( $colors, $selected_color );
// etc
于 2013-02-13T07:59:13.233 に答える