2013-12-20 55 views
-2

我在更新mysql數據庫查詢時遇到了一些麻煩。 我有一個登錄形式,當用戶登錄時,會創建一個會話的用戶,並將其存儲的電子郵件,密碼和ID(不知道這是最安全的方式,請告訴我正確的/最安全的方式)。當他們登錄時,他們可以去改變他們的密碼(或者應該是)。問題是更新密碼查詢不適合我。mysql更新當前用戶的密碼

這裏是我的代碼,當他們登錄,設置該用戶的ID,電子郵件地址和密碼:

session_start(); 
$_SESSION['id'] = $id; 
$_SESSION['email'] = $email; 
$_SESSION['password'] = $password; 

這裏,是爲了更新自己的密碼代碼:

session_start(); 
if (isset($_POST['email']) && isset($_POST['password']) && isset($_POST['newPassword']) && isset($_POST['oldPassword'])) { 
        $email = $_POST['email']; 
        $password = $_POST['password']; 
        $newPassword = $_POST['newPassword']; 
        $oldPassword = $_POST['oldPassword']; 

       mysql_select_db("users", $conn); 

     if(isset($_POST['update'])) { 
      $update = "UPDATE users SET Password='$newPassword' WHERE Password='$_POST[hidden]'"; 
      mysql_query($update, $conn); 
      $_SESSION['password'] = $newPassword; 
     } 

我有一個'舊密碼'複選框,用於檢查他們的舊密碼是否正確,以及'新密碼'複選框是否意味着當用戶點擊'更新'時新密碼。

的問題是,當我點擊更新沒有任何反應。我嘗試使用mysql_error()函數,但它沒有工作。頁面刷新速度太快。 請注意,這不是所有的代碼,如果你想下載它: https://www.mediafire.com/?fkjwt58hk5kyt3w 嗨,大家好,我在我的MySQL數據庫更新查詢有點麻煩。 我有一個登錄表單,當用戶登錄時,會創建用戶的電子郵件,密碼和ID並將其存儲在會話中(不確定這是否最安全,請告訴我正確/最安全的方式)。當他們登錄時,他們可以去改變他們的密碼(或者應該是)。問題是更新密碼查詢不適合我。

我知道做事的這個MySQL的方式是非常不安全,容易受到SQL注入和做它的老樣子,但這只是練習,是爲了好玩。之後,我將學習如何防止sql注入和XSS。

我已經準備好表示本網站上的其他類似問題,但他們根本沒有幫助我,我搜索了Google,並在YouTube上搜索了它。無處可爲我工作!

請幫忙! Thanx提前

如果還有其他東西想讓我發帖或者我沒有說過什麼,請告訴我。

PS:如果可以的話,請下載的所有文件,並檢查它們和你自己:)運行它們

+3

** **危險:你是使用[一個**過時的**數據庫API](http://stackoverflow.com/q/12859942/19068),並應使用[現代替換](http://php.net/manual/en/mysqlinfo.api .CH oosing.php)。你也**易受[SQL注入攻擊](http://bobby-tables.com/)**,現代的API會使[防禦]更容易(http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)自己從。 – Quentin

+0

您正在使用[不適合的哈希算法](http://php.net/manual/en/faq.passwords.php)(在這種情況下,「根本就沒有哈希算法!」),並且需要[更好地照顧](https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet)你的用戶密碼。 – Quentin

+1

什麼$ _POST [隱藏]? –

回答

0
  1. 請逃脫後的參數,例如與mysql_real_escape_string
  2. 不使用mysql_ *功能 - >使用庫MySQLi或PDO爲您查詢

你試過調試? ;)

$result = mysql_query($update, $conn); 
if(!$result){ 
    echo mysql_error(); 
    exit; 
} 
0

你需要發佈你正在得到的錯誤。

從我看到我能猜到where子句所期望是沒有得到解決。

你寫WHERE Password='$_POST[hidden]'可能是你應該使用一個變量來代替。

WHERE Password='$oldpassword'

+0

您的方法是錯誤的。可能有多個用戶使用相同的密碼,在這種情況下,它將更新所有這些行。 –

+0

@RishabhRaj我只是想幫助解決他的查詢。是的,我同意where條款應該違反ID。 –

0

請使用調試SQL時運行

mysql_query($update, $conn)or die(mysql_error); 

代碼通過這個,你可以得到錯誤