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

PHP+MySQL双角色用户登录系统角色判断异常求助

问题修复方案

你遇到的问题由两处核心语法/配置错误导致,按顺序修改即可解决:

1. 修复signUp.php单选按钮配置

单选按钮属于同一选项组时,name属性必须完全一致,原代码中两个选项的name分别为Librarian和Member,既不属于同一组,也和后端接收的参数名不匹配,导致角色值根本无法正常提交入库。
修正后的单选按钮代码如下:

<!-- add a radio for librarian or member -->
<p>Are you a librarian?</p>
<input id="UserRoleLibrarian" type="radio" name="UserRole" value="Librarian" required>
<p>Or a Member?</p>
<br>
<input id="UserRoleMember" type="radio" name="UserRole" value="Member" required>

补充:同一页面的id属性不能重复,所以给两个单选按钮的id做了区分

2. 修复home.php的条件判断逻辑

原判断语句isset($_SESSION['UserRole']) == 'Librarian'存在逻辑错误:isset()函数返回的是布尔值(存在返回true,不存在返回false),在PHP弱类型比较规则中,布尔值true和任意非空字符串比较都会返回true,所以只要UserRole会话存在,永远会命中第一个判断条件,展示Librarian内容。
修正后的判断逻辑如下:

<?php
if(isset($_SESSION['UserRole']) && $_SESSION['UserRole'] == 'Librarian'){
    include ('Librarian.php');
} else if(isset($_SESSION['UserRole']) && $_SESSION['UserRole'] == 'Member' ) {
    include ('Member.php');
} else {
    header ('Location: signIn.php');
    exit; // 补充exit防止后续代码继续执行
}
?>

额外注意事项(可选优化)

  1. 原代码存在SQL注入风险,不要直接拼接用户输入到SQL语句中,建议使用mysqli预处理语句
  2. 密码不要明文存储入库,建议使用password_hash()加密,登录时用password_verify()验证
  3. 执行header跳转后建议加exit终止后续代码执行

内容的提问来源于stack exchange,提问作者user14310306

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:24:01