我刚开始使用php,但我并不擅长它。我需要在用户通过后验证用户的密码和用户名,我想与该用户的用户id开始会话。但是每次我尝试回显用户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;
}
?>
它确实回音成功,所以我猜这部分是好的,但为什么不能检索用户id?
最佳答案
password_verify
函数没有问题。问题在于mysqli_query
因为您执行了两次查询
$result = mysqli_query($conn , $query);// first time
if($conn->query($query) == TRUE){// second time
只需注释或删除
$result = mysqli_query($conn , $query);// first time
要获取
user id
表单查询,您需要将其作为if ($result = $conn->query($query)) {
/* fetch associative array */
$row = $result->fetch_assoc() ;
$user_id=$row["user_id"];
$_SESSION['user_id'] = $user_id;
}
在你的页面顶部。
您的脚本是为sql注入打开的ReadHow can I prevent SQL injection in PHP?以防止它
关于php - 无法通过密码验证接收mysqli记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36838421/