PHP数据库动态获取部门信息
1、 考核知识点
SQL的连表查询
2、 练习目标
Ø 熟练掌握连表查询,能够根据需求修改现有代码以实现功能
3、 需求分析
在添加员工信息时,一般员工所属部门是不允许用户手动输入的,而是通过动态查询数据库,获取到部门表数据,以下拉菜单的形式展示到表单中,以供选择。下面就在【案例3-1】的基础上,完成员工添加及修改时动态获取部门信息的功能。
4、 设计思路
1) 修改showList.php文件的SQL语句,使用连接查询完成数据获取。
2) 在显示添加表单前获取部门表数据。
3) 在添加员工页面中以下拉菜单来展现部门数据。
4) 修改empAdd.php文件中保存合法字段的$fields变量。
5) 在显示修改表单前获取到部门数据。
6) 在修改员工页面中以下拉菜单来展现部门数据。
7) 修改empUpdate.php文件中保存合法字段的$fields变量。
1、修改empAdd.php文件,在显示添加表单前需要获取部门表数据,具体代码如下:
……
//没有表单提交时,显示员工添加页面,从部门表获取部门信息
//编写SQL语句,用于查询部门表数据
$sql = 'select * from emp_dept';
//调用fetchAll()函数,执行SQL并进行数据处理,把处理后的部门数据赋值给$emp_dept
$emp_dept = fetchAll($sql);
//显示员工添加页面
define('APP', 'itcast');
require './add_html.php';
上述代码中,在展示添加员工表单前,先通过执行“select * from emp_dept”获取到了部门信息,然后再载入员工添加页面add_html.php。
3、修改add_html.php文件,在添加员工页面中以下拉菜单来展现部门数据,关键部分代码如下:
……
<th>所属部门:</th>
<td>
<!--以下为select下拉框的关键代码-->
<select name="d_id">
<?php foreach ($emp_dept as $row) { ?>
<option value="<?php echo $row['d_id']; ?>"><?php echo $row['d_name']; ?></option>
<?php } ?>
</select>
<!—select下拉框结束-->
</td>
……
在上述代码中,主要将原本部门的输入文本框变为了下拉菜单,在其中使用foreach将保存部门信息的数组进行遍历,放入到<option>标签中。需要注意的是,<option>标签的value值需要保存的是部门ID,而非部门名称,表单实际提交的将会是部门ID。
此时访问showList.php文件,并点击“添加员工”链接,跳转到员工添加页面,运行结果如下图所示。
从上图可以看到,员工所属部门已经全部获取并显示到了下拉菜单中。
4、由于表示员工所属部门的表单元素的name属性不再是e_dept,而变成了d_id。因此需要修改empAdd.php文件中保存合法字段的$fields变量,修改代码如下:
//声明变量$value,用来保存字段信息
$fields = array('e_name', 'd_id', 'date_of_birth', 'date_of_entry');
完成上述修改后,动态获取部门信息并添加员工数据的功能就可以实现了。
5、修改empUpdate.php文件,与员工添加类似,在显示修改表单前先获取到部门数据,具体代码如下:
……
//当没有表单提交时,查询当前要编辑的员工信息,展示到页面中
//编写SQL语句,查询相应ID的员工数据
$sql = "select * from `emp_info` where `e_id` = $e_id";
//使用fetchRow()函数处理数据
$emp_info = fetchRow($sql);
//编写SQL语句,查询所有部门信息数据
$sql = 'select * from emp_dept';
$emp_dept = fetchAll($sql);
//显示员工修改页面
define('APP', 'itcast');
require './update_html.php';
上述代码中,在展示修改员工表单前,先通过执行“select * from emp_dept”获取到了部门信息,然后再载入员工添加页面update_html.php。
6、修改update_html.php文件,与员工添加页面类似,需要修改表单以显示部门信息,关键部分代码如下:
……
<th>所属部门:</th>
<td>
<!—下拉菜单开始-->
<select name="d_id">
<?php foreach ($emp_dept as $row) { ?>
<!—在输出每个部门信息时,判断是否为该员工当前所属部门,如果是设置为默认-->
<option value="<?php echo $row['d_id']; ?>" <?php if ($emp_info['d_id'] == $row['d_id']) echo "selected='selected'"; ?>><?php echo $row['d_name']; ?></option>
<?php } ?>
</select>
<!—下拉菜单结束-->
</td>
……
上述代码,显示部门信息的过程与员工添加基本一致。唯一不同的是,需要在遍历部门信息时,与员工所属部门ID进行比较,以便将员工当前所属的部门设置为下拉菜单的默认项。
7、由于表示员工所属部门的表单元素的name属性不再是e_dept,而变成了d_id。因此需要修改empUpdate.php文件中保存合法字段的$fields变量,修改代码如下:
//声明变量$value,用来保存字段信息
$fields = array('e_name', 'd_id', 'date_of_birth', 'date_of_entry');
至此就完成了在添加和修改员工时,动态获取部门信息的功能。
1、在select下拉菜单中,option的值表示员工所属的部门,而员工表中保存的部门信息是其部门id,因此option的值也是部门id。
2、在添加和修改员工信息时,都需要经过字段合法性验证。而在修改表结构后,员工表字段发生了变化,因此需要修改保存合法字段的变量数组。