如何创建仅需密码的登录表单?解决登录时Invalid Password报错问题
解决仅密码登录时的"Invalid Password"问题
我懂你现在只是做概念验证,先不管安全问题,咱们先把这个登录逻辑跑通。你的代码里藏着一个关键问题:
你现在是用用户输入的明文密码直接去匹配数据库里的密码字段,但数据库里的密码应该是用password_hash()生成的哈希值啊!这种情况下你的查询语句根本找不到任何匹配的记录,$count会直接变成0,自然就触发错误提示了。
给你调整后的代码,换个逻辑实现仅密码登录:
<?php require_once 'dbconnect.php'; if (isset($_SESSION['userSession']) != "") { header("Location: home.php"); exit; } if (isset($_POST['btn-login'])) { $inputPassword = strip_tags($_POST['password']); $inputPassword = $DBcon->real_escape_string($inputPassword); // 先取出所有用户的ID和加密后的密码 $query = $DBcon->query("SELECT user_id, password FROM tbl_users"); $isLoginValid = false; $matchedUserId = null; // 逐个验证用户密码 while ($row = $query->fetch_array()) { if (password_verify($inputPassword, $row['password'])) { $isLoginValid = true; $matchedUserId = $row['user_id']; break; // 找到匹配项就停止循环 } } if ($isLoginValid) { $_SESSION['userSession'] = $matchedUserId; header("Location: home.php"); exit; // 跳转后立刻终止代码执行,避免后续逻辑干扰 } else { $msg = "<div class='alert alert-danger'> <span class='glyphicon glyphicon-info-sign'></span> Invalid Password ! </div>"; } $DBcon->close(); } ?>
简单说下调整点:
- 不再用明文密码去数据库里查匹配,而是先取出所有用户的密码哈希,再用
password_verify()逐个验证 - 找到匹配的密码后立刻跳出循环,减少不必要的计算
- 跳转页面后加上
exit,确保后续代码不会意外执行
还是提醒一句(毕竟你说忽略安全,但还是提一嘴):这种仅密码登录的逻辑在真实场景里风险极高,比如多个用户可能碰巧用了相同的密码,上面的代码会默认登录第一个匹配的用户,你可以根据自己的验证需求再调整。
内容的提问来源于stack exchange,提问作者user5371085
相关产品推荐
相关产品推荐

