如何解决选择字段的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,因此每个国家/地区都是一个optgroup,该国家/地区的相应机场在正确的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。
在这方面的任何帮助将不胜感激,并在此先感谢。
斯图尔特
解决方法
首先,修改查询以按
country
,然后按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漏洞,您确实应该将正在构建的HTML的所有动态部分包装在ѭ7或类似功能中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。