0

ユーザー名とパスワードの組み合わせがデータベースにあるかどうかを確認するログイン機能を構築しています。

しかし、これを行っている間、ユーザー名とパスワードの組み合わせがアクティブなアカウントであるかどうかも確認したいと思います。したがって、アカウントがアクティブでないためにログインできないか、パスワードが間違っているかをユーザーに伝えることができます。

一度に両方のチェックを実行できる方法があるかどうかを知りたかったのです。現在、パス/ユーザーのコンボを最初に取得してから、アカウントがアクティブかどうかを確認するシーケンシャル検索をセットアップしました。この方法では、1 回のログインでクエリの量が 2 倍になりますが、良くありません。

これが私がこれまでに持っているものです。

$selectUser = "SELECT FirstName, LastName FROM User WHERE Username=? And Pass=?";
            $loginStmt = mysqli_prepare($link, $selectUser);
            mysqli_stmt_bind_param($loginStmt, 'ss', $u1, $p1);
            if (!mysqli_stmt_execute($loginStmt))
            {
                mysqli_close($link);
                die("The system is not available, try again later");
            }
            mysqli_stmt_store_result($loginStmt);
            $row_cnt = mysqli_stmt_num_rows($loginStmt);
            if ($row_cnt == 0)
            {
                $Error .= 'Invalid Username/Password. <br />';
            }
            else
            {
                $isActive = "SELECT isActivated FROM User WHERE Username=? And Pass=?";
                $isActiveStmt = mysqli_prepare($link, $isActive);
                mysqli_stmt_bind_param($isActiveStmt, 'ss', $u1, $p1);
                mysqli_stmt_bind_result($isActiveStmt,$active);
                mysqli_stmt_fetch($isActiveStmt);
                if($active != 1)
                {
                    $Error = 'Your account has not been activated yet, check email or contact admin'.
                }
                else
                {
                    mysqli_stmt_bind_result($loginStmt, $lname, $fname);
                    mysqli_stmt_fetch($loginStmt);
                    $_SESSION['Name'] = $lname." ".$fname; 
                    $_SESSION['Username'] = $txtUsername;
                    header("Location: Default.php");
                    //mysqli_close($link);
                    //$Error = "success";
                    exit();
                }
            }
4

1 に答える 1

1

2番目のSQLSELECTisActivated FROM User WHERE Username =?を実行するだけで済みます。そしてPass=?

ユーザー名とパスが存在しない場合、$ row_cntは0になります。0でない場合は、isActivated列を確認できます。

于 2013-02-03T20:14:40.233 に答える