为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
炎炎设计 2022-05-27 10:03:51
我想检查用户登录条目数据以查找它们是否存在。假设我们在数据库中只有 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");            }        }
查看完整描述

2 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

我相信你想检查单个用户。

  • “我想检查用户登录条目数据以查找它们是否存在。” - 好吧,我不熟悉您的应用程序逻辑,但要检查是否存在某些用户,您只需从 db 中获取一些参数。如果存在则获取单个用户,否则获取空行。对?

  • “我知道如果我想用数据库中的数据检查用户登录条目数据,我应该使用 while 循环。” - 如何?谁告诉你的。如果您获取其中的许多并对数据做一些事情,例如,您需要这样的循环。列出他们?

  • 如果您确实有某些情况,您必须获取所有用户并检查您上面在代码中编写的内容,请不要重定向到那里,请将一些数据保存在数组中,例如 $array['passed'] 和 $array['failed'] 然后如果需要,编写另一个逻辑来重定向。

  • 显然,在循环内多次重定向是不可能的。


查看完整回答
反对 回复 2022-05-27
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

$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 query

while($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       |   password1

user2       |   password2

user3       |   password3

user4       |   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);


查看完整回答
反对 回复 2022-05-27
  • 2 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号