2011-11-28 44 views
0

我使用下面的代碼進行登錄。我無法比較匹配的密碼客戶端和數據庫的登錄?

$sid = trim($_POST["id"]); 
$pcode = trim(md5($_POST["pcode"])); 
include_once "../conf.php"; 
$pdo = connect(); 
$sql_log = "select * from `manager` where `sid` = $sid limit 1"; 
$do_log = $pdo->prepare($sql_log); 
$do_log->execute(); 
$num_log = $do_log->rowCount(); 
if($do_log){ 
    if($num_log == 1){ 
     while($row_log = $do_log->fetch()){ 
      $pcode_db = $row_log["pcode"]; //md5 password 
     } 

      if(var_dump($pcode == $pcode_db)){ //or $pcode == $pcode_db, both return false 
       return true; 
      }else{ 
       return false; // i get false for any password} 
     } 
    } 
} 

我無法登錄到正確的密碼!我在數據庫中手動設置MD5密碼與phpMyAdmin

+4

首先閱讀這個 - > http://php.net/manual/en/security.database.sql-injection.php – ManseUK

+1

你是否在if條件中使用var_dump,你不能直接匹配它們嗎? var_dump爲變量var_dump($ pcode)== var_dump($ pcode_db) – sumi

+0

'md5($ _ POST [「pcode」],true)'給出了什麼? – idm

回答

1

我不知道爲什麼這個工作,但它。我使用phpMyAdmin(插入)手動設置了md5密碼(使用PHP執行md5)!

structure column pcode >>varchar(32) 

的MD5密碼有32個字符,但是當它從插入在phpMyAdmin設置,P碼列只包含31個字符。所以我使用了SQL在phpMyAdmin用於設置MD5密碼!

update `manager` set `pcode` = MD5("my password") where `sid` = 7283 

然後它被完全設置爲32個字符。有人能解釋爲什麼發生這種情況?

+0

這就是我所說的。 MySQL MD5與PHP MD5不同。你需要使用一個或另一個。如果您使用的是SQL和MD5,則會得到與使用PHP和MD5不同的結果。 – phpmeh

-1

我在數據庫中手動設置MD5密碼與phpMyAdmin

MySQL的MD5是不一樣的algoritham作爲PHP MD5。你需要使用一個或另一個。

+0

您正在使用您的PDO錯誤,從而失去了內置於PDO中的sql注入保護。請閱讀關於參數的文檔。 – phpmeh

+0

我使用php並在我的數據庫中設置md5。謝謝 – user1068953

-1

下面的代碼就像你的代碼,但很少更改sql查詢。

$sid = trim($_POST["id"]); 
$pcode = trim(md5($_POST["pcode"])); 
include_once "../conf.php"; 
$pdo = connect(); 
$sql_log = "select * from `manager` where `sid` = $sid and `pcode` = $pcode"; 
$do_log = $pdo->prepare($sql_log); 
$do_log->execute(); 

if($do_log){ // if incoming sid and pcod will match 
    return true; 
}else{ 
    return false; 
} 

我不知道如何使用connect()函數。另一種連接SQL的方式是這樣的:

$sid = trim($_POST["id"]); 
$pcode = trim(md5($_POST["pcode"])); 
include_once "../conf.php"; 

mysql_connect('server_name','user_name','password'); 
mysql_select_db('DB_name'); 
$query = mysql_query("select * from `manager` where `sid` = $sid and `pcode` = $pcode"); 
if(mysql_fetch_array($query)){ 
    return true; 
}else { 
    return false; 
    } 
+0

pcode不是我認爲的數字 –

+0

如果id和pcode有validate函數,沒關係。 –

+0

不幸的是,它的確如此 –

相關問題