2012-11-07 57 views
0

我一直在試圖解決我自己,爲我的生活不能修復這個問題..mysqli_num_rows = 0時,它應該是1

//If they are, retreive them from the Person table  
var_dump($_POST['username']); 
var_dump($_POST['password']); 
$select = $this-> doQuery("SELECT * FROM Person WHERE username = '{$_POST['username']}' AND password = '".md5($_POST['password'])."'"); 
var_dump($select); 

try {  
    if (mysqli_num_rows($select) > 0){ 
     var_dump(mysqli_num_rows($select)); 
     //fetching username and password from database 
     $fetch_array = mysqli_fetch_assoc($select); 
     var_dump($fetch_array);  
     //Building a session for the user 
     $_SESSION['username'] = $fetch_array['username']; 

     //var_dump($_SESSION['username']); 

     //Redirecting the user to the index page   
     header('Location:index.php'); 
     return true; 
    } 

上的用戶名兩個var_dumps和4日和5日線密碼返回此:

string(8) "johnny03" 
string(9) "password3" 
object(mysqli_result)#3 (5) { ["current_field"]=> int(0) ["field_count"]=> int(8) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) } 

,我的用戶名和密碼都輸入的值都是有效的(他們是在正確的列下的數據庫,相信我)。我有一種感覺,我的select查詢出了問題,因爲mysqli_num_rows($ select)上的var轉儲沒有返回任何東西。所以說,我已經嘗試了幾乎所有可以考慮的查詢變化它的工作,但仍然沒有:[任何人都可以幫忙嗎?

+0

用戶名前綴和後綴大括號?這不是一個錯字? – Daneo

+1

''var_dump(md5($ _ POST ['password']));'產生與密碼列中的數據庫中相同的密碼?在這個查詢中,你也很容易受到sql注入的影響。 – drew010

+0

+1 to @ drew10。如果您確定用戶名是正確的,那麼必須驗證數據庫中密碼的加密 – janenz00

回答

1

第一:嘗試從查詢移除括號:

$select = $this-> doQuery("SELECT * FROM Person WHERE username = '{$_POST['username']}' AND password = '" . md5($_POST['password']) . "'"); 

編輯:牙套都還好,看評論的drew010。

如果這不是問題,因爲由drew010指出,檢查使用一個簡單的回聲你得到的散列(輸出它,並將它與你的數據庫。

如果這些似乎匹配,但有一塊丟失,那麼調整你的密碼字段的能力,你的數據庫。

您的密碼領域最有可能的大小例如VARCHAR(20),這是太小了整個哈希以適合。調整數據庫中的大小並存儲正確的散列結果

而且,至少可以看到一些將醃製,MD5已被打破,因爲現在雖然所以你應該由SHA-家族的哈希值替換它。

您可以通過使用online md5 hashing驗證數據庫中的散列以及通過使用strlen的

+0

變量的大括號可以,需要解析某些類型的變量。 [來源](http://php.net/manual/en/language.types.string.php#language.types.string.parsing)。 – drew010

+0

@ drew010從未使用過它們,所以不知道。歡呼 – Daneo

+0

@JoanneDeBiasa認爲將此標記爲回答,然後請:-)乾杯! – Daneo

0

試試這個測量得到它的長度:

var_dump("SELECT * FROM Person WHERE username = '{$_POST['username']}' AND password = '".md5($_POST['password'])."'"); 

將傾倒出來的查詢。任何明顯的錯誤,你應該能夠馬上挑出。如果查詢看起來不錯,請嘗試複製並將其粘貼到PHPMyAdmin(或類似的)中以測試查詢。如果它也返回零行,那麼用戶/通行證可能不匹配?

相關問題