猿问

我不明白下面的代码如何继续循环遍历数据库中的项目?

我想检查用户登录条目数据以查找它们是否存在。

假设我们在数据库中只有 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");

            }

        }


炎炎设计
浏览 130回答 2
2回答

小怪兽爱吃肉

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

慕码人8056858

$select_query = "select `username`,`pass` from `register`"; // Fetching ALL user accounts from register table$result= $db_connection->query($select_query); // Execute query// Loop through all rows of querywhile($row= $result->fetch_assoc()){     // If username and password matches the user's input, then set HTTP Response header to do a 302 Redirect to ../account.php    if($row["username"] === $username && $row["pass"] === $pass){        header("location:../account.php");    }    // If username and password doesn't match the user's input, then set HTTP Response header to do a 302 Redirect to ../login.php    else{        header("location:../login.php");    }}该代码有一个逻辑错误,让我们假设您的“注册表”是这样的:username    |   pass--------------------------user1       |   password1user2       |   password2user3       |   password3user4       |   password4如果用户输入正确 $username="user3" $pass="password3" ,代码仍然会输出 header("location:../login.php") 因为它是从第一行一直循环到最后表(即当循环到达最后一行“user4”时,它将处理“else”语句)。最好将您的代码更新为这样的内容(假设您使用的是 php mysqli 类):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);
随时随地看视频慕课网APP
我要回答