已注册账号无法访问index.php?登录跳转异常问题求助
问题排查与修复
你的问题核心是login_db.php里的变量名不匹配,导致验证逻辑失败,无法触发页面跳转:
你从POST请求中获取的密码存在$passwords变量里,但检查密码是否为空时,错误使用了未定义的$password变量。这会直接将"Password is required"加入错误数组,导致后续跳转逻辑完全不执行,最终停留在空白的login_db.php页面。
修复后的login_db.php代码
<?php session_start(); include('server.php'); $errors = array(); if (isset($_POST['login_user'])) { $username = mysqli_real_escape_string($conn, $_POST['username']); $passwords = mysqli_real_escape_string($conn, $_POST['password_1']); if (empty($username)) { array_push($errors, "Username is required"); } // 修正变量名,与上方定义的$passwords保持一致 if (empty($passwords)) { array_push($errors, "Password is required"); } if (count($errors) == 0) { $password = md5($passwords); $query = "SELECT * FROM user WHERE username = '$username' AND password = '$password' "; $result = mysqli_query($conn, $query); if (mysqli_num_rows($result) == 1) { $_SESSION['username'] = $username; $_SESSION['success'] = "You are now logged in"; header("location: index.php"); // 必须添加exit阻止后续代码执行,避免跳转失效 exit(); } else { array_push($errors, "Wrong username/password combination"); $_SESSION['error'] = "Wrong username or password try again!"; header("location: login.php"); exit(); } } else { // 有验证错误时,统一跳回登录页并携带错误信息 $_SESSION['error'] = implode(" ", $errors); header("location: login.php"); exit(); } } ?>
额外优化建议
- 每次调用
header("location: ...")后必须加exit()或die(),防止后续代码执行干扰跳转行为。 - MD5属于不安全的哈希算法,生产环境建议改用
password_hash()存储密码、password_verify()验证密码。 - 开发阶段可以开启PHP错误提示:
error_reporting(E_ALL); ini_set('display_errors', 1);,能快速定位未定义变量这类低级错误。
内容的提问来源于stack exchange,提问作者moomin
相关产品推荐
相关产品推荐

