2013-05-03 73 views
2

我在我的網站上有一個頁面,允許用戶更改他們的密碼我想爲我的網站做一個更改密碼頁面。我究竟做錯了什麼?

表單要求輸入用戶名,當前密碼,新密碼,確認新密碼。

如果用戶輸入不正確的用戶名,表單將不會更改其密碼。

但是,如果用戶輸入了錯誤的密碼,那麼表單無論如何都會改變他們的密碼。

我的代碼粘貼在下面,如果有人可以幫助,我會高度讚賞!謝謝!

Joost的

Changepassword信息屏幕:

<div id="inlogscherm"> 
    <form name="form1" method="post" action="changepw.php"> 
     <div class="textm">Change password</div><br> 
     <div class="text">Username:</div><div class="invulbalkje"><? echo "{$_SESSION['myusername']}"; ?></div><br /> 
     <input name="username" type="hidden" id="username" value="<? echo "{$_SESSION['myusername']}"; ?>"> 
     <div class="text">Password:</div><input name="npassword" type="password" id="npassword" class="invulbalkje"><br /> 
     <div class="text">New Password:</div><input name="newpassword" type="password" id="newpassword" class="invulbalkje"><br /> 
     <div class="text">Repeat New Password:</div><input name="repeatnewpassword" type="password" id="repeatnewpassword" class="invulbalkje"><br /> 
     <input type="submit" name="Submit" value="Change" class="button"> 
    </form> 
</div> 

這裏是改變的PHP(changepw.php)

<?php 
session_start(); 

$host="localhost"; 

$username=","; 

$password=","; 

$db_name=","; 

$tbl_name=","; 

mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

$username = $_POST['username']; 
$password = $_POST['password']; 
$newpassword = $_POST['newpassword']; 
$repeatnewpassword = $_POST['repeatnewpassword']; 

$encrypted_password=md5($password); 
$encrypted_newpassword=md5($newpassword); 

$result = mysql_query("SELECT password FROM $tbl_name WHERE username='$username' and password = '$encrypted_password'"); 

if(!$result) 
{ 
    header("location:error1.php"); 
} 
if(mysql_num_rows($result)){ 
    if($newpassword==$repeatnewpassword){ 
     $sql=mysql_query("UPDATE $tbl_name SET password='$encrypted_newpassword' where username='$username'");   
     if($sql) 
     { 
       header("location:success.php"); 
     } 
     else 
     { 

      header("location:error3.php"); 
     }  
    } else { 

     header("location:error_password_not_matched.php"); 
    } 
} else { 

    header("location:error.php"); 
} 
?> 

如果你看到問題請與我聯繫。我會非常感謝!

+1

首先,您需要使用mysql_real_escape_string對插入到SQL命令中的變量進行防止SQL注入。 – Adder 2013-05-03 09:11:56

+1

md5不適用於密碼散列,你不用密碼,這是sql注入的弱點,並且mysql_ *函數已被棄用。就這樣你知道。 – 1615903 2013-05-03 09:25:06

回答

4

這是一個錯誤,正如我所發現的。

就是這樣,在表單中,您正在使用npassword名稱作爲密碼字段,並且在獲取該名稱時使用了$password = $_POST['password'];名稱密碼,如下所示。

所以,簡單地更改此代碼:

$password = $_POST['password']; 

隨着

$password = $_POST['npassword']; 

,這將正常工作。

+0

非常感謝!我很感激你看着它!我會永遠找不到它!謝謝! Mlss poo – Joost 2013-05-03 09:20:42

相關問題