PHP注册页面提交后显示空白无错误信息问题求助
问题根因
提交后白屏是几个低级代码错误叠加导致的,具体点如下:
- 数据库连接引入被注释:
signup.inc.php里require_once 'dbh.inc.php';行被注释,后续uidExists()校验需要用到的$conn数据库连接对象根本不存在,PHP触发致命错误,而当前环境默认关闭前端错误回显,直接表现为空白页。 - 入库逻辑被注释:所有校验通过后要执行的
createUser()创建用户函数也被注释,就算前面校验全部通过,脚本执行完所有分支后既没有跳转也没有输出内容,同样会显示空白。 - 错误分支覆盖不全:注册页的前端提示逻辑没有处理
usernametaken(用户名/邮箱已被注册)的场景,就算走到这个校验分支跳转回注册页,也看不到任何提示。 - 潜在文件解析问题:贴出的
dbh.inc.php代码开头没有<?php起始标记,如果实际文件确实漏写,PHP不会解析文件内的代码,会直接把代码当普通文本输出,同时也不会创建$conn连接对象触发错误。 - 额外安全隐患:当前逻辑没有对用户输入做防注入处理,密码也明文存储,上线后会有严重安全问题。
修复步骤
- 取消
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();
- 检查
dbh.inc.php文件,确保第一行是<?php起始标记,不要漏写,否则PHP不会执行文件内的连接逻辑。 - 补全注册页的提示分支,在现有错误提示代码里加两段,覆盖用户名已占用和注册成功的场景:
<?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>"; } } ?>
- 开发阶段建议开启PHP错误显示,方便快速定位白屏问题,在
signup.inc.php最开头加以下两行(正式上线前记得删除):
ini_set('display_errors', 1); error_reporting(E_ALL);
- 安全加固(必做,避免被攻击):
- 所有数据库操作改用mysqli预处理语句或者PDO预处理,不要直接拼接用户输入到SQL语句中,防范SQL注入
- 存入数据库前用
$pwdHash = password_hash($pwd, PASSWORD_DEFAULT);对密码做哈希处理,数据库里只存哈希后的密码,绝对不要明文存储密码,登录时用password_verify()校验密码即可。
白屏问题通用排查思路
- 开发环境默认开启错误显示,90%以上的白屏都是PHP致命错误导致,开了错误提示会直接显示报错位置和原因,不用盲猜
- 检查文件引入路径是否正确,路径写错导致文件找不到会直接触发致命错误
- 检查用到的变量、函数是否提前定义/引入,比如本次问题里的
$conn因为没引入连接文件根本不存在,传参时直接报错 - 确保所有逻辑分支最后都有对应输出或者跳转,不要让脚本执行完后没有任何返回内容
内容的提问来源于stack exchange,提问作者MTacoFTW
相关产品推荐
相关产品推荐

