PHP下拉框无法自动显示当前用户已选角色问题求助
问题解决方法
核心问题分析
$selected_role是查询结果集对象,未调用mysqli_fetch_array取出实际数据,直接访问数组索引无效果selected属性逻辑错误,不能直接赋值角色名称,需对比角色ID动态添加选中状态
修改后的完整代码
<?php $admin_id = $_SESSION['user_id']; $roles = mysqli_query($con, "SELECT * FROM roles"); // 取出当前用户的角色ID $user_role_result = mysqli_query($con, "SELECT u.role FROM users u WHERE id=$admin_id"); $user_role = mysqli_fetch_array($user_role_result); // 提取用户角色ID,空值时设为0避免报错 $user_selected_role_id = $user_role['role'] ?? 0; ?> <select> <?php while($total_roles = mysqli_fetch_array($roles)){ // 对比角色ID,匹配则添加selected属性 $selected = ($total_roles['role_id'] == $user_selected_role_id) ? 'selected' : ''; ?> <option <?php echo $selected; ?> value="<?php echo $total_roles['role_id']?>"><?php echo $total_roles['role'] ?></option> <?php } ?> </select>
关键修改点
- 简化查询:仅从用户表获取角色ID(无需关联角色表,用户表已存储role_id),并取出数据存入
$user_selected_role_id - 动态判断选中状态:循环角色列表时,通过角色ID对比生成
selected属性,匹配时添加该属性,否则留空 - 空值处理:用
?? 0避免用户无角色时出现报错
额外安全建议
为防范SQL注入,建议使用预处理语句替代直接拼接ID:
// 预处理查询用户角色ID $stmt = mysqli_prepare($con, "SELECT u.role FROM users u WHERE id=?"); mysqli_stmt_bind_param($stmt, "i", $admin_id); mysqli_stmt_execute($stmt); $user_role_result = mysqli_stmt_get_result($stmt); $user_role = mysqli_fetch_array($user_role_result);
内容的提问来源于stack exchange,提问作者sukkie
相关产品推荐
相关产品推荐

