Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:带有optgroup的动态下拉列表_Php_Mysql_Drop Down Menu_Optgroup - Fatal编程技术网

PHP:带有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; +--------+------------

我正在开发一个下拉菜单,它使用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正常工作。我试过无数次了,它真的开始让我失望了下面是我想要的输出(示例):

<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'];
}