ユーザー(セッション変数を使用してすでにログインしている)が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);
?>