php mysql bcrypt 和密码不匹配
php mysql bcrypt and password doesn't match
我无法安全地验证用户名和密码。在检查数据库中是否存在电子邮件地址后,我检查输入的密码是否与数据库中的密码匹配,但我的密码未验证。
这是我的user_login.php文件:
require_once "../include/Constants.php";
$conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if($_SERVER['REQUEST_METHOD']=='POST')
{
$username = $_POST['username'];
$password = $_POST['password'];
//filter this variable for security
$password = strip_tags(mysqli_real_escape_string($conn, trim($password)));
$query = "SELECT * FROM students WHERE s_id = '".$username."' ";
$tbl = mysqli_query($conn, $query);
if(mysqli_num_rows($tbl)>0)
{
//when email is matched it also need to verify the password
$row = mysqli_fetch_array($tbl);
$password_hash = $row['password'];
if(password_verify($password, $password_hash))
{
echo "success";
}
else
{
echo "failed login"."<br/>";
echo $password_hash."<br/>";
echo $password;
}
}
else
{
echo "email failed";
}
由于某种原因,密码和使用 bcrypt 加密的密码不匹配。我找不到我做错了什么。如果您对可能的解决方案有一些指示,请提供帮助。谢谢!
按照目前的情况,您需要将 mysqli_fetch_array()
更改为
mysqli_fetch_array($tbl, MYSQLI_ASSOC)
,因为仅此一项就获取了错误类型的数组。
没有特定的参数,它 (mysqli_fetch_array()
) 默认为 MYSQLI_BOTH
,是一个关联的数值数组。 PHP 可能一直在尝试访问错误的关联列。
我无法安全地验证用户名和密码。在检查数据库中是否存在电子邮件地址后,我检查输入的密码是否与数据库中的密码匹配,但我的密码未验证。
这是我的user_login.php文件:
require_once "../include/Constants.php";
$conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if($_SERVER['REQUEST_METHOD']=='POST')
{
$username = $_POST['username'];
$password = $_POST['password'];
//filter this variable for security
$password = strip_tags(mysqli_real_escape_string($conn, trim($password)));
$query = "SELECT * FROM students WHERE s_id = '".$username."' ";
$tbl = mysqli_query($conn, $query);
if(mysqli_num_rows($tbl)>0)
{
//when email is matched it also need to verify the password
$row = mysqli_fetch_array($tbl);
$password_hash = $row['password'];
if(password_verify($password, $password_hash))
{
echo "success";
}
else
{
echo "failed login"."<br/>";
echo $password_hash."<br/>";
echo $password;
}
}
else
{
echo "email failed";
}
由于某种原因,密码和使用 bcrypt 加密的密码不匹配。我找不到我做错了什么。如果您对可能的解决方案有一些指示,请提供帮助。谢谢!
按照目前的情况,您需要将 mysqli_fetch_array()
更改为
mysqli_fetch_array($tbl, MYSQLI_ASSOC)
,因为仅此一项就获取了错误类型的数组。
没有特定的参数,它 (mysqli_fetch_array()
) 默认为 MYSQLI_BOTH
,是一个关联的数值数组。 PHP 可能一直在尝试访问错误的关联列。