我的PHP代码告诉我,我的用户名在第12行没有定义,但我认为我已经定义了它

我的PHP代码告诉我,我的用户名在第12行没有定义,但我认为我已经定义了它,php,html,Php,Html,我很难理解为什么每当我尝试加载此页面时,我的代码都会告诉我用户名未定义。错误是注意:未定义索引:第12行/home/jmask072/public_html/login.php中的用户名。感谢您的帮助。如果我没有定义它,我将如何定义它 <?php $users = array("user" => '$2y$10$yHL4GKr4pKxnBJ1L2xlqYuI/k0kviae2NbIQNJLFeXgVclT2hZeDi'); $isLogge

我很难理解为什么每当我尝试加载此页面时,我的代码都会告诉我用户名未定义。错误是注意:未定义索引:第12行/home/jmask072/public_html/login.php中的用户名。感谢您的帮助。如果我没有定义它,我将如何定义它

<?php
    $users = array("user" => '$2y$10$yHL4GKr4pKxnBJ1L2xlqYuI/k0kviae2NbIQNJLFeXgVclT2hZeDi');
        $isLoggedIn = false;
        $errors = array();
        $required = array("username", "pass");
        foreach ($required as $key => $value) {
            if (!isset($_POST[$value]) || empty($_POST[$value])) {
                $errors[] = "please fill out the form";
            }
        }
        
        if (array_key_exists($_POST['username'],$users)) {
            $userPassword = $_POST['pass'];
            $dbPass = $users[$_POST['username']];
            if (password_verify($userPassword,$dbPass) === true) {
                $isLoggedIn = true;
            } else {
                $isLoggedIn = false;
                $errors[] = "Username not found or password incorrect";
            }
                
        } else {
            $errors[] = "Username not found or password incorrect";
        }

require_once("Template.php");

$page = new Template("My Login");
$page->addHeadElement("<link rel=\"stylesheet\" href=\"styles.css\">");
$page->addHeadElement("<script src='hello.js'></script>");
$page->finalizeTopSection();
$page->finalizeBottomSection();

print $page->getTopSection();

if (count($errors) > 0) {
    foreach ($errors as $error) {
        print "Error";
    }
}
else if ($isLoggedIn === true) {
    print "Hello, you are logged in";
}

    
    
print "<form action =\"login_action.php\" method =\"POST\" class=\"form-signin\">";
print "<h1>Please sign in</h1>\n";
print "<label for=\"inputUser\">Username</label>";
print "<input type=\"password\" name=\"pass\" id=\"inputPassword\" placeholder=\"password\">";
print "<button type=\"submit\"> Sign in</button>";

print $page->getBottomSection();
?>

这里的问题是您在一个
GET
请求上访问
$\u POST
变量,您要查找的值不会被设置,因为表单尚未填写并发送到服务器,您也没有为用户输入名称的输入,但您尝试使用
$\u POST['username'访问它

在尝试访问变量之前,您必须检查请求是
POST
还是
GET
,因为它们可能还不存在,并且还需要为用户名添加一个输入,以便在发布时可以访问

<?php

$errors = array();
$isLoggedIn = false;

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $users = array("user" => '$2y$10$yHL4GKr4pKxnBJ1L2xlqYuI/k0kviae2NbIQNJLFeXgVclT2hZeDi');
    $required = array("username", "pass");

    foreach ($required as $key => $value) {
        if (!isset($_POST[$value]) || empty($_POST[$value])) {
            $errors[] = "please fill out the form";
        }
    }

    if (array_key_exists($_POST['username'], $users)) {
        $userPassword = $_POST['pass'];
        $dbPass = $users[$_POST['username']];

        if (password_verify($userPassword, $dbPass)) {
            $isLoggedIn = true;
        } else {
            $isLoggedIn = false;
            $errors[] = "Username not found or password incorrect";
        }
    } else {
        $errors[] = "Username not found or password incorrect";
    }
}

require_once("Template.php");

$page = new Template("My Login");
$page->addHeadElement("<link rel=\"stylesheet\" href=\"styles.css\">");
$page->addHeadElement("<script src='hello.js'></script>");
$page->finalizeTopSection();
$page->finalizeBottomSection();

print $page->getTopSection();

if (count($errors) > 0) {
    foreach ($errors as $error) {
        print "$error<br/>" . PHP_EOL;
    }
} else if ($isLoggedIn === true) {
    print "Hello, you are logged in";
}

?>

<form action="login_action.php" method="POST" class="form-signin">
    <h1>Please sign in</h1>
    <label for="inputUser">Username</label>
    <input type="text" name="username" id="inputUser">
    <label for="inputPassword">Password</label>
    <input type="password" name="pass" id="inputPassword">
    <button type="submit">Sign In</button>
</form>

<?php print $page->getBottomSection(); ?>

No您在表单中的什么位置发布了名为
username
的输入,因此
$\u post['username']
始终是未定义的。另一个注意事项是,您可以将HTML分离出来,使其位于PHP标记
之外,而不是打印它们。实际上,您似乎没有一个名为“username”的输入元素。这是整个源文档吗?您需要一个名为
username
的输入,以便在POST请求中填充
$\u POST['username']
,您还假设get请求中存在POST值,您应该检查
$\u服务器['request\u METHOD']
在检查post值是否在访问前设置之前。这是完整的源代码,我如何实现输入“用户名”?我想我已经在代码顶部实现了它。