0

次のコードがあります。

session_start ();
include 'core/init.php';

$username = '';
$password = '';
$dbusername = '';
$dbpassword = '';
if (isset($_POST['Email']) && isset($_POST['Password']))
{
    $username = $_POST['Email'];
    $password = md5($_POST['Password']);

    $query = mysql_query("SELECT * FROM member WHERE Email ='$username' AND Password='$password'");

    $numrow = mysql_num_rows ($query);
    // user login
    if ($numrow!=0)
    {
        while ($row = mysql_fetch_assoc($query))
        {
            $dbusername = $row['Email'];
            $dbpassword = $row['Password'];
        }

        //Check to see if they match
        if ($username==$dbusername&&$password==$dbpassword)
        {
            $_SESSION ['Email']=$username;
            header('Location: member.php?username='.$username);
        }
    }
    else 
    {
        // admin login
        $query2 = mysql_query("SELECT * FROM admin WHERE Email ='$username' AND Password ='$password'");
        $numrow2 = mysql_num_rows ($query2);
        if ($numrow2!=0)
        {
            while ($row = mysql_fetch_assoc($query2))
            {
                $dbusername = $row['Email'];
                $dbpassword = $row['Password'];
            }

            //Check to see if they match
            if ($username==$dbusername&&$password==$dbpassword)
            {
                $_SESSION ['Email']=$username;
                header("Location: admin.php");
            }else{
                if (empty ($username) === true|| empty($password) === true) {
                    echo "Please enter a username and password";
                } else if ($username!=$dbusername){
                    echo "That user does not exist! Have you registered?";
                } else if ($username=$dbusername&&$password!=$dbpassword) {
                    echo "Incorrect password";
                }
            }
        }
    }
}

しかし、ユーザーが間違ってログインした場合、エラーメッセージは何も表示されず、空白のページだけが表示されます。これは中括弧だと思いますが、何度変更しても悪化するか、まったく何もありません。誰かが私が間違っていることを教えてもらえますか?

4

3 に答える 3

2

チェックアウト:

if (empty ($username) === true|| empty($password) === true) {
                echo "Please enter a username and password";
                    } else if ($username!=$dbusername){
                        echo "That user does not exist! Have you registered?";
                    } else if ($username=$dbusername&&$password!=$dbpassword) {
                            echo "Incorrect password";
                    }

            }

ログイン エラーを含むこのセクションは「 admin login 」セクションにあるため、非管理者ユーザーのログインが失敗してもエラーは表示されません。

于 2013-03-29T14:00:58.913 に答える
0

select ステートメントは、指定されたユーザー名とパスワードがデータベースにあるものと一致することを既に確認しています。PHP で 2 回目の比較を行う必要はありません。コードは次のようになります。

if (isset($_POST['Email']) && isset($_POST['Password']))
{
    $username = $_POST['Email'];
    $password = md5($_POST['Password']);

    $query = mysql_query("SELECT * FROM member WHERE Email ='$username' AND Password='$password'");

    if(mysql_num_rows($query) == 1)
    {
        $_SESSION['Email'] = $username;
        header('location: member.php?username='.$username);
    }
    else 
    {
        // try admin login
        $query2 = mysql_query("SELECT * FROM admin WHERE Email ='$username' AND Password ='$password'");
        if(mysql_num_rows($query2) == 1)
        {
            $_SESSION['Email'] = $username;
            header("location: admin.php");
        }
        else
        {
            echo "Failed Login Attempt";
        }
    }
}

クエリはユーザー名とパスワードが一致するレコードのみを返すため、ユーザー名が一致してもパスワードが一致しない場合に結果が返されることはありません。発生する。

補足として、ユーザー名は正しいがパスワードが正しくない、またはその逆であることをユーザーに通知するのは不適切な形式です。これはセキュリティ上の問題であり、悪意のあるユーザーが簡単にアクセスできるようになる可能性があります。ただし、これは要点を超えているため、この提案は個人的なアドバイスとしてのみ受け取ってください。あなたの質問に向けられたものではありません.

于 2013-03-29T14:23:06.740 に答える
0
$query = mysql_query("SELECT * FROM member WHERE Email ='$username' AND Password='$password'");

    if(mysql_num_rows($query) == 0){
     echo 'You have entered wrong username/password'; }else {

      // you can continue with your query below. 
于 2013-03-29T14:08:50.987 に答える