2011-02-11 92 views
0

此代碼的工作在我的電腦上,但是當我在我的虛擬主機的服務器上運行它,它沒有。輸出是「密碼不正確或電子郵件」,即使我使用的是正確的密碼。我想我現在已經把密碼錯誤,但這些代碼不會輸出$ R [「電子郵件」]或$ R [「passwordHash」],在while循環的頂部。如果我在$ sql上使用mysql_result,那麼我會得到數據,所以mysql_fetch_array必須發生一些奇怪的事情。我在這裏錯過了些什麼,或者這更可能是我應該與我的主持人的支持人員解決的一個獨特問題?mysql_fetch_array不工作

$query = "SELECT * FROM users WHERE user='$email'"; 
$sql = mysql_query($query); 
    while($r = mysql_fetch_array($sql)) { 
     echo $r['email']; 
     echo $r['passwordhash']; 

     if($passwordHash == $r['passwordhash']) { 

      $_SESSION['user_id'] = $email; 
      echo "started session"; 
     } 
     else { 
      echo "Incorrect password or email"; 
     }  
    } 
+3

'$ passwordHash`是什麼? – BoltClock 2011-02-11 16:53:50

回答

0

要真正快速檢查的一件事是您的計算機上的PHP和MySQL版本與Web服務器。你如何處理哈希,因爲這也可能導致問題。

你在做類似於下面的東西?

$password = md5($password); 

如果是這樣,你是否在Web服務器端正確轉換?

$password = $_POST['password']; 
$passwordHash = md5($password); 
unset($password); 

$query = "SELECT * FROM users WHERE user='$email'"; 
$sql = mysql_query($query); 
    while($r = mysql_fetch_array($sql)) { 
     echo $r['email']; 
     echo $r['passwordhash']; 

     if($passwordHash == $r['passwordhash']) { 

      $_SESSION['user_id'] = $email; 
      echo "started session"; 
     } 
     else { 
      echo "Incorrect password or email"; 
     }  
    } 
1

使用$sql = mysql_query($query) or die (mysql_error())來檢查查詢是否有問題。

另外,你可以試試mysql_fetch_assoc(因爲我看到你最喜歡使用關聯數組),以排除mysql_fetch_array可能的錯誤(我懷疑你可以試試看)。

而且檢查$email不是空的。如果它通過消毒傳遞給函數(因爲它應該有被放到查詢之前),看看有沒有什麼功能實際上已經返回的值或空或空字符串。

而且,順便說一句,你爲什麼使用while循環?您是否應該使用相同的電子郵件地址獲取多個記錄(和密碼)?