2

ページタイトルchangepassword.phpがあります...このページでは、ユーザーはアカウントのパスワードを変更できます。クエリが実行され、送信されたメッセージが表示されますが、データベースは変更されません。パスワードは以前と同じです。慣れていないsha1ハッシュを使用しています(初めて使用します)。誰もがそれで何が起こっているのか知っていますか?ありがとう!

    <?php

    session_start ();

    $user_name = $_SESSION['user_name'];

    if($user_name)
    {
    //user is logged in

    if(isset($_POST['submit']))
    {
    //check fields

    $oldpassword = $_POST['oldpassword'];
    $newpassword = $_POST['newpassword'];
    $repeatnewpassword = $_POST['repeatnewpassword'];

    //check password against db

    $connect=mysql_connect("localhost","root","passssssssword") or die();
    mysql_select_db("database") or die();

    $queryget= mysql_query ("SELECT user_pass FROM users WHERE user_name='$user_name'")         or die("Query didn't work.");
    $row = mysql_fetch_assoc ($queryget);

    $oldpassworddb = $row['user_pass'];

    //check passwords

if (sha1($oldpassword)==$oldpassworddb)
{
    if ($newpassword==$repeatnewpassword)
    {
        if (strlen ($newpassword)>25 || strlen ($newpassword)<6)
        {
        echo "Password must be between 6 and 25 characters";
        }
        else
        {
        //change password in db 

        $newpassword = sha1($newpassword);

        $querychange = mysql_query("UPDATE users SET         password='$newpassword' WHERE user_name='$user_name'");
        session_destroy();
        die ("Your password has been changed. <a         href='index.php'>Return</a> to the main page and login with your new password.");
        }

    }
    else
        die ("New passwords do not match!");

}
else
    die ("Old password is inncorrect!");

    }

    else
    {
    echo
    "<form action = 'changepassword.php' method = 'POST'>
    <table>
    <tr>
        <td>
    Old password: 
        </td>
        <td>
    <input type='text' name='oldpassword'><p>
        </td>
    </tr>
    <tr>
        <td>
    New password: 
        </td>
        <td>
    <input type='password' name='newpassword'>
        </td>
    </tr>
    <tr>
        <td>
    Repeat new password: 
        </td>
        <td>
    <input type='password' name='repeatnewpassword'>
        </td>
    </tr>
    <table>
    <input type='submit' name='submit' value='Change password'>
    </form>
    ";
    }


    }
    else
die("You must be logged in to change your password!");
    ?>
4

2 に答える 2

5

Query_1:

SELECT user_pass FROM users WHERE user_name='$user_name'

あなたのQuery_2:

UPDATE users SET **password**='$newpassword' WHERE user_name='$user_name'

ただし、Query_2は次のようになります。

UPDATE users SET **user_pass**='$newpassword' WHERE user_name='$user_name'
于 2012-06-03T05:15:59.550 に答える
1

リテラル/一重引用符でPHPが変数を補間できるかどうかはわかりません。普段はsprintfも使っています。また、一般的には、ユーザー名だけでなく、ユーザー名と古いパスワードを確認する必要があります。

"SELECT user_pass FROM users WHERE user_name='$user_name'"

$ sql = sprintf( "select user_pass from users where user_name ="%s "、$ user_name);

また、mysql_error()を出力すると、「die()」の方が優れています。

  $connect=mysql_connect("localhost","root","passssssssword") or die();
mysql_select_db("database") or die("cannot connect".mysql_error());

しかし、おそらくトラブルシューティングの最速の方法は、mysql_queryにエラーを設定することです。

$sql = sprintf("UPDATE users SET  password="%s" WHERE user_name="%s"",$newpassword,$user_name);
$querychange = mysql_error($sql) or die ("Error updating: ".mysql_error());
于 2012-06-03T05:19:42.123 に答える