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

WAMP环境下PHP登录表单提交后始终显示空白页问题

解决WAMP环境下登录表单提交后空白的问题

核心问题分析

提交后页面空白通常是PHP错误导致,结合你的代码来看,主要有以下几个致命问题:

  • session_start()位置错误:必须放在所有输出(包括echo、HTML标签)之前,否则会触发"Headers already sent"错误,直接中断脚本执行
  • 提前调用未定义变量:代码开头直接echo未初始化的$name和$email,触发未定义变量错误
  • 文件命名不匹配:HTML表单文件名为html.php,但登录逻辑里跳转的是index.php,文件不匹配会导致跳转异常
  • WAMP默认关闭错误输出:无法直观看到PHP报错信息,导致问题定位困难

修复步骤

1. 临时开启PHP错误显示(调试用)

在login.php最顶部添加以下代码,强制显示所有错误:

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

2. 修正login.php核心代码

调整session_start()位置,删除无效的提前echo,统一跳转目标文件名:

<?php
// 调试用错误输出(上线后删除)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

session_start(); // 必须放在所有输出之前
include "db_conn.php";

if (isset($_POST['uname']) && isset($_POST['password'])) {
    
    function validate($data){
       $data = trim($data);
       $data = stripslashes($data);
       $data = htmlspecialchars($data);
       return $data;
    }

    $uname = validate($_POST['uname']);
    $pass = validate($_POST['password']);

    // 调试用:输出POST参数,确认数据是否接收成功
    echo "用户名: " . $uname . "<br>";
    echo "密码: " . $pass . "<br>";

    if (empty($uname)) {
        header("Location: html.php?error=用户名不能为空");
        exit();
    }else if(empty($pass)){
        header("Location: html.php?error=密码不能为空");
        exit();
    }else{
        // 注意:当前SQL写法存在注入风险,建议后续替换为预处理语句
        $sql = "SELECT * FROM users WHERE user_name='$uname' AND password='$pass'";
        $result = mysqli_query($conn, $sql);

        if (!$result) {
            echo "数据库查询错误: " . mysqli_error($conn);
            exit();
        }

        if (mysqli_num_rows($result) === 1) {
            $row = mysqli_fetch_assoc($result);
            if ($row['user_name'] === $uname && $row['password'] === $pass) {
                $_SESSION['user_name'] = $row['user_name'];
                $_SESSION['name'] = $row['name'];
                $_SESSION['id'] = $row['id'];
                header("Location: home.php"); // 确保home.php文件存在
                exit();
            }else{
                header("Location: html.php?error=用户名或密码错误");
                exit();
            }
        }else{
            header("Location: html.php?error=用户名或密码错误");
            exit();
        }
    }
}else{
    header("Location: html.php");
    exit();
}

3. 统一文件命名

将HTML文件重命名为index.php,或者保持html.php不变,确保所有跳转路径与实际文件名一致。

4. 检查数据库连接文件

确保db_conn.php中的数据库配置正确,示例如下:

<?php
$conn = mysqli_connect('localhost', 'root', '你的数据库密码', '数据库名称');
if (!$conn) {
    die("数据库连接失败: " . mysqli_connect_error());
}

额外优化建议

  • 防范SQL注入:替换直接拼接SQL的写法,使用MySQLi预处理语句:
    $sql = "SELECT * FROM users WHERE user_name=? AND password=?";
    $stmt = mysqli_prepare($conn, $sql);
    mysqli_stmt_bind_param($stmt, "ss", $uname, $pass);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    
  • 密码安全存储:不要明文存储密码,使用password_hash()加密,password_verify()验证用户输入的密码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:42:01