2014-01-20 56 views
-1

我正在使用MVC編程項目的登錄系​​統,並遇到此錯誤。這裏是代碼,問題行是#31嚴格的標準:只有變量應通過引用傳遞m_auth

這個登錄系統是一個教程,我一直在按照原樣進行。我讀過PHP 5有一些版本問題?不知道,希望有人能幫助我。

問題行:

$stmt->bind_param("ss", $user, md5($pass . $this->salt)); 

代碼:

<?php 

/* 
    Authorization Class 
    deal with auth tasks 
*/ 

class Auth 
{ 
private $salt = 'j4H9?s0d'; 

/* 
    Constructor 
*/ 
function __construct() 
{ 
} 

/* 
    Functions 

*/ 
function validateLogin($user, $pass) 
{ 
    // access db 
    global $Database; 

    // create query 
    if ($stmt = $Database->prepare("SELECT * FROM users WHERE username = ? AND password = ?")) 
    { 
     $stmt->bind_param("ss", $user, md5($pass . $this->salt)); 
     $stmt->execute; 
     $stmt->store_result(); 

     // check for num rows 
     if ($stmt->num_rows > 0) 
     { 
      // success 
      $stmt->close(); 
      return TRUE; 
     } 
     else 
     { 
      // failure 
      $stmt->close(); 
      return FALSE; 
     } 
    } 
    else 
    { 
     die("ERROR: Could not prepare MySQLi statement."); 
    } 
} 

function checkLoginStatus() 
{ 
    if (isset($_SESSION['loggedin'])) 
    { 
     return TRUE; 
    } 
    else 
    { 
     return FALSE; 
    } 
} 

function logout() 
{ 
    session_destroy(); 
    session_start(); 
} 
} 
+2

[嚴格標準:只有變量應通過引用傳遞]的可能重複(http://stackoverflow.com/questions/2354609/strict-standards-only-variables-should-be-passed-by-reference) – Oswald

+0

請勿將MD5用於哈希密碼。對於PHP 5.5+,[密碼API](http://uk.php.net/manual/en/book.password.php),如果這不是一個選項,你可以使用'crypt()'與blowfish算法作爲一個後備。另外,**不要使用全局變量**來傳播數據庫連接。相反,你應該使用這樣的東西:http://stackoverflow.com/a/11369679/727208(可以很容易地加入與MySQLi協同工作)。如果你的代碼來自一些教程 - 儘快找到一個不同的教程。 –

回答

1

bind_param的PARAMS是變量的引用。那裏不能使用md5()。您需要先將其保存到變量中。

$userPass = md5($pass . $this->salt); 
$stmt->bind_param("ss", $user, $userPass); 
0

的問題是,第三個參數是一個函數調用的結果:

md5($pass . $this->salt)

您需要保存該值到變量它傳遞給bind_param,以便它可以是前通過參考傳遞。

實施例:

$password = md5($pass . $this->salt); 
$stmt->bind_param("ss", $user, $password); 

此外,don't use md5 to hash passwords

0

添加括號:

$stmt->bind_param("ss", $user, (md5($pass . $this->salt))); 
相關問題