2016-02-29 38 views
-4

我已經制作了一個註冊腳本md5,但現在我必須使用它登錄。我嘗試了很多東西,但沒有奏效。如何使用md5登錄PHP

這是我的代碼:

if(isset($_POST['sub'])) { 
include_once("Connect.php"); 
$username = mysqli_real_escape_string($dbcon,$_POST['username']); 
$password = mysqli_real_escape_string($dbcon,$_POST['password']); 
$password = md5($_POST['password']);//hashing pass 

$sql = "SELECT * FROM users WHERE userName = '{$username}' and userPassword = '{$password}'"; 

$query = mysqli_query($dbcon, $sql) or die(mysqli_error($dbcon)); 
$count = mysqli_num_rows($query); 

if ($count > 1) 
{ 

    $row = mysqli_fetch_row($query); 
    $userId = $row[0]; // takes id from DataBase 
    $dbUsername = $row[1]; // takes username from DataBase 
    $dbPassword = $row[2]; // takes userpass from DataBase 
    $_SESSION['password'] = $dbPassword; 
    $_SESSION['username'] = $dbUsername; 
    $_SESSION['id'] = intval($userId); 
    $_SESSION['login'] = TRUE; // if username and pass are corrects it logs in 
    header('location: login.php'); 
    die(); // using die() after header() 

} 
else { 
    echo "incorrect username or password."; 
} 
} 

感謝所有的意見。

解決方案:

$inlogcrypt = md5($password); 



$sql = "SELECT * FROM users WHERE userName = '".$username."' and userPassword = '".$inlogcrypt."'"; 
+3

**不要**散列密碼與MD5。使用PHP的密碼散列API。如果您還沒有PHP 5.5,那麼在GitHub上存在兼容性腳本。 –

+1

這是什麼意思,你嘗試了很多東西?那沒有用?你有什麼嘗試,什麼沒有工作? –

+0

代碼是正確的,如果在數據庫中的列'userPassword'它保存價值'md5' –

回答

1

如果你是新來的PHP,我不建議開始建立一個自定義的CMS。

要了解更多有關(不同類型的)認證,您可以:

  • 閱讀this guide關於與PHP/PDO基本身份驗證。
  • 使用PHPAuth
  • 使用OpenID因此您不必處理登錄數據。

第一個鏈接將告訴你如何

  1. 使用PDO,而不是MySQL的(我)。
  2. 過濾器提交的數據(雖然我承認他們以一種有點醜陋的方式做,但很容易理解)。
  3. 使用$SESSION來存儲會話數據。
  4. 使用相同的會話數據要求在某些頁面上進行身份驗證。

只要知道登錄信息包含敏感數據,並且在構建您希望人們使用的平臺之前還有很多東西需要學習。

我剛纔提到了一些關於登錄的問題,但是您還應該瞭解更多關於哈希(不要使用md5登錄,我推薦bcrypt)和程序結構。

+0

這是一個學校項目 –

+0

第一個指南解釋了所有的細節,讓你開始基本認證。 –

+0

感謝您的指導。但我們無法使用openID,它必須是我們數據庫中的註冊賬號。 –