PHP:带有optgroup的动态下拉列表
我正在开发一个下拉菜单,它使用HTML OPTGROUP作为员工所属的组名。以下是MySQL查询和输出: mysql> SELECT employees.emp_id,employees.empname,employees.grp_id,groups.groupname FROM employees left join groups on employees.grp_id = groups.grp_id order by groupname asc; +--------+------------+--------+-----------+ | emp_id | empname | grp_id | groupname | +--------+------------+--------+-----------+ | 20 | Employee 2 | 13 | Group 1 | | 19 | Employee 1 | 13 | Group 1 | | 21 | Employee 3 | 14 | Group 2 | +--------+------------+--------+-----------+ 3 rows in set (0.00 sec) mysql>选择employees.emp\u id,employees.empname,employees.grp\u id,groups.groupname从employees left加入employees.grp\u id=groups.grp\u id按groupname asc排序; +--------+------------+--------+-----------+ |emp|u id | empname | grp|u id | groupname| +--------+------------+--------+-----------+ |20 |员工2 | 13 |第一组| |19 |员工1 | 13 |第一组| |21 |员工3 | 14 |第2组| +--------+------------+--------+-----------+ 一组3行(0.00秒) 唯一的问题是,我最难弄清楚如何让optgroup正常工作。我试过无数次了,它真的开始让我失望了下面是我想要的输出(示例):PHP:带有optgroup的动态下拉列表,php,mysql,drop-down-menu,optgroup,Php,Mysql,Drop Down Menu,Optgroup,我正在开发一个下拉菜单,它使用HTML OPTGROUP作为员工所属的组名。以下是MySQL查询和输出: mysql> SELECT employees.emp_id,employees.empname,employees.grp_id,groups.groupname FROM employees left join groups on employees.grp_id = groups.grp_id order by groupname asc; +--------+------------
<select name="dropdownmenu">
<optgroup label="Group 1">
<option name="20">Employee 2</option>
<option name="19">Employee 1</option>
</optgroup>
<optgroup label="Group 2">
<option name="21">Employee 3</option>
</optgroup>
</select>
function getDynGrpList() {
global $db;
// $query = "SELECT * FROM employees ORDER BY grp_id desc;";
$query = "SELECT employees.emp_id,employees.empname,employees.grp_id,groups.groupname FROM employees left join groups on employees.grp_id = groups.grp_id order by groupname asc;";
$employees = $db->GetAll($query);
$groups = array();
while ($qa = $employees->GetRows()) {
$groups[$qa['groupname']][$qa['emp_id']] = $qa['empname'];
}
var_export($groups);
foreach($groups as $label => $opt): ?>
<optgroup label="<?php echo $label; ?>">
<?php foreach ($opt as $id => $name): ?>
<option value="<?php echo $id; ?>"><?php echo $name; ?></option>
<?php endforeach; ?>
</optgroup>
<?php endforeach;
}
雇员2
员工1
雇员3
基本上,optgroup需要是“groupname”,选项“name”应该是“emp_id”,操作“option”(下拉项)是“empname”
我希望这是可以做到的,但真的不确定。以下是我拥有的功能,但它确实不能正常工作:
function getDynGrpList() {
global $db;
// $query = "SELECT * FROM employees ORDER BY grp_id desc;";
$query = "SELECT employees.emp_id,employees.empname,employees.grp_id,groups.groupname FROM employees left join groups on employees.grp_id = groups.grp_id order by groupname asc;";
$employees = $db->GetAll($query);
$groups = array();
while ($qa = $employees->GetRows()) {
$groups[$qa['groupname']][$qa['grp_id']] = $qa['empname'];
}
foreach ($groups as $label => $opt) { ?>
<optgroup label="<?php echo $label; ?>">
<?php }
foreach ($groups[$label] as $id => $name) { ?>
<option value="<?php echo $id; ?>"><?php echo $name; ?></option>
<?php } ?>
</optgroup>
<?php }
函数getDynGrpList(){
全球$db;
//$query=“按grp_id desc;从员工订单中选择*”;
$query=“选择employees.emp\u id,employees.empname,employees.grp\u id,groups.groupname从employees left加入employees.grp\u id=groups.grp\u id按groupname asc排序;”;
$employees=$db->GetAll($query);
$groups=array();
而($qa=$employees->GetRows()){
$groups[$qa['groupname'][$qa['grp_id']]=$qa['empname'];
}
foreach($label=>$opt的组){?>
代码中没有嵌套两个for循环:
foreach ($groups as $label => $opt) { ?>
<optgroup label="<?php echo $label; ?>">
<?php } <-- wrong here
foreach ($groups[$label] as $id => $name) { ?>
<option value="<?php echo $id; ?>"><?php echo $name; ?></option>
<?php } ?>
此外,我认为在创建数组时必须使用emp\u id
,而不是grp\u id
:
while ($qa = $employees->GetRows()) {
$groups[$qa['groupname']][$qa['emp_id']] = $qa['empname'];
}
我实际上得到了一个空白的代码下拉列表。你的代码和我的代码实际上没有显示任何下拉菜单。代码中的某个地方出现了问题,只是不知道在哪里。@drewrockshard:Make a
var\u export($groups)
在循环之前,查看数组是否包含数据及其结构。我更新了我的初始帖子。添加变量导出($groups)后,也没有输出。也许如果你能看看我的整个函数,也许你能发现一些错误。我把函数从select表单中拉出来,让它打印到屏幕上。下面是我得到的错误:致命错误:在非对象上调用成员函数GetRows()
@drewrockshard:Mmh。什么是$db
?
<?php foreach($groups as $label => $opt): ?>
<optgroup label="<?php echo $label; ?>">
<?php foreach ($opt as $id => $name): ?>
<option value="<?php echo $id; ?>"><?php echo $name; ?></option>
<?php endforeach; ?>
</optgroup>
<?php endforeach; ?>
while ($qa = $employees->GetRows()) {
$groups[$qa['groupname']][$qa['emp_id']] = $qa['empname'];
}