基于下拉选择角色实现PHP页面数据库用户数据筛选展示
实现角色过滤用户列表的方案
咱们可以通过以下几步来完成这个按角色筛选用户的功能,核心逻辑就是根据下拉框提交的角色值,动态调整数据库的查询条件,从而展示对应的数据:
1. 调整前端页面(index.php)
首先要在页面顶部处理用户提交的角色参数,把它传递给获取用户的方法,同时让下拉框记住用户选中的选项,提升体验:
<?php include_once 'dbop.php'; // 获取提交的角色参数,默认空值表示显示所有用户 $selected_role = isset($_POST['role']) ? $_POST['role'] : ''; $objUser = new Users(); // 将选中的角色传给查询方法 $users = $objUser->get_users($selected_role); ?> <!DOCTYPE html> <html lang="en"> <!-- 省略其他头部/样式内容 --> <form action="index.php" method="POST"> <select name="role" id="role"> <!-- 给每个选项添加选中状态判断,保持用户选择 --> <option value="Admin" <?php echo $selected_role === 'Admin' ? 'selected' : ''; ?>>Admin</option> <option value="SysAdmin" <?php echo $selected_role === 'SysAdmin' ? 'selected' : ''; ?>>SysAdmin</option> <option value="User" <?php echo $selected_role === 'User' ? 'selected' : ''; ?>>User</option> <!-- 新增"全部角色"选项,方便查看所有数据 --> <option value="" <?php echo $selected_role === '' ? 'selected' : ''; ?>>全部角色</option> </select> <!-- 添加提交按钮,触发筛选操作 --> <button type="submit">筛选</button> <table> <thead> <tr> <th>Name</th> <th>Role</th> </tr> </thead> <tbody> <?php for($i = 0; $i < sizeof($users); $i++) { ?> <tr> <!-- 用htmlspecialchars转义输出,避免XSS风险 --> <td><?php echo htmlspecialchars($users[$i]["name"]); ?></td> <td><?php echo htmlspecialchars($users[$i]["role"]); ?></td> </tr> <?php } ?> </tbody> </table> </form> <!-- 省略其他页面内容 --> </html>
2. 修改数据库查询方法(dbop.php)
接下来要更新get_users方法,让它支持接收角色参数,并动态生成带过滤条件的SQL语句,这里重点要注意SQL注入风险,所以用mysqli预处理语句来保证安全:
<?php // 省略类的其他初始化/方法代码 public function get_users($role = '') { // 基础查询语句 $sql = "select name, role from users"; // 如果传入了角色参数,添加WHERE过滤条件 if (!empty($role)) { $sql .= " WHERE role = ?"; } // 使用预处理语句防止SQL注入 $stmt = $this->dbObj->prepare($sql); if (!empty($role)) { // 绑定参数,"s"表示参数为字符串类型 $stmt->bind_param("s", $role); } $stmt->execute(); $result = $stmt->get_result(); $data_all = array(); if ($result != null && mysqli_num_rows($result) > 0) { while($fetch_data = mysqli_fetch_assoc($result)) { $arr = array(); $arr["name"] = $fetch_data['name']; $arr["role"] = $fetch_data['role']; $data_all[] = $arr; } } // 关闭预处理语句 $stmt->close(); return $data_all; } ?>
3. 功能测试
现在你可以运行页面测试了:
- 选择任意角色,点击"筛选"按钮,页面会提交请求并展示对应角色的用户
- 选择"全部角色",会显示所有用户记录
- 页面刷新后,下拉框会保持你之前选中的角色选项
内容的提问来源于stack exchange,提问作者Amol
相关产品推荐
相关产品推荐

