我正在使用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();
}
}
[嚴格標準:只有變量應通過引用傳遞]的可能重複(http://stackoverflow.com/questions/2354609/strict-standards-only-variables-should-be-passed-by-reference) – Oswald
請勿將MD5用於哈希密碼。對於PHP 5.5+,[密碼API](http://uk.php.net/manual/en/book.password.php),如果這不是一個選項,你可以使用'crypt()'與blowfish算法作爲一個後備。另外,**不要使用全局變量**來傳播數據庫連接。相反,你應該使用這樣的東西:http://stackoverflow.com/a/11369679/727208(可以很容易地加入與MySQLi協同工作)。如果你的代碼來自一些教程 - 儘快找到一個不同的教程。 –