You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP下拉框无法自动显示当前用户已选角色问题求助

问题解决方法

核心问题分析

  1. $selected_role 是查询结果集对象,未调用 mysqli_fetch_array 取出实际数据,直接访问数组索引无效果
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:30:44