我刚刚开始使用 php,但我不太擅长。我需要在用户的密码和用户名通过后验证我想与该用户 user_id 启动 session 。但每次我尝试回显 user_id 时,我什么也没得到。希望有人能帮助我解决这个问题。是我的代码:
<?php
require_once "config.php";
$username = $_POST['username'];
$password = $_POST['password'];
$hash = password_hash($password, PASSWORD_DEFAULT);
if (strlen($username) > 0 && strlen($hash) > 0){
$query = "SELECT user_id FROM keep_user WHERE username = '$username' AND password = '$hash'";
$result = mysqli_query($conn , $query);
if($conn->query($query) == TRUE){
if(password_verify($password, $hash)){
session_start();
$_SESSION['user_id'] = $user_id;
echo $user_id;
echo "succes";
}else{
echo "error-1".$conn->error;
}
}else{
echo "error-2".$conn->error;
exit;
}
}else{
echo "error".$conn->error;
exit;
}
?>
它确实回显成功,所以我猜这部分很好,但为什么无法检索 user_id?
最佳答案
问题不在于 password_verify
函数。问题出在 mysqli_query
上,因为您执行查询两次
$result = mysqli_query($conn , $query);// first time
if($conn->query($query) == TRUE){// second time
只需注释或删除$result = mysqli_query($conn , $query);//第一次
要获取用户 ID
表单查询,您需要将其获取为
if ($result = $conn->query($query)) {
/* fetch associative array */
$row = $result->fetch_assoc() ;
$user_id=$row["user_id"];
$_SESSION['user_id'] = $user_id;
}
以及页面顶部的 session_start();
。
您的脚本已打开以进行sql注入(inject)阅读How can I prevent SQL injection in PHP?为了防止它
关于php - 无法接收带有密码验证的 mysqli 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36838421/