我正在创建一个用户表单和表单操作,用户(已经使用会话变量登录)可以更改他们的 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);
?>