2012-08-27 242 views
-1

你好,我目前有這個代碼的問題,我不確定把我的其他地方。 錯誤是這樣的:登錄驗證

mysql_num_rows() expects parameter 1 to be resource, boolean given in 

這是我的代碼:

if ($_POST['submit']) 
{   

      $username = $_POST['id']; 
      $password = $_POST['pass']; 
      //connect to the database here 
      $username = mysql_real_escape_string($username); 
      $query = "SELECT hashpass, salt 
        FROM users 
        WHERE username = '$username'"; 
      $result = mysql_query($query); 
      if(mysql_num_rows($result) < 1) //no such user exists 
      { 
       echo "NO USER!"; 
      } 
      $userData = mysql_fetch_array($result, MYSQL_ASSOC); 
      $hash = sha1 ($userData['salt'] . $password); 
      if($hash != $userData['password']) //incorrect password 
      { 
       echo "WRONG PASS"; 
      } 
      } 

希望得到任何幫助。

+0

還有什麼?我認爲問題在於不兼容的返回類型。 –

+0

你在phpmyadmin中運行了你的$ query嗎?並且您沒有在sql查詢中選擇密碼,但是在比較密碼時使用了密碼。 – WatsMyName

+1

您的查詢可能會返回一個錯誤,並且'mysql_ *'函數已被棄用,請考慮遷移到** mysli _ **或** PDO **。 – complex857

回答

0

在我類似的腳本,我先檢查$結果,確保查詢是好的...我還假設每個用戶只有一條線!

$result = mysql_query($query); 

if ($result) 
{ 
    if(mysql_num_rows($result) == 1) 
    { 
    // user exists... check password 
    } 
    else 
    { 
    //no such user exists 
    echo "NO USER!"; 
    } 
} 
else 
{ 
    // Query failed - no such user 
} 

此外,以防萬一片段是適用於你的代碼,我只包括一旦你驗證了該用戶名的密碼檢查!

0

mysql_num_rows函數返回記錄集中的行數。

int mysql_num_rows (resource $result) 

mysql_query函數對MySQL數據庫執行查詢。該函數返回SELECT查詢的查詢句柄,其他查詢返回TRUE/FALSE,失敗時返回FALSE。

所以你的情況,你應該做這樣的

<?php 

$link = mysql_connect("localhost", "mysql_user", "mysql_password"); 

$query = "SELECT hashpass, salt 
        FROM users 
        WHERE username = '$username'"; 

$result = mysql_query($query); 

mysql_select_db("database", $link); 

$result = mysql_query($query, $link); 
$num_rows = mysql_num_rows($result); 

if($num_rows < 1) //no such user exists 
{ 
    echo "NO USER!"; 
} 

?>