PHP $_POST["password"]


PHP $_POST["password"]

我正在尝试构建一个登录页面,用户在其中输入密码,如果它与"秘密"字匹配,用户可以探索 3 个选项。我尝试使用 session_start() 并启用"身份验证"以便能够查看 3 个选项,但每次我单击它们时,它们都会将我带回主页。我做错了什么?附言我希望在成功进行身份验证后能够隐藏登录表单。任何帮助都非常感谢。

<?php session_start(); ?>
<!DOCTYPE html>
<head>
    <title>
    </title>
</head>
<body>
<?php
$entries = array(
    array(
        'stage' => 'Stage One',
        'plan' => 'To begin your plan, you must first Blackmail a Town Mascot. This will cause the world to sit up and take notice, stunned by your arrival. Who is this Ripe Bastard? Where did they come from? And why do they look so good as a Dark Gunslinger?',
    ),
    array(
        'stage' => 'Stage Two',
        'plan' => 'Next, you will Desecrate the Internet. This will cause countless hordes of Computer Programmers to flock to you, begging to do your every bidding. Your name will become synonymous with Dear God No, as lesser men whisper your name in terror.',
    ),
    array(
        'stage' => 'Stage Three',
        'plan' => 'Finally, you will Reveal to the World your Needlessly Big Weather Machine, bringing about an End to Sanity. This will all be done from a Fake Mountain, an excellent choice if we might say. These three deeds will herald the end, and the citizens of this planet will have no choice but to elect you their new god.',
    ),
);
?>
<?php if (  isset($_POST["password"])==FALSE) : ?>
    <form action="wd.php" method="POST">
        <div>Please login</div>
        Password:<br>
        <input type="text" name="password"/>
        <br>
        <input type="submit" value="Submit"/>
    </form>
<?php else: ?>
<?php endif; ?>
<?php if (isset($_POST["password"])): ?>


    <?php if ($_POST["password"] == "secret"):
        ?>
        <?php $_SESSION["authenticate"] = 1; ?>
    <?php else: ?>
        <?php $_SESSION["authenticate"] = 0; ?>
        <a href="wd.php"></a>
    <?php endif; ?>

    <?php if ($_SESSION["authenticate"] == 1): ?>
        <?php foreach ($entries as $k => $v): ?>
            <a href="<?php echo $_SERVER['PHP_SELF'] . "?stage_id={$k}" ?>"><?php echo $entries[$k]['stage'] ?></a>
        <?php endforeach ?>
        <form method="POST">
            <button name ="stop"> Stop </button>
        </form>
        <?php if (isset($_GET["stage_id"])): ?>
            <p><?php echo $entries[$_GET["stage_id"]]['stage']; ?></p>
            <p><?php echo $entries[$_GET["stage_id"]]['plan']; ?></p>


        <?php endif; ?>
        <?php
        if (isset($_POST["stop"])):
            session_destroy();
            ?>  
        <?php endif; ?>
<?php else: ?> 
        <form action="wd.php" method="POST">
            <div>Please login</div>
            Password:<br>
            <input type="text" name="password"/>
            <br>
            <input type="submit" value="Submit"/>
        </form>
        <?php echo "invalid password"; ?>
<?php endif; ?>

首先,重新组织你的代码。你必须混合使用大量的PHP和HTML才能保持良好的可读性。首先,做所有的PHP处理。然后显示包含最少 PHP 的 HTML。

对于该错误,请了解每次加载页面时,您将测试 $_POST["密码"] == "秘密",因此每次都重写 $_SESSION["身份验证"]。

<?php
session_start();  //start the session
function loginForm($url) //gets back the login form
{
    $res = '<form action="'.$url.'" method="POST">
        <div>Please login</div>
        Password:<br>
        <input type="text" name="password"/>
        <br>
        <input type="submit" value="Submit"/>
    </form>';
    return $res;
}
function showError($message)
{
   echo "<p class='error'>".$message."</p>";
}
function login($password) //handles the login
{
    $_SESSION['authenticate'] = ($password == 'secret');
}
function logout() //handles the logout
{
    unset($_SESSION['authenticate']);
}
function isAuthenticated() //returns if someone is authenticated
{
    return isset($_SESSION['authenticate']) && $_SESSION['authenticate'];
}
if(isset($_POST['password']) //if there is a new password, you can try to login
    $error = login($_POST['password']);
if(!isAuthenticated()) //if someone isn't authenticated you can show the login form, else show the rest
{
    echo loginForm("wd.php");
    if($error) showError("Wrong password!");
}
else{
    echo "logged in";
}

看看这个,使用函数甚至去OOP是一个很好的习惯。