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之間的細微差別,但我在網上找到類似的問題/解決方案時非常困難。
您是否收到任何查詢錯誤?如果你在phpmyadmin中運行相同的查詢怎麼辦? – Rikesh
而不是使用'echo',嘗試'var_dump($ oldpassword)' – andrewsi
你對SQL注入攻擊很開放,並且在數據庫中以明文存儲密碼。你只是開始讓你的服務器pwn3d,並且你的整個用戶都受到了損害。 **停止**在此代碼上工作,直到您學習了基本的計算機安全性... –