-3

私は登録システムを備えたウェブサイトに取り組んでいます。userCP でパスワードを変更できます。このスクリプトを作成しましたが、機能しません。誰か助けてくれませんか?パスワードを変更してもエラーは発生しませんが、更新されません。

PHP コード:

<?php 
    if (isset($_POST['updatePassBtn']))
    {
        $cpassword = $_POST['cpassword'];
        $npassword = $_POST['npassword'];
        $rpassword = $_POST['rpassword'];
        if (!empty($cpassword) && !empty($npassword) && !empty($rpassword))
        {
            if ($npassword == $rpassword)
            {
                if (mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE `username` = '".$_SESSION['username']."' AND `password` = '".SHA1($cpassword)."'")))
                {
                    mysql_query("UPDATE `users` SET `password` = '".SHA1($npassword)."' WHERE `username` = '".$_SESSION['username']."' AND `ID` = '".$_SESSION['id']."'");
                    echo '<div class="nNote nSuccess hideit"><p><strong style="color:green;">SUCCESS: </strong>Password Has Been Updated</p></div>';
                }
                else
                {
                    echo '<div class="nNote nFailure hideit"><p><strong style="color:red;">FAILURE: </strong>Current Password is incorrect.</p></div>';
                }
            }
            else
            {
                echo '<div class="nNote nFailure hideit"><p><strong style="color:red;">FAILURE: </strong>New Passwords Did Not Match.</p></div>';
            }
        }
        else
        {
            echo '<div class="nNote nFailure hideit"><p><strong style="color:red;">FAILURE: </strong>Please fill in all fields</p></div>';
        }
    }
?>

私のフォーム:

<form action="" class="form" method="POST">
    <fieldset>
        <label></label>
        <input name="cpassword" type="text" value="Current Password" onfocus="this.value = (this.value=='Current Password')? '' : this.value;" onblur="if(this.value == ''){this.value='Current Password';}"/>
    </fieldset>
    <fieldset>
        <label></label>
        <input name="npassword" type="text" value="New Password" onfocus="this.value = (this.value=='New Password')? '' : this.value;" onblur="if(this.value == ''){this.value='New Password';}"/>
    </fieldset>
    <fieldset>
        <label></label>
        <input name="rpassword" type="text" value="Repeat Password" onfocus="this.value = (this.value=='Repeat Password')? '' : this.value;" onblur="if(this.value == ''){this.value='Repeat Password';}"/>
        <input type="submit" value="Update" name="updatePassBtn"/>
    </fieldset>
</form>
4

2 に答える 2

2

ユーザー名とパスワードに一致する行の数を数えますが、更新すると、$_SESSION['id'] と一致する必要があるという条件もあります。セッションに正しい「ID」が含まれていない場合、更新は行と一致しません。

更新が成功したことを報告する前に、mysql_affected_rows()をチェックする必要があります。

また、mysql 関数が成功を返すことも確認する必要があります (@RocketHazmat がコメントで示唆しているように)。多くfalseはエラーで戻ります。

于 2013-03-14T18:53:33.283 に答える
-1
 mysql_query("UPDATE `users` SET `password` = '".SHA1($npassword)."' WHERE `username` = '".$_SESSION['username']."' AND `ID` = '".$_SESSION['id']."'");

mysql_query をセットアップしましたが、実行していません。

于 2013-03-14T18:52:36.203 に答える