1

登録およびログインページのチュートリアルを使用しています。ユーザーが間違ったパスワードを入力した場合を除いて、すべてが完璧です。

パスワードが入力されていない場合、記載されているエラーが正常に表示されます。

正しいパスワードが入力されると、ログインします。

間違ったパスワードを入力すると空白のページになる!?

間違ったユーザー名が入力されたときと同じように、間違ったパスワードでメッセージを表示したい。login.phpコード全体を含めました:

include('db.php');

if(!isset($_POST['login'])) {
    include('form.php');
} else {

    if(isset($_POST['user'])&&$_POST['user']==""||!isset($_POST['user'])) {
        $error[] = "Username Field can't be left blank";
        $usererror = "1";
    }

    if(!isset($usererror)) {
        $user = mysql_real_escape_string($_POST['user']);
        $sql = "SELECT * FROM users WHERE user = '$user'";
        if(mysql_num_rows(mysql_query($sql))=="0") {
            $error[] = "Can't find a user with this username";
        }
    }

    if(isset($_POST['pass'])&&$_POST['pass']==""||!isset($_POST['pass'])) {
        $error[] = "password Field can't be left blank";
    }

    if(isset($error)) {
        if(is_array($error)) {
            echo "<div class=\"error\"><span>please check the errors and refill the form<span><br/>";
            foreach ($error as $ers) {
                echo "<span>".$ers."</span><br/>";
            }
            echo "</div>";
            include('form.php');
        }
    }

    if(!isset($error)) {
        $suser=mysql_real_escape_string($_POST['user']);
        $spass=md5($_POST['pass']);//for secure passwords
        $find = "SELECT * FROM users WHERE user = '$suser' AND password = '$spass'";
        if(mysql_num_rows(mysql_query($find))=="1"or die(mysql_error())) {
            session_start();
            $_SESSION['username'] = $suser;
            header("Location: loggedin.php");
        } else {
            echo "<div class=\"warning\"><span>Some Error occured durring processing your data</div>";
        }
    }
}
4

2 に答える 2

2
if(mysql_num_rows(mysql_query($find))=="1"or die(mysql_error())){

間違ったパスワードを入力すると、mysql_num_rows(mysql_query($find))は 0 なので、 になりますdie(mysql_error())。しかし、 がないためmysql_error()、空白のページが表示されます。

これを試して

$result = mysql_query($find) or die(mysql_error());
if (mysql_num_rows($result) == 1) {
    // proceed
} else {
    // authentication failed
}

編集: これは説明のみを目的としています。MySQL を扱う場合は、MySQLiまたはPDOを使用してください。

于 2013-01-26T11:29:18.620 に答える
0

このコードは少しわかりにくいので、このコードの使用を検討してください。

<?php

include('db.php');
if(isset($_POST['login'])) {
     $username = mysql_real_escape_string($_POST['user']);
     $password = md5($_POST['pass']);

     if(empty($username) || empty($password)) {
          echo "Empty username or password.";
     } else {
          mysql_query("SELECT * FROM `users` WHERE `user` = '$user' AND `password.md5` = '$password'");
          if(mysql_num_rows() == 1) {
               // login successfull 
               session_start();
               $_SESSION['username'] = $username;
               header("Location: loggedin.php");
          } else {
               echo "Invalid username or password.";
          }
     }
} else {
     include  ('form.php');
}

?>
于 2013-01-26T11:33:14.610 に答える