2016-05-02 111 views
1

我對PHP很陌生,所以我仍然處於學習階段。 我希望我能在這裏得到一些很好的答案,也許有人有一些改進的提示。用PHP更改密碼

我知道事情可能是錯的,但我仍然在學習。

我現在試着做的是一個簡單的「更改密碼」表單爲我的網站。

<?php 
include '../config.php'; 
$connection = mysqli_connect($servername, $username, $password, $dbname); 
if ($connection->connect_error){ 
    die("Connection failed: " . $conn->connect_error); 
} else { 
    echo "Connected successfully"; 
} 
if(isset($_POST['submit']) && $_POST['submit'] = "submit"){ 
    $username = mysql_real_escape_string($connection, $_POST['username']); 
    $password = md5($connection, $_POST['password']); 
    $newpassword = md5($connection, $_POST['newpassword']); 
    $confirmnewpassword = md5($connection, $_POST['confirmnewpassword']); 
    $result = mysql_query("SELECT password FROM users WHERE username='$username'"); 
    if(!$result) { 
     echo "The username does not exist!"; 
    } 
    else if($password != mysql_result($result, 0)){ 
      echo "The password is not correct!"; 
    } 
    if($newpassword === $confirmnewpassword) { 
      $sql = mysql_query("UPDATE users SET password = '$newpassword' WHERE username = '$username'");  
     } 
     if(!$sql) { 
      echo "Password has been changed!"; 
     }else{ 
     echo "Passwords do not match!"; 
    } 
}  
?> 
<form name="newprwd" action="" method="post"> 
    username :<input type="text" name="username" value=""><br> 
    Passord :<input type="password" name="password" value=""><br> 
    Nytt passord :<input type="password" name="newpassword" value=""><br> 
    Bekreft Passord :<input type="password" name="confirmnewpassword" value=""><br> 
    <input type="submit" name="submit" value="Endre passord"><br> 
</form> 

這是我在我的change-pw.php文件中的代碼。

$servername = "*****"; 
$username = "****"; 
$password = "***"; 
$dbname = "***"; 

這是我用config.php文件連接數據庫的方式。 我沒有在這裏顯示服務器名稱,但您可以看到我如何連接到它。

我想要的是從數據庫中獲取密碼和用戶名的形式並對其進行更改。

是的,我知道這裏有一些挪威語言,但那只是回聲的。

我的問題:

當我寫一個用戶名,密碼,新密碼和確認密碼,我從如果(!$結果)得到的消息,並從如果(!$ SQL),但它不會改變密碼。 它說用戶名不存在並且密碼已被更改。

有人看到我看不到的問題嗎?

我希望對這個腳本有正面和負面的評論,以便我可以改進。

謝謝!

+1

您正在使用哪個PHP版本? 'mysql_query'自5.5.0開始已被棄用,並已在PHP 7中被刪除。您應該考慮至少使用'mysqli_query'或者甚至切換到PDO(推薦)。 – Paul

+0

另外,你是否調試過'$ result'?什麼樣的錯誤信息已被記錄? – Paul

+0

如果我沒有弄錯,我正在使用最新的PHP。我們正在使用的是mysqli。 我一直沒有試圖調試$結果。我怎麼做? – nikon01

回答

0
<?php 
    $result = mysql_query("SELECT password FROM users WHERE username='$username'"); 
    if($row = mysql_fetch_row($result)) { 
     if($password != $row[0]) { 
      echo "The password is not correct!"; 
     } 
     elseif($newpassword === $confirmnewpassword) { 
      $sql = mysql_query("UPDATE users SET password = '$newpassword' WHERE username = '$username'");  
     }else{ 
      echo "Passwords do not match!"; 
     } 
    }else{ 
     echo "The username does not exist!"; 
    } 

?> 

這僅適用於PHP 5.x。對於PHP 7,您需要更改爲mysqli或PDO。