0

我正在创建一个用户表单和表单操作,用户(已经使用会话变量登录)可以更改他们的 md5(我知道 MD5 已过时且不安全,这是出于测试目的)存储在 sql 数据库“用户”中的加密帐户密码桌子。

我有一个要求输入“currentpassword”、“newpassword”和“confirmnewpassword”的表格。该表单使用 $_POST 将输入的数据传递给 passwordaction.php。

用户名是从 $_SESSION 'autheticatedUser' 获取的,密码是从之前的 $_POST 表单变量获取的。然后我使用 sql 语句从数据库中获取密码以与“currentpassword”变量进行比较,这算作不安全的客户端验证吗??

然后我有一个 SQL UPDATE 语句来更新数据库中指定用户的密码行,并使用 $_SESSION 标头重定向用户并通知成功或失败。

我一直在阅读和重新阅读我的代码,试图找出我出错的地方,因为当我尝试更改用户帐户密码时,我不断返回我的登录页面(使用 $SESSION 标头)告诉我它已正确更新但是当我检查数据库密码尚未更新。

我希望其他人的观点或观点可以帮助我了解我错过了什么,有人可以建议为什么我的 sql UPDATE 语句不起作用?

欢迎任何建设性的批评

下面是我的“动作”php页面的代码

 <?php

session_start();

$username = $_SESSION["authenticatedUser"];
$currentpassword = md5($_POST['currentpassword']);
$newpassword = md5($_POST['newpassword']);
$confirmnewpassword = md5($POST['confirmnewpassword']);

/* make a connection with database */
$con = mysql_connect("localhost", "root", "") or die(mysql_error());

/* select the database */
mysql_select_db("groupproject") or die(mysql_error());

$queryget = mysql_query("SELECT password FROM users WHERE username='$username'") or 
die(mysql_error());
$row = mysql_fetch_assoc($queryget);
 $currentpasswordDB = $row['password'];

//check passwords

if ($currentpassword==$currentpasswordDB)

{
if ($newpassword==$confirmnewpassword)
{
//success, change password in DB
    $querychange = mysql_query("UPDATE users SET password='$newpassword' WHERE       
 username='$username'") or die(mysql_error());
}
else header("Location: passwordmismatch.php");

if ($querychange == true){

    $_SESSION["passchange"] = "Your password has been changed, Please Log in";

    header("Location:login.php");

}

else $_SESSION["nopasschange"] = "Your password could not be changed, Please try   
again";
 header("Location:userchangepassword.php");

}

else header("Location: passwordmismatch.php");

mysql_close($con);

?>
4

2 回答 2

1

$user并且$username是不同的变量。

于 2012-12-08T19:38:51.293 回答
0

有点晚了:P

但在行 $confirmnewpassword = md5($POST['confirmnewpassword']);

它应该是

$confirmnewpassword = md5($_POST['confirmnewpassword']);

于 2013-07-21T11:39:09.143 回答