データベース内の関連情報を表示し、顧客が自分の情報を編集できる顧客アカウント ページを作成しています。以下のコードは、データベースから顧客のアカウント情報を取得して表示し、その情報に一致する値を事前に選択しますが、数百の選択および/または複数選択要素があるため、データベースが値(つまり$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>