PHP登录表单提交后提示无效用户名密码问题排查求助
登录报“Invalid Username or Password”排查方案
你可以按以下优先级逐一排查问题:
- 字段匹配错误:你表单的输入标签标注为
Username,但代码中实际拿着用户输入的内容去匹配数据库leagueadmin表的email字段,如果你数据库email字段存储的是邮箱,而用户输入的是自定义用户名,必然会查询失败。
修复方案:要么将表单中<label for="username">Username:</label>修改为<label for="username">邮箱:</label>,要么将SQL查询语句中的查询字段替换为你表中存储用户名的对应字段,例如改为:$sql = "SELECT id FROM leagueadmin WHERE username='$username' and password = '$hashedPassword'"; - 数据库密码存储规则不匹配:你代码中用
sha256算法加密用户输入的密码和数据库对比,请确认你往leagueadmin表插入账号数据时,密码也是用sha256加密后存储的,没有额外加盐、没有使用其他加密算法(例如md5)、也没有直接存储明文。
测试方法:你可以直接在数据库执行SQL插入一条测试数据,再用对应账号登录测试:
插入后用账号INSERT INTO leagueadmin (email, password) VALUES ('test@test.com', SHA2('test123', 256));test@test.com、密码test123尝试登录即可验证是不是原有账号数据的问题。 - 数据库字段长度不足:
sha256生成的哈希值固定为64位,如果你的leagueadmin表的password字段长度小于64,存储哈希值时会被截断,导致对比失败,可修改字段长度为至少64位。 - SQL执行错误排查:你可以在执行SQL的代码后增加调试代码,查看执行的SQL语句、查询结果是否符合预期:
如果输出中有SQL报错,可根据报错信息调整数据库连接、表名字段名拼写等问题。$rs = $dbConn->query($sql); // 新增调试代码,提交表单后会输出对应信息,排查完可以删掉 var_dump($sql, $dbConn->error, $rs->num_rows); exit;
额外优化建议
你当前的SQL拼接写法存在SQL注入风险,建议改为预处理语句查询,示例如下:
$stmt = $dbConn->prepare("SELECT id FROM leagueadmin WHERE email=? AND password=?"); $stmt->bind_param("ss", $username, $hashedPassword); $stmt->execute(); $rs = $stmt->get_result();
内容的提问来源于stack exchange,提问作者supersentry04
相关产品推荐
相关产品推荐

