这个网页有一个重定向循环ERR_TOO_MANY_REDIRECTS


This webpage has a redirect loop ERR_TOO_MANY_REDIRECTS

这是我的代码,我遇到了一个问题它说它有一个重定向循环

<?php
session_start();
require_once("db_connection.php");
if (!$connect) {
    die("Connection failed: " . mysqli_connect_error());
}
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM admins WHERE username='{$username}' AND password='{$password}'";
$result = mysqli_query($connect , $query);
if (isset($result)) {
    echo "success";
}
$rows = mysqli_fetch_assoc($result);
if(mysqli_num_rows($result)==1){
    $_SESSION['id'] = $rows['id'];
}
if(mysqli_num_rows($result)!=1 || !isset($rows['id'])){
    header("location: login.php");
}
?>

当我尝试启动时它会在浏览器上显示

这个网页有一个重定向循环

ERR_TOO_MANY_REDIRECTS '

你有一个基本的逻辑错误。您正在尝试在页面加载时运行此代码,但由于没有提交表单,因此还没有任何$_POST值。所以你的查询失败了。由于您的代码说,如果查询没有找到行,则返回该页,因此循环重新开始。

要解决这个问题,将所有这些代码包装在一个if语句中,该语句检查表单是否已提交。您可以检查$_SERVER超全局变量,它包含一个名为REQUEST_METHOD的键,它将告诉您页面是通过POST(提交表单时常见)还是GET("典型"页面加载时常见)请求的。如果它的值是"POST",那么表单已经提交,您可以处理数据,如果不是,忽略该代码。

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // your code goes here
}

供参考,你是开放的SQL注入