gpt4 book ai didi

php - 检查 db 值是否与当前 Select 选项匹配的函数

转载 作者:搜寻专家 更新时间:2023-10-31 21:13:06 28 4
gpt4 key购买 nike

我正在创建一个客户帐户页面,它显示数据库中的相关信息并允许客户编辑他们的信息。下面的代码从数据库中检索并显示客户的帐户信息,并预先选择与他们的信息匹配的值,但是由于有几百个选择和/或多选元素,我想创建一个函数来检查数据库是否值 (即 $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['通知'])。然后从获取的值中去除这些逗号,以便将它们与选项的值正确比较 $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>

最佳答案

我曾经遇到过同样的问题并通过创建一个函数(或类静态方法)来处理我的选项列表来解决它。

要打印出您的选项,您无论如何都必须循环浏览它们,因此在您循环时检查每个选项是否一定是当前选中的没有什么坏处。

只需创建一个函数,如:

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>

诀窍是将选定的值作为键数组而不是单个键传递。在示例中,我提供了虚拟数组,但显然您必须从数据库构建您的虚拟数组...:)

编辑:使用从问题中获取的数组选择 multi...

<?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>

关于php - 检查 db 值是否与当前 Select 选项匹配的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14848744/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com