2017-09-23 3 views
-2

지금까지 로그인 시스템이 정상적으로 작동합니다. 올바른 사용자 이름과 암호를 입력 할 수 있지만 로그인 할 수는 있지만 그 반대는 아닙니다. 올바르게 작동하지 않는 유일한 방법은 상태 확인입니다. 사용자가 '0'상태 인 경우 로그인하지 않아야합니다. 그래서 나는 그 상태를 인쇄하려고 시도했지만 아무 것도 보여주지 못했습니다. 그렇다면 나는 password_hash와 똑같은 결과를 얻었습니다. (이것은 password_verify()가 아무런 문제가 없기 때문에 이상합니다). 사용자가 입력 한 암호가 인쇄되므로 mysqli_result가되어야합니다. 어떤 도움이 필요합니까?msqli_result를 인쇄 할 수 없습니다.

include_once($_SERVER['DOCUMENT_ROOT'] . "/php_scripts/db_conx.php"); 

function CheckLogin($username, $password, $db_conx){ 
    time_nanosleep(0, 100000000); 
    $userQuery = $db_conx->prepare("SELECT * FROM users WHERE username = ?"); 
    $userQuery->bind_param('s', $username); 
    $userQuery->execute(); 
    $userResult = $userQuery->get_result(); 

    if($userResult->num_rows == 1){ 
     $password_hash = $userResult->fetch_assoc()['password']; 

     $status = mysqli_fetch_assoc($userResult)['status'];  // $status turns out null 
     echo($status);            // Prints nothing 
     printf("%s\n", $userResult->fetch_assoc()['password']);  // Prints nothing 
     print_r($userResult->fetch_assoc());      // Prints nothing 

     print($password);           //Prints the password correctly 

     if(password_verify($password, $password_hash) && $status != '0'){ 
      //password_verify() works like a charm 
      //Status check is the only thing that does not work 
      return true; 
     } else{ 
      return false; 
     } 

    } 
    return false; 
} 

사용자의 상태는 '0'이므로 로그인하면 안됩니다.

답변

1

커서 위치는 4 개이지만 한 행만 표시됩니다. fetch을 한 번만 사용하고 할당하십시오.

$row = $userResult->fetch_assoc(); 

변수를 할당 할 수 있습니다.

$password_hash = $row['password']; 
$status = $row['status']; 

액세스 할 수 있습니다.

SELECT * FROM users WHERE username = ? and status <> 0 

또는

SELECT * FROM users WHERE username = ? and status = 1 
+0

귀하의 조언이 근무하고 지금 내 로그인 스크립트가 마법처럼 작동합니다

은 또한 단지 쿼리의 상태를 확인할 수 있습니다. 고맙습니다. –

관련 문제