2016-05-10 30 views
1

選擇一個值,我努力學習的,所以請原諒我什麼應該是一個明顯的答案:從表中的MySQL

試圖對數據庫進行比較的密碼是「舊密碼」字段中,但它不是比較爲真,所以當我打印的密碼,我從數據庫獲取我得到:

Array ([0] => stdClass Object ([password] => 7ed5a78c36a55c07c26469345a00609b)) 

,而不是隻爲密碼的值,這將是希望我與用戶比較輸入舊密碼。

我有這樣的:

function edit_member($user_info, $old_pass) 
{ 
    $id_user = $this->session->userdata('id_user'); 
    $user_pass = $this->db->query("SELECT password FROM membros WHERE id_user='" . $id_user . "'")->result(); 
if (md5($old_pass) == $user_pass) { 
     $this->db->where('id_user', $id_user); 
     $this->db->update('membros', $user_info); 
     redirect('/cpanel'); 
    } else { 
     //redirect('/edit_account/edit'); 
     print_r("A password não coincide"); 
     echo anchor('/cpanel', 'Voltar'); 
+2

您存儲的密碼似乎是用md5加密的,所以它絕不會與您提供的密碼匹配。您需要使用md5加密提供的密碼,然後將此字符串與數據庫密碼字符串進行匹配。 –

+0

嘗試MD5($ old_pass)== $ user_pass [0] - >密碼 –

+0

@戈庫爾辛德 但是,這就是爲什麼我做的 「MD5($ old_pass)== $ user_pass」 $ old_pass是從用戶的輸入,其中$ user_pass是我從數據庫中檢索 - 不應該加密用戶輸入的值,然後將其與數據庫中的加密值進行比較? – Baya

回答

0

看來你正在使用的CodeIgniter您的應用程序。 CodeIgniter模型以對象或數組格式返回值或結果。所以爲了簡化你的代碼,你可以用下面的代碼更新你的代碼。

function edit_member($user_info, $old_pass) 
{ 
    $id_user = $this->session->userdata('id_user'); 
     $user_pass = $this->db->query("SELECT password FROM membros WHERE id_user='" . $id_user . "'")->row(); 
     if(isset($user_pass->password) && md5($old_pass) == $user_pass->password){ 
       $this->db->where('id_user', $id_user); 
       $this->db->update('membros', $user_info); 
       redirect('/cpanel'); 
     }else { 
      //redirect('/edit_account/edit'); 
       print_r("A password não coincide"); 
       echo anchor('/cpanel', 'Voltar'); 
     } 
}