2013-02-28 4 views
2

학교 프로젝트의 로그인 시스템을 개발하려고하는데 버그가 발생하여 수정 방법을 모르겠습니다.데이터베이스에서 데이터를 얻지 못했습니다

내 데이터베이스에는 암호가 spy123이고 sha256 해시에 저장되어 있지만 PHP에서 가져 오려고하면 아무 것도 얻을 수 없습니다.

현재 코드 :

// checks if the user/password combination works. 
// $username | String - the username of the user to login 
// $password | 32byteHash - the hashed password of the user 
// return | Boolean - Returns true if the password works for that user. 
function forumLib_checkLogin($username, $password){ 
    $goodLogin = false; //Assume the password is wrong. 

    $obtainUserPassword_query = "SELECT password FROM forum_users WHERE username = '$username'"; 

    $dbc = forumLib_connectToDB(); 
    $results = mysqli_query($dbc, $obtainUserPassword_query); 
    forumLib_closeConnectionToDB($dbc); 

    echo "query: $obtainUserPassword_query <br />"; 
    echo "results: ".mysqli_fetch_array($results)."<br />"; 
    $row = mysqli_fetch_array($results); 
    echo "row[0]: ".$row[0]."<br />"; 
    echo "password: $password <br />"; 
    echo "DBpassword: $passwordOnDB <br />"; 

    //if user exists 
    if($results != false){ 
     //get password from DB 
     $row = mysqli_fetch_array($results); 
     $passwordOnDB = $row['password']; 

     //check password 
     if($password == $passwordOnDB){ 
      //successfull login 
      $goodLogin = false; 
     } 
    } 

    return $goodLogin; 
} 

출력 :

change password request detected 
query: SELECT password FROM forum_users WHERE username = 'SpyMaster356' 
results: Array 
row[0]: 
password: 7d9519224964c72a90b342c565fab1e4582d0e974043798f940b471304db0e24 
DBpassword: 
Current password does not match records. 

SQL 쿼리 내가 수동으로 입력 할 때 내가 다시 7d9519224964c72a90b342c565fab1e4582d0e974043798f940b471304db0e24를 얻을로하지 잘못된 것입니다.

이것은 정말 혼란 스럽습니다.

+0

echo 대신 print_r ($ row)을 사용하면 실제로 데이터베이스에서 가져온 내용을 볼 수 있습니다. 또한 mysqli_query()에 대한 호출의 리턴 값을 테스트하여 실패했는지 확인하십시오. – Cfreak

+0

mysqli_fetch_array를 실행할 때마다 결과 세트 내의 커서가 증가합니다. – hjpotter92

+0

또한 '7d9519224964c72a90b342c565fab1e4582d0e974043798f940b471304db0e24' 출력은 쿼리에 의해 생성되지 않습니다. 그것은 함수에 제공된'$ password'에 의해 생성됩니다. – hjpotter92

답변

4

처음으로 mysqli_fetch_array으로 전화하면 데이터의 첫 번째 행을 사용하게됩니다. 당신이 $row 변수로 캡처 할 때 그 후, 행이 이미 소비하고 저장되지 않았습니다 :

// Prints 'Array'. Did not save the result 
echo "results: ".mysqli_fetch_array($results)."<br />"; 

// Doesn't get anything because the row has been previously fetched 
$row = mysqli_fetch_array($results); 
+0

아, 그걸로 고쳐 줄 수 있는지 보자. –

+0

그랬다. 나는 진짜 문제가 무엇인지 알아 냈다. '// check password if ($ password == $ passwordOnDB) { // 성공한 로그인 $ goodLogin = false; // <--- 아니요. 그것은 사실이어야합니다. DOPE }' –

0

변경

echo "query: $obtainUserPassword_query <br />"; 
echo "results: ".mysqli_fetch_array($results)."<br />"; 
$row = mysqli_fetch_array($results); 
echo "row[0]: ".$row[0]."<br />"; 
echo "password: $password <br />"; 
echo "DBpassword: $passwordOnDB <br />"; 

먼저 $row 배열을 채울 수있는 follwing을 segement, 그리고 그것을 사용 또한 echo.

echo "query: $obtainUserPassword_query <br />"; 
$row = mysqli_fetch_array($results); 
echo "results: ". print_r($row) ."<br />"; 
echo "row[0]: ".$row[0]."<br />"; 
echo "password: $password <br />"; 
echo "DBpassword: {$row[0]} <br />"; 
관련 문제