【问题标题】:Highlight already selected items in multiple select box在多个选择框中突出显示已选择的项目
【发布时间】:2013-10-29 07:23:19
【问题描述】:

我有 2 个表,其中一个“品牌”存储所有品牌名称,一个“品牌类别”存储所有品牌名称及其相应类别。我有一个多选框,可以在页面加载时加载“品牌”表中的所有项目,但我需要突出显示用户之前在“品牌类别”表中已经提交的项目以及其他品牌留下,以便用户知道要在“brand_category”表中输入的品牌。下面是代码,但它不起作用。请帮忙解决这个问题

<div class="selectbox">
    <label id="brand" class="brand_label">Brand:</lable>
    <?php
        echo "<select name='brand' class='cat_brands' multiple>"
        <option value='0'>None</option>";
        $query = mysql_query("SELECT id, name FROM brand");
        while($br_query = mysql_fetch_assoc($query)){
            $query_select = mysql_query("SELECT * FROM brand_category WHERE brand_id='".$br_query['id']."'");
            while($brnd_select = mysql_fetch_assoc($query_select)){
                if($brnd_select['brand_id']==$br_query['id']){
                    echo "<option style='background-color: red' value='".$br_query['id']."'>".$br_query['name']."</option>";
                }
            }
        }
    ?>
</div>

以上代码只显示'brand_category'表中输入的品牌,其余品牌不显示。我也需要展示它们。

【问题讨论】:

    标签: php


    【解决方案1】:

    你忘了在while循环中提到else条件。这里是代码

    <div class="selectbox">
    <label id="brand" class="brand_label">Brand:</lable>
    <?php
        echo "<select name='brand' class='cat_brands' multiple>"
        <option value='0'>None</option>";
        $query = mysql_query("SELECT id, name FROM brand");
        while($br_query = mysql_fetch_assoc($query)){
            $query_select = mysql_query("SELECT * FROM brand_category WHERE brand_id='".$br_query['id']."'");
            while($brnd_select = mysql_fetch_assoc($query_select)){
                if($brnd_select['brand_id']==$br_query['id']){
                    echo "<option style='background-color: red' value='".$br_query['id']."'>".$br_query['name']."</option>";
                }else{
                   echo "<option value='".$br_query['id']."'>".$br_query['name']."</option>";
                }
    
            }
        }
    ?>
    </div>
    

    【讨论】:

    • 不确定这是否可行,一旦在第二个 while 循环中,条件将始终与第一个匹配,而 else 将不会执行,因为 db 查询将始终与第一个匹配
    【解决方案2】:

    如果我正确理解了您的查询,那么您正尝试提取所有品牌并使brands_category 表中的品牌显示为选中状态。

    您最好使用 MySQL PDO 扩展而不是这种过时的方法

    有更好的方法来实现这一点,例如无论如何,只有一个表或使用 Join 查询...这应该可以工作。

    <select name='brand' class='cat_brands' multiple>
    <option value='0'>None</option>
    <?php
    $query = mysql_query("SELECT id, name FROM brand");
    
    while($br_query = mysql_fetch_assoc($query))
    {
       $query_select = mysql_query("SELECT * FROM brand_category WHERE brand_id='".$br_query['id']."'");
    
       if(mysql_num_rows($query_select) > 0)
       {
          while($brnd_select = mysql_fetch_assoc($query_select))
          {
             echo "<option style='background-color: red' value='".$br_query['id']."' selected='selected'>".$br_query['name']."</option>";
          }
       }
       else
       {
          echo "<option style='background-color: yellow' value='".$br_query['id']."'>".$br_query['name']."</option>";
       }
    } ?>
    </select>
    

    【讨论】:

      猜你喜欢
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 2021-04-01
      相关资源
      最近更新 更多