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

PHP注册页面提交后显示空白无错误信息问题求助

问题根因

提交后白屏是几个低级代码错误叠加导致的,具体点如下:

  • 数据库连接引入被注释:signup.inc.php里require_once 'dbh.inc.php';行被注释,后续uidExists()校验需要用到的$conn数据库连接对象根本不存在,PHP触发致命错误,而当前环境默认关闭前端错误回显,直接表现为空白页。
  • 入库逻辑被注释:所有校验通过后要执行的createUser()创建用户函数也被注释,就算前面校验全部通过,脚本执行完所有分支后既没有跳转也没有输出内容,同样会显示空白。
  • 错误分支覆盖不全:注册页的前端提示逻辑没有处理usernametaken(用户名/邮箱已被注册)的场景,就算走到这个校验分支跳转回注册页,也看不到任何提示。
  • 潜在文件解析问题:贴出的dbh.inc.php代码开头没有<?php起始标记,如果实际文件确实漏写,PHP不会解析文件内的代码,会直接把代码当普通文本输出,同时也不会创建$conn连接对象触发错误。
  • 额外安全隐患:当前逻辑没有对用户输入做防注入处理,密码也明文存储,上线后会有严重安全问题。
修复步骤
  1. 取消signup.inc.php中两行注释,恢复数据库连接引入和用户创建逻辑,修改后对应代码段如下:
// 注意这行不要注释,且要放在functions.inc.php引入之前
require_once 'dbh.inc.php';
require_once 'functions.inc.php';

// ...中间的校验逻辑保持不变...

// 所有校验通过后,这行也不要注释
createUser($conn, $name, $email, $username, $pwd);
// 创建成功后加跳转,避免空白
header("location: ../signup.php?error=none");
exit();
  1. 检查dbh.inc.php文件,确保第一行是<?php起始标记,不要漏写,否则PHP不会执行文件内的连接逻辑。
  2. 补全注册页的提示分支,在现有错误提示代码里加两段,覆盖用户名已占用和注册成功的场景:
<?php
if (isset($_GET["error"])) {
    if ($_GET["error"] == "emptyinput") {
        echo "<p class='psyel'>Fill in all fields!</p>";
    }
    else if ($_GET["error"] == "invaliduid") {
        echo "<p class='psyel'>Choose a propper username!</p>";
    }
    else if ($_GET["error"] == "invalidemail") {
        echo "<p class='psyel'>Choose a propper email!</p>";
    }
    else if ($_GET["error"] == "passwordsdontmatch") {
        echo "<p class='psyel'>Passwords do not match!</p>";
    }
    // 新增:用户名已存在提示
    else if ($_GET["error"] == "usernametaken") {
        echo "<p class='psyel'>Username or email has already been registered!</p>";
    }
    // 新增:注册成功提示
    else if ($_GET["error"] == "none") {
        echo "<p class='psgreen'>Sign up successfully!</p>";
    }
}
?>
  1. 开发阶段建议开启PHP错误显示,方便快速定位白屏问题,在signup.inc.php最开头加以下两行(正式上线前记得删除):
ini_set('display_errors', 1);
error_reporting(E_ALL);
  1. 安全加固(必做,避免被攻击):
    • 所有数据库操作改用mysqli预处理语句或者PDO预处理,不要直接拼接用户输入到SQL语句中,防范SQL注入
    • 存入数据库前用$pwdHash = password_hash($pwd, PASSWORD_DEFAULT);对密码做哈希处理,数据库里只存哈希后的密码,绝对不要明文存储密码,登录时用password_verify()校验密码即可。
白屏问题通用排查思路
  • 开发环境默认开启错误显示,90%以上的白屏都是PHP致命错误导致,开了错误提示会直接显示报错位置和原因,不用盲猜
  • 检查文件引入路径是否正确,路径写错导致文件找不到会直接触发致命错误
  • 检查用到的变量、函数是否提前定义/引入,比如本次问题里的$conn因为没引入连接文件根本不存在,传参时直接报错
  • 确保所有逻辑分支最后都有对应输出或者跳转,不要让脚本执行完后没有任何返回内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:57:23