6
我正在開發一個下拉菜單,該菜單使用HTML optgroups作爲員工參與的組名。下面是MySQL數據庫的查詢和輸出:PHP:使用optgroup進行動態下拉
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)
唯一的問題是,我在最困難的時候搞清楚如何讓OPTGROUP正常工作。我試過無數次,真的開始讓我感到挫折。 以下是相當多我想要的輸出是(例如):
<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>
基本上,OPTGROUP需要是「組名」中,選擇「名稱」應該是「EMP_ID」,和動作「選項」(drop down item)是「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功能凌晨3:15 CST(2/27)的:
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;
}
最終解決方案(以費利克斯·克林的幫助下)
function getDynGrpList() {
global $db;
$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();
foreach ($employees as $employee) {
$groups[$employee['groupname']][$employee['emp_id']] = $employee['empname'];
}
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;
}
實際上,我用代碼得到一個空白的下拉菜單。你的代碼和我的代碼實際上並不顯示任何下拉菜單。在代碼的某處,有一個問題,只是不知道在哪裏。 – drewrockshard 2011-02-27 09:03:03
@drewrockshard:在循環前面創建一個'var_export($ groups)'並查看數組是否包含數據以及它具有什麼結構。 – 2011-02-27 09:07:15
我更新了我的初始帖子。在添加var_export($ groups)之後,也沒有輸出。也許如果你可以看看我的整個功能,也許你可以發現一些錯誤。 – drewrockshard 2011-02-27 09:15:49