2014-02-18 62 views
0

我開始學習PHP,並且正在使用mysqli開發一個簡單的密碼更改腳本。我一直在使用mysql教程作爲參考。現在我遇到了一個問題,我的代碼似乎無法從數據庫中檢索舊密碼,並且沒有收到任何錯誤消息。Mysqli沒有從數據庫檢索密碼

if($user){ 

//start password change 
if ($submit){ 

    $oldpassword  = $_POST['oldpassword']; 
    $newpassword  = $_POST['newpassword']; 
    $repeat_newpassword = $_POST['repeat_newpassword']; 

    //connect to db 
    $connect = mysqli_connect("localhost", "root", "****", "registration") or die ("Could not connect to database!" . mysqli_error($connect)); 
    $queryget = mysqli_query($connect, "SELECT password FROM users WHERE username = '$user'") or die ("Query error" . mysqli_error($connect)); 
    $row  = mysqli_fetch_assoc($queryget); 

    $oldpassworddb = $row['password']; 


    //check fields are filled in 
    if ($oldpassword && $newpassword && $repeat_newpassword){ 

     if ($oldpassword == $oldpassworddb){ 

      if ($newpassword == $repeat_newpassword){ 

       $querychange = mysqli_query ($connect, "UPDATE users SET password = '$newpassword' WHERE username = '$user'") or die ("Password query error" . mysqli_error($connect)); 
       session_destroy(); 
       die ("<a href = login.php>'Return to login.'</a>"); 

      } 
      else 
       die ("New passwords don't match!"); 
     } 
     else 
      die ("Old password doesn't match!"); 
    } 
    else 
     echo "All fields must be filled in!"; 

} 

每當我在$oldpassword輸入,則返回「舊密碼不匹配」;即使我輸入的舊密碼與數據庫中的密碼相匹配。我也檢查了數據庫密碼,以確保沒有任何空間或導致問題。

echo $oldpassword . "<br>"; 
echo $oldpassworddb . "<br>"; 
$count = mysqli_num_rows($queryget); 
echo $count; die(); 

我用這個來檢查,看看是否該代碼將來自DB的密碼塊打印值,但它只返回$oldpassword$count返回0。它肯定會連接到數據庫並存在用戶,所以我必須在查詢時做錯了什麼。

我非常感謝幫助。我想這是一個非常簡單的修復,由於mysql和mysql之間的細微差別,但我在網上找到類似的問題/解決方案時非常困難。

+0

您是否收到任何查詢錯誤?如果你在phpmyadmin中運行相同的查詢怎麼辦? – Rikesh

+0

而不是使用'echo',嘗試'var_dump($ oldpassword)' – andrewsi

+0

你對SQL注入攻擊很開放,並且在數據庫中以明文存儲密碼。你只是開始讓你的服務器pwn3d,並且你的整個用戶都受到了損害。 **停止**在此代碼上工作,直到您學習了基本的計算機安全性... –

回答

0

您不應該嘗試從表中檢索密碼,但要檢查密碼是否匹配。因此使用

​​