猿问

如果 foreach 中的语句只检查最后一个值

我正在尝试使用 php 创建一个登录系统,用于检查数据库中的用户名和密码。但问题是我在 foreach 中的 if 语句只检查我的数据库中的最后一个值。例如,如果我的数据库中有 5 个用户名和密码,我的 foreach 中的 if 语句只检查我是否输入了最后一个用户的用户名和密码,但是如果我给它一个用户名和密码,比如说第二个用户,它不会接受它。


html代码:


<!DOCTYPE html>


<head>

  <meta charset="UTF-8">

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <meta http-equiv="X-UA-Compatible" content="ie=edge">

  <title>Login</title>

</head>


<body>

  <div class="top">

    <div class="box">

      <h2>Login</h2>

      <form action="findAccount.php" method="post">

        <div class="inputBox">

          <input type="text" name="username">

          <label>Username</label>

        </div>


        <div class="inputBox">

          <input type="password" name="password">

          <label>Password</label>

        </div>


        <input type="submit" name="submit" value="Submit">

      </form>

    </div>

  </div>

</body>


</html>

php代码:


<?php

$dbh = new PDO('mysql:host=localhost;dbname=database_name', 'root', '');


$username = $_POST['username'];

$password = $_POST['password'];


$sql = $dbh->prepare("SELECT * FROM tabel_name");

$sql->execute();

$result = $sql->fetchAll();


foreach ($result as $r) {

  if ($username == $r['username'] && $password == $r['password']) {

    header('Location: mainPage.php');

  } else {

    header('Location: login.php');

  }

}


料青山看我应如是
浏览 113回答 1
1回答

达令说

header('Location: ...');就像一个终结者:它将浏览器重定向到另一个页面。在您的循环的第一次运行中,您以两种可能的方式之一使用它。你想要的是:foreach ($result as $r) {&nbsp; if ($username == $r['username'] && $password == $r['password']) {&nbsp; &nbsp; header('Location: mainPage.php');&nbsp; &nbsp; die();&nbsp; }}header('Location: login.php');顺便说一句,如果仅获取用户的用户记录并检查 0 或 1 个结果,则可以对此进行优化。很重要您将明文密码存储在数据库中。不要这样做。在某些州,这是法律禁止的!
随时随地看视频慕课网APP
我要回答