Php 我能';我不明白下面的代码是如何继续在数据库中的项之间循环的?

Php 我能';我不明白下面的代码是如何继续在数据库中的项之间循环的?,php,authentication,while-loop,Php,Authentication,While Loop,我想检查用户登录条目数据,以确定它们是否存在。 假设数据库中只有10条记录(10个用户)。 我知道如果我想用数据库中的数据检查用户登录条目数据,我应该使用while循环。 正如您在下面的代码中看到的,我使用while循环和fetch_assoc方法从数据库中获取每条记录。 下面的代码工作正常 但我无法理解循环中“if语句”的工作流程。 获取数据库中的第一条记录。 fetch_assoc方法从数据库中获取第一条记录,以使用用户输入数据检查它。然后“if语句”检查用户数据和获取的数据。让我困惑的

我想检查用户登录条目数据,以确定它们是否存在。
假设数据库中只有10条记录(10个用户)。
我知道如果我想用数据库中的数据检查用户登录条目数据,我应该使用while循环。
正如您在下面的代码中看到的,我使用while循环和fetch_assoc方法从数据库中获取每条记录。

下面的代码工作正常

但我无法理解循环中“if语句”的工作流程。

获取数据库中的第一条记录。
fetch_assoc方法从数据库中获取第一条记录,以使用用户输入数据检查它。然后“if语句”检查用户数据和获取的数据。让我困惑的是,若数据和第一条记录不匹配,else语句必须将用户返回到登录页面。我的意思是只检查了一行
-如何使用用户输入数据检查其他记录
-如何从else语句跳转到while循环

你能详细解释一下整个代码吗

    $select_query= "select `username`,`pass` from `register`";
    $result= $db_connection->query($select_query);

        while($row= $result->fetch_assoc()){
            if($row["username"] === $username && $row["pass"] === $pass){
                header("location:../account.php");
            }else{
                header("location:../login.php");
            }
        }

我相信你想检查单用户

  • “我想检查用户登录条目数据,以确定它们是否存在。”-我不熟悉您的应用程序逻辑,但要检查某个用户是否存在,您只需使用一些参数从数据库中获取。如果存在,则获取单个用户,否则获取空行。对吧?
  • “我知道如果我想用数据库中的数据检查用户登录条目数据,我应该使用while循环。”-如何?谁告诉你的。如果您获取了许多数据并对这些数据做了一些处理,例如列出它们,那么您需要这样的循环
  • 如果您确实需要获取所有用户并检查上面在代码中编写的内容,请不要重定向到那里,在数组中保存一些数据,如$array['passed']和$array['failed'],然后在需要时编写另一个逻辑来重定向
  • 显然,在循环内多次重定向是不可能的
代码有一个逻辑错误,让我们想象一下您的“register”表是这样的:

username    |   pass
--------------------------
user1       |   password1
user2       |   password2
user3       |   password3
user4       |   password4
如果用户正确输入$username=“user3”$pass=“password3”,代码仍将输出标题(“location:../login.php”),因为它从第一行一直循环到表的末尾(即,当循环到达最后一行“user4”时,它将处理“else”语句)

最好将代码更新为以下内容(假设您使用的是php mysqli类):


也许可以创建一个查询来检查用户名和密码,例如使用where子句而不是循环。这是错误的逻辑,应该在while循环之后设置重定向到login。所以逻辑是检查每个记录,如果发现匹配项,则重定向到帐户。在运行完所有不匹配的记录后,您将重定向到login。显示您的“$db\u connection->query()”方法对某个问题的思考。您必须检查用户登录数据吗?什么时候用户何时登录?那么你只有一个用户,所以没有循环。有时,由于一些未知的原因,你不得不检查更多的人(我不知道如何和为什么),但你重定向了谁?我从来没有见过这样的情况:你可以批量检查用户数据吗?比如系统管理员之类的我知道若我想用数据库中的数据检查用户登录条目数据,我应该使用while循环。“-谁告诉你们的?
username    |   pass
--------------------------
user1       |   password1
user2       |   password2
user3       |   password3
user4       |   password4
session_start();

$select_query = " select `pass` from `register` where `username` = '".$db_connection->real_escape_string($username)."' "; 
$result = $db_connection->query($select_query); // Execute query

$redirectPage = '../login.php';
if( $result->num_rows == 1 ) {
    $dbPass = $result->fetch_object();

    if( $pass == $dbPass->pass ) {

        $redirectPage = '../account.php';

        $_SESSION['loginSuccess'] = true; // This let's account.php know that the user is properly authenticated

    }
}

header('Location: '.$redirectPage);