我正在尝试构建一个登录页面,用户输入密码,如果它匹配" secret"一句话,用户可以探索3个选项。 我已尝试使用session_start(),并启用"身份验证"为了能够查看3个选项,但每次点击它们时,它们都会将我带回主页面。我究竟做错了什么? P.S我希望能够在成功验证后隐藏登录表单。 任何帮助都非常感谢。
<?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; ?>
答案 0 :(得分:0)
<?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的好习惯。您的代码将获得更多可重用等。
答案 1 :(得分:0)
首先,重新组织您的代码。你需要混合很多PHP和HTML才能保持良好的可读性。首先,做所有的PHP治疗。然后显示其中包含最少PHP的HTML。
对于错误,请了解每次加载页面时,您将测试$ _POST [&#34;密码&#34;] ==&#34;秘密&#34;所以每次都要重写$ _SESSION [&#34; authenticate&#34;]。