0

ユーザーがパスワードを変更できるようにするスクリプトを作成しました。しかし、エラー確認パスワードが表示され、新しいパスワードが一致しません..コードは次のとおりです

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

 if($_POST['username']!="") {
  $username = $_POST['username'];  
}
else die("No Username was passed");
if($_POST['password']!="") {
  $password = $_POST['password'];
}
else die("No Password was passed");
if($_POST['newpassword']!="") {
  $newpassword = $_POST['newpassword'];
}
else die("No NewPassword was passed");
if($_POST['confirmnewpassword']!="") {
  $newpassword = $_POST['confirmnewpassword'];
}
else die("No Confirm Password was passed");

$username = $_POST['username'];  
$password = $_POST['password'];
$newpassword = $_POST['newpassword'];
$confirmnewpassword = $_POST['confirmnewpassword'];

$result = mysql_query("SELECT password FROM users WHERE username='$username'");

    if(!$result){
        echo "The username entered does not exist!";
    }
    else
        if($password != mysql_result($result, 0)){
            echo "Entered an incorrect password";
            }

    if($newpassword == $confirmnewpassword){
        $sql = mysql_query("UPDATE users SET password = '$newpassword' WHERE username = '$username'");      
    }

    if(!$sql){
        echo "Congratulations, password successfully changed!";
    }
    else{
        echo "New password and confirm password must be the same!";
    }

  ?>

ここにフォームコードがあります

<form action="lostpw.php" method="post" name="" id="">
                                            <table width="50%" border="0" align="center" cellpadding="4" cellspacing="0">
                                                <tr> 
                                                  <td width="22%">Username</td>
                                                  <td width="78%"><input name="username" type="text" id="username" value="<? echo "". $_SESSION['username'] ."" ?>"></td>
                                                </tr>
                                                <tr> 
                                                  <td width="22%">Old password</td>
                                                  <td width="78%"><input name="password" type="text" id="password"></td>
                                                </tr>
                                                  <td>New Password</td>
                                                  <td><input name="newpassword" type="newpassword" value=""></td>
                                                </tr>
                                                <tr> 
                                                </tr>
                                                  <td>Confirm </td>
                                                  <td><input name="confirmnewpassword" type="confirmnewpassword" value=""></td>
                                                </tr>
                                                <tr> 
                                                  <td>&nbsp;</td>
                                                  <td><input type="submit" name="Submit" value="update"></td>
                                                </tr>
                                                <tr> 
                                                  <td><a href="home.php">Back</a></td>
                                                </tr>
                                            </table>
</form> 

私はどこで間違っていますか。

4

2 に答える 2

1

悪い行動があったとしても、あなたは立ち止まりません。次の後にスクリプトの実行を停止していません。

if(!$result){
        echo "The username entered does not exist!";
    } else if($password != mysql_result($result, 0)){
        echo "Entered an incorrect password";
}

したがって:

if($newpassword == $confirmnewpassword){
    $sql = mysql_query("UPDATE users SET password = '$newpassword' WHERE username = '$username'");      
}

常に評価されます。

また

if(!$sql){
    echo "Congratulations, password successfully changed!";
} else {
    echo "New password and confirm password must be the same!";
}

意味: クエリが失敗した場合 ( $sql = false, !$sql = true) は成功メッセージを出力し、それ以外の場合は失敗メッセージを出力します。私はそれがあなたが望むものだとは思わない。これらの 2 つのブロックを反転させたい場合があります。

于 2013-03-18T03:15:42.487 に答える
0

インバーターである感嘆符は使用しないでください。それは、「クエリがうまくいかなかった場合はおめでとうと言い、そうでなければ、うまくいった場合はエラー メッセージを表示する」ということです。以下:

if(!$sql){
    echo "Congratulations, password successfully changed!";
}
else{
    echo "New password and confirm password must be the same!";
}

次のようにする必要があります。

if($sql){
    echo "Congratulations, password successfully changed!";
}
else{
    echo "New password and confirm password must be the same!";
}
于 2013-03-18T03:16:29.430 に答える