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防止后续代码继续执行 } ?>
额外注意事项(可选优化)
- 原代码存在SQL注入风险,不要直接拼接用户输入到SQL语句中,建议使用mysqli预处理语句
- 密码不要明文存储入库,建议使用
password_hash()加密,登录时用password_verify()验证 - 执行header跳转后建议加
exit终止后续代码执行
内容的提问来源于stack exchange,提问作者user14310306
相关产品推荐
相关产品推荐

