0

我正在构建一个登录函数来检查用户名和密码组合是否位于数据库中。

但是当我这样做时,我还想检查用户名和密码组合是否是一个活动帐户。因此,我可以告诉用户他们是否因为帐户未激活或密码不正确而无法登录。

我想知道是否有一种方法可以一次完成两项检查。目前我已经设置了一个顺序搜索,首先获取通行证/用户组合,然后检查他们的帐户是否处于活动状态。这样我一次登录的查询量增加了一倍,不好。

这是我到目前为止所拥有的。

$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

您只需要运行第二个 SQL SELECT isActivated FROM User WHERE Username=? 并且通过=?

如果用户名和密码不存在,$row_cnt 将为 0。如果不为 0,可以查看 isActivated 列。

于 2013-02-03T20:14:40.233 回答