PHP登录表单提交后跳转至数据库连接页而非index2.php问题排查
PHP登录表单提交后意外跳转至db_connect.php问题排查
核心跳转问题排查优先级
- 第一优先级检查登录表单的
action属性配置
这是该类问题最高发的原因:你编写的登录表单<form>标签的action属性值误填为db_connect.php的访问路径,而非存放上述登录校验逻辑的PHP文件路径。表单提交时会直接将请求发送至action指定的地址,根本不会执行你写的账号校验、登录成功跳转index2.php的逻辑,提交后自然会停留在db_connect.php页面。
修正方式:将form的action属性指向存放登录处理逻辑的文件路径,若表单和登录处理逻辑在同一文件,可将action设为空字符串或<?php echo $_SERVER['PHP_SELF'];?>,禁止将被引入的依赖文件(如db_connect.php)设为表单提交地址。 - 第二优先级检查db_connect.php文件逻辑
若确认表单action配置正确,打开db_connect.php排查两类问题:- 文件内是否存在主动跳转、输出后终止执行的逻辑:比如编写了
header()跳转、连接数据库失败就直接die("连接失败")/exit()的代码,一旦数据库配置错误导致连接失败,脚本会在引入db_connect.php时直接终止运行,表现为停留在db_connect.php的输出页面。 - 文件内是否存在多余的可输出内容:比如文件末尾
?>后面带了多余的空格、HTML内容,可能导致后续登录逻辑的header跳转失效。正常的数据库连接文件仅需要保留连接初始化、返回连接对象$conn的逻辑,不要放任何业务逻辑、输出、跳转语句。
- 文件内是否存在主动跳转、输出后终止执行的逻辑:比如编写了
现有登录代码的待修复问题
你贴出的登录处理逻辑还存在几个会影响功能正常运行、有安全隐患的问题,需要同步修正:
- Session赋值语句无效:代码中
$_SESSION['user_lister_id'];是无意义的空语句,没有实际把登录用户的标识存入Session,后续页面无法识别登录态。需要改成对应赋值逻辑,比如$_SESSION['user_lister_id'] = $user_data['id'];,其中id替换为你users_listers表的用户主键字段实际名称。 - 存在SQL注入风险:当前代码直接把前端传入的邮箱参数拼接进SQL语句,攻击者可以构造恶意参数注入非法SQL,拖库甚至篡改数据库数据。建议改用预处理语句实现查询,参考代码:
// 替换原有的直接拼接SQL的查询逻辑 $stmt = mysqli_prepare($conn, "SELECT * FROM users_listers WHERE email = ? LIMIT 1"); mysqli_stmt_bind_param($stmt, "s", $email); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt);
- 明文密码校验存在安全隐患:当前逻辑直接拿用户传入的明文密码和数据库存储的明文密码做比对,一旦数据库泄露所有用户密码会直接暴露。注册时需要用
password_hash()对密码做哈希后存储,登录时改用password_verify($password, $user_data['password'])做哈希校验,禁止明文存储密码。 - 注意跳转前不能有任何输出:调用
header("Location: ../index2.php")前,不能有任何echo输出、HTML输出、文件开头/末尾的多余空格输出,否则会导致header函数报错,跳转失效。
内容的提问来源于stack exchange,提问作者user18106064
相关产品推荐
相关产品推荐

