基于用户名实现登录页面差异化跳转的需求及代码咨询
实现基于用户名的差异化登录跳转
核心修改点
要实现Manager和Staff登录后跳转到不同页面,只需调整3处逻辑:
- 修正已登录状态的跳转判断:页面顶部的已登录校验逻辑,要根据当前用户身份跳转对应页面
- 保留用户信息查询逻辑:从数据库获取用户名(若有
role字段也可改用角色判断,更灵活) - 新增登录成功后的跳转分支:密码验证通过后,根据用户名选择跳转目标页面
修改后的完整代码
<?php // 初始化会话 session_start(); // 校验用户是否已登录,已登录则跳转对应页面 if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){ if($_SESSION["username"] === 'Manager'){ header("location: manager_dashboard.php"); } elseif($_SESSION["username"] === 'Staff'){ header("location: staff_dashboard.php"); } else { // 其他用户默认跳转页面(可根据需求调整) header("location: welcome.php"); } exit; } // 引入配置文件 require_once "config.php"; // 定义变量并初始化 $username = $password = ""; $username_err = $password_err = $login_err = ""; // 处理表单提交 if($_SERVER["REQUEST_METHOD"] == "POST"){ // 校验用户名是否为空 if(empty(trim($_POST["username"]))){ $username_err = "请输入用户名。"; } else{ $username = trim($_POST["username"]); } // 校验密码是否为空 if(empty(trim($_POST["password"]))){ $password_err = "请输入密码。"; } else{ $password = trim($_POST["password"]); } // 验证凭证 if(empty($username_err) && empty($password_err)){ // 准备查询语句(若有role字段可改为SELECT id, username, password, role FROM users...) $sql = "SELECT id, username, password FROM users WHERE username = ?"; if($stmt = mysqli_prepare($link, $sql)){ // 绑定参数 mysqli_stmt_bind_param($stmt, "s", $param_username); // 设置参数 $param_username = $username; // 执行查询 if(mysqli_stmt_execute($stmt)){ // 存储结果 mysqli_stmt_store_result($stmt); // 校验用户名是否存在 if(mysqli_stmt_num_rows($stmt) == 1){ // 绑定结果变量 mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password); if(mysqli_stmt_fetch($stmt)){ // 验证密码 if(password_verify($password, $hashed_password)){ // 密码正确,初始化会话 session_start(); // 存储用户信息到会话 $_SESSION["loggedin"] = true; $_SESSION["id"] = $id; $_SESSION["username"] = $username; // 根据用户名跳转对应页面 if($username === 'Manager'){ header("location: manager_dashboard.php"); } elseif($username === 'Staff'){ header("location: staff_dashboard.php"); } else { header("location: welcome.php"); } exit; } else{ // 密码错误提示 $login_err = "用户名或密码错误。"; } } } else{ // 用户名不存在提示 $login_err = "用户名或密码错误。"; } } else{ echo "哎呀!出了点问题,请稍后再试。"; } // 关闭语句 mysqli_stmt_close($stmt); } } // 关闭连接 mysqli_close($link); } ?> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>登录</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <br><br><br> <header><center> <img src = "logo.png" height = "100" width = "180"></center></header> <div class="container"> <div class="row justify-content-center"> <div class="col-md-6"> <div class="card mt-5"> <div class="card-header" style="background-color: #3fbbc0;"> <h4>登录</h4> </div> <div class="card-body"> <?php if(!empty($login_err)){ echo '<div class="alert alert-danger">' . $login_err . '</div>'; } ?> <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post"> <div class="col-md-12"> <label>用户名</label> <input type="text" name="username" class="form-control <?php echo (!empty($username_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $username; ?>"> <span class="invalid-feedback"><?php echo $username_err; ?></span> </div> <div class="col-md-4"> <label></label> </div> <div class="col-md-12"> <label>密码</label> <input type="password" name="password" class="form-control <?php echo (!empty($password_err)) ? 'is-invalid' : ''; ?>"> <span class="invalid-feedback"><?php echo $password_err; ?></span> </div> <div class="col-md-4"> <label></label> <label></label> </div> <div class="form-group"> <center> <input type="submit" style="background-color: #3fbbc0;" value="登录"> </div> </form> </div> </body> </html>
补充提示
- 若你的用户表有
role字段(如manager/staff),建议将SQL查询改为SELECT id, username, password, role FROM users WHERE username = ?,绑定$role变量后用角色判断跳转,比固定用户名更灵活。 - 请确保
manager_dashboard.php和staff_dashboard.php已创建,或替换为你实际的页面路径。
内容的提问来源于stack exchange,提问作者Umar
相关产品推荐
相关产品推荐

