我正在创建一个客户帐户页面,该页面显示数据库中的相关信息并允许客户编辑他们的信息。下面的代码从数据库中检索并显示客户的帐户信息,并预先选择与他们的信息匹配的值,但是由于有几百个选择和/或多选元素,我想创建一个函数来检查数据库是否value (ie $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>