【问题标题】:updating user md5 password in sql table using user change password form使用用户更改密码表单更新 sql 表中的用户 md5 密码
【发布时间】:2012-11-26 16:39:57
【问题描述】:

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

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

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

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

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

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

欢迎任何建设性的批评

下面是我的“action”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);

?>

【问题讨论】:

标签: php sql session-variables change-password


【解决方案1】:

$user$username 是不同的变量。

【讨论】:

  • 很好,代表我的愚蠢错误,但这仍然没有解决问题
【解决方案2】:

有点晚了:P

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

应该是

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

【讨论】:

    猜你喜欢
    • 2018-02-23
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 2016-10-02
    • 2012-05-03
    • 2017-05-06
    相关资源
    最近更新 更多