2014-03-27 26 views
0

我無法從我自己創建的函數attempt_login()中獲得任何結果。任何人都可以找出任何錯誤或這段代碼有什麼問題?它僅適用於我在數據庫中創建的一個用戶。我想返回一個布爾值,之後要檢查結果是否爲真,然後將其存儲到會話中,然後將用戶重定向到特定頁面。請幫忙!
CODE:我的sql或php有什麼問題嗎? (無法登錄)

function attempt_login($theusername, $thepassword){ 
    $host = 'localhost'; 
    $username = 'root'; 
    $password = ''; 
    $database = 'website'; 
    $con = mysqli_connect($host, $username, $password, $database); 

    $theusername = mysqli_real_escape_string($con, $theusername); 
    $thepassword = mysqli_real_escape_string($con, $thepassword); 
    $thepassword = md5($thepassword); 

    $query = "SELECT * FROM members WHERE username = '{$theusername}' AND password = '{$thepassword}'"; 

    $result = mysqli_query($con, $query); 

    $row = mysqli_fetch_array($result); 

    return isset($row['name']); 

    mysqli_close($con); 
} 

截屏:enter image description here

+1

md5不是加密密碼的好方法。如果你有PHP 5.5查看'password_hash'函數。 – andrewtweber

+2

快速注意,'mysqli_close($ con);'永遠不會被達到,因爲它之前有一個無條件的'return'。 –

+0

'var_dump($ row)'並且看看給了你什麼。 –

回答

4

比方說,你的密碼是abc'123 - 你知道,字母,數字和符號的一個很好的組合。

mysqli_real_escape_string將轉換成abc\'123

md5然後使它af94b3b7388e50429710ed345b58c01c

但在數據庫中,密碼abc'123應該被加密爲bb7e1fc94ff2a3e8d2d79c8ab055da60,這是顯著不同!

嘗試移動md5致電之前mysqli_real_escape_string


編輯:你的第一個用戶的工作,因爲密碼是fishman001

第二,然而,這是空字符串。您可能正在使用if(empty($_POST['password']))或其他類似軟件查看是否提交了密碼。空字符串將會通過此測試。 PS:彩虹桌。愛他們。現在停止使用MD5。

+0

nope仍然不起作用! – user3459778

+0

儘管這仍然很重要,否則如果有人在他們的密碼中使用「',你將會遇到問題。 – James

+0

謝謝,但不是我正在尋找 – user3459778