编程语言
首页 > 编程语言> > php – 选择字段的optgroup – 同一个表中的组和选项字段.我怎样才能做到这一点?

php – 选择字段的optgroup – 同一个表中的组和选项字段.我怎样才能做到这一点?

作者:互联网

我有一个搜索表单,用于搜索数据库中的表.该表包含以下列:

icao – 名字 – 国家

我有php将这些字段放在每行的选择选项中使用以下查询:

 public function airportstuff() {
        $query = "SELECT icao, name, country
                FROM phpvms_airports
                ORDER BY icao";

        return DB::get_results($query);
    }

那么php如下:

 <?php foreach ($airports as $airport)
 {echo '<option value="'.$airport->icao.'">'.$airport->icao.' - '.$airport->name.'</option>';}
                    ?>

这项工作正常,但我希望能够将国家/地区列用作选项组,因此每个国家/地区都是一个选项组,其中该国家/地区的相应机场位于右侧optgroup中.

我试过这个:

<?php
foreach ($airports as $airport)
{
echo '<optgroup label="'.$airport->country.'">';
echo '<option value="'.$airport->icao.'">'.$airport->icao.' - '.$airport->name.'</option>';
?>
<?php echo '</optgroup>';}?>

但它只是为每个机场创建了一个optgroup.

对此有任何帮助非常感谢,并提前感谢.

斯图尔特

解决方法:

首先,修改查询以按国家/地区排序,然后依次为icao.

public function airportstuff() {
    $query = "SELECT icao, name, country
            FROM phpvms_airports
            ORDER BY country, icao";
    return DB::get_results($query);
}

然后尝试这个:

$previousCountry = null;
foreach ($airports as $airport) {
    if ($previousCountry != $airport->country) {
        // close the previous optgroup tag only if this isn't our first time through the loop
        if ($previousCountry !== null) {
            echo '</optgroup>';
        }
        echo '<optgroup label="'.$airport->country.'">';
    }
    echo '<option value="'.$airport->icao.'">'.$airport->icao.' - '.$airport->name.'</option>';
    $previousCountry = $airport->country;
}
// close the final optgroup only if we went through the loop at least once
if ($previousCountry !== null) {
    echo '</optgroup>';
}

顺便说一句:为了避免代码中的XSS vulnerabilities,你真的应该包装你在htmlspecialchars()中构建的HTML的所有动态部分或类似的功能.

标签:optgroup,html,php,mysql,select
来源: https://codeday.me/bug/20190903/1796624.html