-1

更新 (解決済み): 以前は、パスワードが md5 に暗号化されているため、パスワードの長さを 32 文字にする必要がある 15 文字に設定しました。今では正常に動作します。すべての回答と提案に感謝します。

以下は登録用のphpコードです。コードは正常に機能し、md5 のデータベースにパスワードを保存できます。

  <html>
<?php
error_reporting(0);
if($_POST['submit'])
{
    $name = mysql_real_escape_string($_POST['name']);
    $username = mysql_real_escape_string($_POST['username']);
    $password = mysql_real_escape_string($_POST['password']);
    $password1 = mysql_real_escape_string($_POST['password1']);

    $enc_password = md5($password);

    if($name && $username && $password && $password1)
    {
        if(strlen($name)<30)
        {
            if(strlen($username)<10)
            {
                if(strlen($password)<15 || strlen($password)>6)
                {
                    if($password == $password1)
                    {
                        require "dbc.php";
                        $query = mysql_query("INSERT INTO users VALUES ('$name','$username','$enc_password')");     
                        echo "Registration Complete! <a href='index.php'>Click here to login</a>";
                    }
                    else
                    {
                        echo "Passwords must match";
                    }
                }
                else
                {
                    echo "Your password must be between 6 and 15 characters";   
                }
            }
            else
            {
                echo "Your username is too long";   
            }
        }
        else
        {
            echo "Your name is too long";
        }
    }
    else
    { 
        echo "All fields are required"; 
    }
}

?>

    <form action="register.php" method="POST">
        Name: <input type="text" name="name" value="<?php echo "$name"; ?>"> Max Length:30<p>
        Username: <input type="text" name="username" value="<?php echo "$username"; ?>"> Max Length:10<p>
        Password: <input type="password" name="password"> Max length:15<p>
        Re-Enter Password: <input type="password" name="password1"><p>
        <input type="submit" name="submit" value="Register">
    </form>
    <input type="button" value="<< Back to Login Area" onclick="window.location='../login%20and%20registration/members.php'">

</html>

以下はログインphpコードです。

    <?php

session_start();

require "dbc.php";

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$enc_password = md5($password);

if($username&&$password)
{
    $query = mysql_query("SELECT * FROM users WHERE username='$username'");
    $numrow = mysql_num_rows($query);

if($numrow!=0)
{
    while($row = mysql_fetch_assoc($query))
    {
        $db_username = $row['username'];
        $db_password = $row['password'];
    }

    if($username==$db_username&&$password==$db_password)
    {
        //echo "Logged in <a href='members.php'>Click here to enter the members area</a>";
        $_SESSION['username']=$db_username;
        header("location: members.php");
    }
    else 
    {
        header("location: index.php?error=Incorrect Password");
    }
}
else 
{
    header("location: index.php?error=That user doesn't exist");
}
}

else 
{
    header("location: index.php?error=All fields are required");
}

?>

問題は、ログインしようとすると「正しくないパスワード」が表示されることです。データベースからパスワードを取得することに何か問題があると思います。誰でも助けることができますか?

4

4 に答える 4

3

$enc_passwordインラインの代わりに使用する必要があります$password

if($username==$db_username&&$password==$db_password)

PSまた、md5を使用する場合は、しないmysql_real_escape_string()md5ください。文字列が変更され、すべての注入が削除されます。

PPS代わりにPDOを使用mysql_*

アップデート

また、ユーザー名は大文字と小文字を区別しない必要があるため、次のようにすることをお勧めします。

if(strcasecmp($username, $db_username)===0 && $password==$db_password)

strcasecmp

于 2013-04-09T06:53:03.247 に答える
0

変化する

if($username==$db_username&&$password==$db_password)

if($username == $db_username && $enc_password == $db_password)

あなたは使用していますが$password、そうあるべきです$enc_password

于 2013-04-09T06:53:30.453 に答える
0

$enc_password と $db_password を比較する必要がありますが、$password と $db_password を比較しています。

if($username==$db_username&&$enc_password==$db_password)
于 2013-04-09T06:53:54.220 に答える
0

あなたの場合、このように比較する必要があります

 $password = md5($password);//change value entered of password to md5

 if($username==$db_username&&$password==$db_password)
于 2013-04-09T06:54:11.517 に答える