我刚开始使用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/

10-11 04:54
查看更多