2013-03-19 2 views
-1

Я работаю на участке кода, который изменяет пароль в базе данных по завершении следующего вида:Изменение пароля PHP MySQL

<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
    <title>Password Change</title> 
    </head> 
    <body> 
    <h1>Change Password</h1> 
    <form method="POST" action="password_change.php"> 
    <table> 
    <tr> 
    <td>Enter your UserName</td> 
    <td><input type="username" size="10" name="username"></td> 
    </tr> 
    <tr> 
    <td>Enter your existing password:</td> 
    <td><input type="password" size="10" name="password"></td> 
    </tr> 
    <tr> 
    <td>Enter your new password:</td> 
    <td><input type="password" size="10" name="newpassword"></td> 
    </tr> 
    <tr> 
    <td>Re-enter your new password:</td> 
    <td><input type="password" size="10" name="confirmnewpassword"></td> 
    </tr> 
    </table> 
    <p><input type="submit" value="Update Password"> 
    </form> 
    <p><a href="home.php">Home</a> 
    <p><a href="logout.php">Logout</a> 
    </body> 
    </html> 

, И в PHP:

<?php 
session_start(); 
include 'dbconfig.php'; 

$username = $_POST['username']; 
     $password = $_POST['password']; 
     $newpassword = $_POST['newpassword']; 
     $confirmnewpassword = $_POST['confirmnewpassword']; 
     $result = mysql_query("SELECT password FROM user_info WHERE 
user_id='$username'"); 
     if(!$result) 
     { 
     echo "The username you entered does not exist"; 
     } 
     else if($password!= mysql_result($result, 0)) 
     { 
     echo "You entered an incorrect password"; 
     } 
     if($newpassword=$confirmnewpassword) 
     $sql=mysql_query("UPDATE user_info SET password='$newpassword' where 

user_id='$username'"); 
     if($sql) 
     { 
     echo "Congratulations You have successfully changed your password"; 
     } 
     else 
     { 
     echo "Passwords do not match"; 
     } 
     ?> 

проблема, которую я имею в данный момент, - это когда я отправляю кнопку submit, которая возвращает меня на страницу только для чтения этого кода.

Любые предложения?

+7

Возможно, ваш сценарий уязвим для SQL-инъекции. Кроме того, вы не должны хранить пароль в виде обычного текста, а скорее только соленый хэш. – Gumbo

+3

Никогда не храните пароли как обычный текст! Шифрование, шифрование, шифрование. http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html –

+0

Хорошо, я добавлю это, но это все еще не объясняет, почему оно отображается таким образом. – stark

ответ

5

На первый вид я могу понять несколько основных ошибок, которые вы сделали:

если вы сравниваете, вы должны использовать

$newpassword == $confirmnewpassword 

и не

$newpassword=$confirmnewpassword 

во-вторых, когда вы используете, если. .elseif ... формат петли shold be

if (condition) 
    { 
    //code to be executed if condition is true; 
    } 
else if (condition) 
    { 
// code to be executed if condition is true; 
} 
else 
    { 
    //code to be executed if condition is false; 
} 

Вы, очевидно, скучаете по другой части в одном из ваших таких петель. Пожалуйста, исправьте свой синтаксис и повторите попытку ...

-1

u можно выбрать первый стол и проверить правильность пароля, а при правильном обновлении пароля .else отобразить сообщение об ошибке.это просто обновить пароль, если старый пароль матч обновить пароль ...., Cracker World

$old_password=$_POST['old_password']; 
$new_password=$_POST['new_password']; 
$con_password=$_POST['con_password']; 
$chg_pwd=mysql_query("select * from users where id='1'"); 
$chg_pwd1=mysql_fetch_array($chg_pwd); 
$data_pwd=$chg_pwd1['password']; 
if($data_pwd==$old_password){ 
if($new_password==$con_password){ 
$update_pwd=mysql_query("update users set password='$new_password' where id='1'"); 
$change_pwd_error="Update Sucessfully !!!"; 
} 
else{ 
$change_pwd_error="Your new and Retype Password is not match !!!"; 
} 
} 
else 
{ 
$change_pwd_error="Your old password is wrong !!!"; 
}} 
+0

В вашем коде используются устаревшие API, не удается даже * попытаться * хэш-паролями и явно уязвим для SQL-инъекции. – Boann

-1

После видел ваш сценарий, я обнаружил, что вы не используете «==» в вашем состоянии сравнения пароль.

if($newpassword=$confirmnewpassword) 

Это не так. Вы приняли ответ birju shah, выше которого указывается, что я хочу сказать.

Помимо этого, я обнаружил, что вы не использовали какой-либо метод шифрования, что крайне неправильно. Любой может взломать ваш пароль из базы данных.

Вы должны использовать функции Password_verify() и Password_hash() для шифрования и расшифровки вашего пароля. Эти шифрования и дешифрования считаются наиболее безопасными в настоящее время. Вы не должны использовать шифрование md5, потому что в настоящее время каждый может расшифровать алгоритм md5.

Здесь я сделал один учебник Change password code in PHP. Я затронул все вышеперечисленные темы. Надеюсь, что этот урок поможет вам.

Cheers,

+0

вы последовательно используете неправильную терминологию.Вы должны хешировать, НЕ шифровать пароли. И не менее важно, чтобы хеширование - это соление и множественные итерации хеширования, вы не обращаетесь ни к одному из тех, что делает этот очень плохой совет. – luk2302

Смежные вопросы