【问题标题】:display each category with their items from table in select option在选择选项中显示每个类别及其表中的项目
【发布时间】:2018-09-03 21:31:08
【问题描述】:

我有一张桌子products_tbl

+----------+-----------+---------------+
|product_id|ProductName|ProductCategory|
+----------+-----------+---------------+
|1         |Apple      |fruits         |
|2         |Orange     |fruits         |
|3         |Iphone X   |Electronics    |
|4         |FJ-Eye Lens|Accessories    |
+----------+-----------+---------------+

我想使用 HTML SELECT OPTION

在单独的组中显示每个类别项目

products.php

$productQ = "SELECT * FROM products_tbl ";
try { 
    $stmt2 = $db->prepare($productQ); 
    $stmt2->execute();
} catch(PDOException $ex) {   
    die("Failed to run Query: " . $ex->getMessage()); 
} 

$produtsrows = $stmt2->fetchAll(); 

echo"<select>";
foreach($produtsrows as $prow): 
    echo "<optgroup label=".$prow['ProductCategory'].">";
    echo"   <option>".$prow['ProductName']."</option>
          </optgroup>";
endforeach;
echo "
    </select>
    ";

这样显示

fruits
Apple 
fruits
Orange  
Electronics    
Iphone X
Accessories    
FJ-Eye Lens

【问题讨论】:

  • 我想在一个单独的类别下显示所有项目,而不是重复显示给我的类别名称

标签: php mysqli pdo


【解决方案1】:

你需要改变你的foreach循环,当它与最后一个相同时不输出类别名称:

$last_cat = "";
foreach($produtsrows as $prow): 
    if (($cat = $prow['ProductCategory']) != $last_cat) {
        if ($last_cat != "") echo "</optgroup>\n";
        echo '<optgroup label="'.$cat.'">' . "\n";
        $last_cat = $cat;
    }
    echo"   <option>".$prow['ProductName']."</option>\n";
endforeach;
echo "</optgroup>\n";   

输出(用于您的数据)

<optgroup label="fruits">
   <option>Apple</option>
   <option>Orange</option>
</optgroup>
<optgroup label="Electronics">
   <option>Iphone X</option>
</optgroup>
<optgroup label="Accessories">
   <option>FJ-Eye Lens</option>
</optgroup>

【讨论】:

  • 它的工作如我所愿,感谢您的帮助,标记为已接受
【解决方案2】:

我稍微修改了你的代码:

$productQ = "SELECT * FROM products_tbl ORDER BY ProductCategory ASC";
try { 
    $stmt2 = $db->prepare($productQ); 
    $stmt2->execute();
} catch(PDOException $ex) {   
    die("Failed to run Query: " . $ex->getMessage()); 
} 

$produtsrows = $stmt2->fetchAll(); 

echo"<select>";
$category = "";
foreach($produtsrows as $prow): 
    if ($category != $prow['ProductCategory']) {
        if ($category != "") {
            echo "</optgroup>";
        }
        $category = $prow['ProductCategory'];
        echo "<optgroup label=".$prow['ProductName'].">";
    }
    echo"   <option>".$prow['ProductName']."</option>
endforeach;
echo "</optgroup>
    </select>
    ";

首先请注意,我添加了ORDER BY ProductCategory ASC 以确保所有具有相同类别的产品始终放在一起。

接下来我只在类别与上一项不同时添加&lt;optgroup&gt;标签。

请注意,我假设所有产品都有一个有效的类别。如果您的类别为空,则生成的 html 将被弄乱。

【讨论】:

  • 它有效,但它只显示没有项目的类别
  • 抱歉,我的代码有错误。我已经对其进行了编辑
猜你喜欢
  • 2013-01-26
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 2013-02-24
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多