2017-09-23 60 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個位置,但可能只有1個行。僅使用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

你的意見的工作,現在我的登錄腳本就像一個魅力。謝謝。 –