【问题标题】:Pre-select option matching db value without adding a new Select option预选匹配 db 值的选项而不添加新的 Select 选项
【发布时间】:2013-02-12 03:33:53
【问题描述】:

我正在创建一个客户帐户页面,该页面显示数据库中的相关信息并允许客户编辑他们的信息。

以下代码从数据库中检索并显示客户的帐户信息,并预先选择正确匹配其信息的值。我的问题是特定于 Select 元素的——不是从现有的选择选项中进行选择,而是在数据库中添加一个带有值的额外选择选项,以便数据库中的值显示两次。

编辑 - 例如,如果“gift_privacy”的 db 值为“标准”,则选择选项将显示为:*标准、标准、礼物 ID Req、Not_Enrolled* 而不是 *标准、礼品 ID 要求、未注册*

如何更正此代码以便将selected="selected" 应用于现有选项?

<?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();
$search = array('_', ',');
$replace = array(' ', ', ');
$rows = str_replace($search, $replace, $row);
?>
<select name="gift_privacy">
<option selected="selected" value="<?php echo $rows['gift_privacy']; ?>"><?php echo $rows['gift_privacy']; ?></option>
<option value="Standard">Standard</option>
<option value="Gift_ID_Req">Require program ID</option>
<option value="Not_Enrolled">Do not enroll</option>
</select>

【问题讨论】:

  • 我不确定我是否理解...它如何显示两次?您显示的代码的输出是什么?
  • @Jon - 如果显示代码的 db 值为“标准”,则选择选项将显示为:“标准、标准、礼品 ID Req、Not_Enrolled”而不是“标准、礼品 ID” Req, Not_Enrolled'

标签: php select selected


【解决方案1】:

试试:

<?php
$gifts = array(
    "Standard" => "Standard",
    "Gift_ID_Req" => "Require Program ID",
    "Not_Enrolled" => "Do not Enroll");

$gift = $rows['gift_privacy'];
//$gift = "Gift_ID_Req";
foreach($gifts as $key => $value) {
    if($key == $gift) {
        echo '<option selected="selected" value="'. $key .'">'. $value .'</option>';
    } else {
        echo '<option value="'. $key .'">'. $value .'</option>';
    }
}
?>

代替:

<option selected="selected" value="<?php echo $rows['gift_privacy']; ?>"><?php echo $rows['gift_privacy']; ?></option>
<option value="Standard">Standard</option>
<option value="Gift_ID_Req">Require program ID</option>
<option value="Not_Enrolled">Do not enroll</option>

当然,给猫剥皮有多种方法,您可以检查$rows['gift_privacy'] 是否与每一行的当前选项匹配。

【讨论】:

  • 我在 '' 之间插入了您建议的代码,但这导致它始终显示第一个选项(“标准”)无论 db 值是什么。
  • 而不是 $gift = $rows['gift_privacy']; 使用 $gift = $row['gift_privacy'];,我们希望它未经编辑。
  • 那行得通 :-D 出于好奇,是否有另一种方法(例如您检查 $rows['gift_privacy'] 是否与当前选项匹配的建议)更易于实现(因为那里是几百个选择元素)?
  • 这取决于你所拥有的,与最容易实现的相比。如果有几百行,检查每一行会更加困难,除非在一个函数中检查每一行。 ^^
  • 你能帮我解决这个问题吗?我对样式复选框使用了类似的功能,但其他人编写了它,我不太确定如何修改它。 $(function () { var selectColor = function () { var select = !$(this).hasClass('ColorSelected'); $(this).toggleClass('ColorSelected', select) .find('.cbx') .prop('checked', select); return false; }; $('tr.account_rows').on('click', '.Colorbox', selectColor); });
【解决方案2】:

试试这个。这是解决您问题的简单方法。

<select name="gift_privacy">
<option value="Standard" <?php if($rows['gift_privacy']=='Standard') echo "selected='selected'"; ?>>Standard</option>
<option value="Gift_ID_Req" <?php if($rows['gift_privacy']=='Gift_ID_Req') echo "selected='selected'"; ?>>Standard</option>
<option value="Not_Enrolled" <?php if($rows['gift_privacy']=='Not_Enrolled') echo "selected='selected'"; ?>>Standard</option>
</select>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多