PHP无加密简易登录脚本问题:重定向及空白页排查求助
排查PHP登录脚本跳转空白页的问题
嘿,作为PHP初学者遇到这种问题太正常了,咱们一步步来拆解排查,先解决最核心的问题:
1. 先开启错误提示,揪出空白页的根源
空白页大概率是脚本抛出了错误但没显示出来,你可以在脚本的**最顶部(任何输出之前)**加上这两行代码,这样就能看到具体的错误信息了:
error_reporting(E_ALL); ini_set('display_errors', 1);
这一步是关键,能帮你快速定位是MySQL操作出错,还是重定向逻辑有漏洞。
2. 检查重定向的核心逻辑
你提到已经修正了重定向逻辑,但要确认两个细节:
- 重定向前绝对不能有任何输出:包括HTML标签、空格,甚至文件开头的隐形BOM头(用记事本编辑PHP文件很容易出现)。
header("Location: 目标页面.php");必须在所有输出之前执行。 - 重定向后一定要终止脚本:在
header()后面加上exit;或者die();,不然脚本可能继续执行后续代码,导致页面空白。比如:
// 登录验证成功后 header("Location: dashboard.php"); exit; // 必须加这行,阻止脚本继续运行
3. 排查MySQL操作的常见坑
因为你对MySQL不熟悉,这部分很容易出问题,咱们重点检查这几点:
- 数据库连接是否成功:别忽略连接错误,比如用mysqli的话,要主动检查连接状态:
$conn = mysqli_connect("localhost", "你的用户名", "你的密码", "数据库名"); if (!$conn) { die("数据库连接失败: " . mysqli_connect_error()); }
- 查询语句是否匹配数据库字段:比如你之前修正过密码字段名,现在要确保SQL里的字段和数据库表中的字段完全一致(大小写也不能错)。另外尽量避免SQL注入,哪怕是简易脚本,也可以用转义处理:
// 假设表单提交的用户名是$_POST['username'],密码是$_POST['password'] $username = mysqli_real_escape_string($conn, $_POST['username']); $sql = "SELECT * FROM users WHERE username = '$username'"; $result = mysqli_query($conn, $sql); // 检查是否查询到有效用户 if (mysqli_num_rows($result) === 1) { $user = mysqli_fetch_assoc($result); // 因为你是无加密存储,直接比较密码(但强烈建议以后用哈希存储!) if ($_POST['password'] === $user['password']) { // 登录成功,启动会话(如果需要保持登录状态的话) session_start(); $_SESSION['username'] = $user['username']; // 执行重定向 header("Location: dashboard.php"); exit; } else { echo "密码错误"; } } else { echo "用户名不存在"; }
- 查看查询错误信息:如果查询没结果,可以用
echo mysqli_error($conn)打印出具体的SQL错误,帮你定位问题。
4. 额外提醒:无加密存储密码的风险
虽然你现在写的是简易脚本,但明文存储密码非常不安全,以后一定要用PHP内置的password_hash()和password_verify()来处理密码,比如:
// 注册时存储加密后的密码 $hashed_password = password_hash($_POST['password'], PASSWORD_DEFAULT); // 登录时验证密码 if (password_verify($_POST['password'], $user['password'])) { // 验证成功逻辑 }
按照上面的步骤排查,应该能找到空白页的问题。如果开启错误提示后看到具体的错误信息,也可以把错误内容贴出来,这样能更精准地帮你解决~
内容的提问来源于stack exchange,提问作者Simen Tyldum
相关产品推荐
相关产品推荐

