登录并签出PHP
当一个人登录时,它会将他们引导到index.php波段,让他们在我的签出页面上签出。当我改变我的方向时,当他们点击登录时,它不起作用,然后当他们去签出时,它一直要求他们登录。有人知道我哪里出了问题吗登录并签出PHP,php,html,login,Php,Html,Login,当一个人登录时,它会将他们引导到index.php波段,让他们在我的签出页面上签出。当我改变我的方向时,当他们点击登录时,它不起作用,然后当他们去签出时,它一直要求他们登录。有人知道我哪里出了问题吗 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.or
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div id="main">
<?php
include "base.php";
if(!empty($_SESSION['LoggedIn']) && !empty($_SESSION['Email']))
{
?>
<h1>Member Area</h1>
<p>Thanks for logging in! Your email address is: <b><?=$_SESSION['Email']?><b>
<ul>
<li><a href="logout.php">Logout.</a></li>
</ul>
<?php
}
elseif(!empty($_POST['email']) && !empty($_POST['password']))
{
$email = mysqli_real_escape_string($_SESSION['base'], $_POST['email']);
$password = md5(mysqli_real_escape_string($_SESSION['base'], $_POST['password']));
$checklogin = mysqli_query($_SESSION['base'], "SELECT * FROM Users WHERE Email = '".$email."' AND Password = '".$password."'");
if(mysqli_num_rows($checklogin) == 1)
{
$row = mysqli_fetch_array($checklogin);
$email = $row['Email'];
$_SESSION['Email'] = $email;
$_SESSION['LoggedIn'] = 1;
}
else
{
echo "<h1>Error</h1>";
echo "<p>Sorry, your account could not be found. Please <a href=\"index.php\">click here to try again</a>.</p>";
}
}
else
{
?>
<h1>Member Login</h1>
<p>Thanks for visiting! Please either login below, or <a href="register.php">click here to register</a>.</p>
<form method="post" action="index.php" name="loginform" id="loginform">
<fieldset>
<label for="email">Email:</label><input type="text" name="email" id="email" /> <br />
<label for="password">Password:</label><input type="password" name="password" id="password" /><br />
<input type="submit" name="login" id="login" value="Login" />
</fieldset>
</form>
<?php
}
?>
</div>
</body>
</html>
会员区
谢谢登录!您的电子邮件地址是:
更改:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div id="main">
<?php
include "base.php";
请记住,我假设session_start()位于base.php文件中。如果不是,它可能应该是:)在任何输出/头之前需要运行session_start()。如果没有它,您的会话将无法工作。要使用基于cookie的会话,必须在将任何内容输出到浏览器之前调用session_start()。
参考:
要解决此问题,您可以移动
包括“base.php”代码>
在你的第一行html之前,我相信你需要session\u start()
在两个或所有的PHP文件中,并且在用户注销时可能需要session\u destroy()
;开始时,是否在包含base.php的每个页面上都自动包含session start?可能是因为session\u start()
位于base.php
文件中,但有时情况可能并非如此。就我个人而言,在某些情况下,我把它放在所有(PHP)文件中。你必须尝试不同的组合。但大多数情况下,它必须在所有PHP文件中。@Fred如果session_start()在base.PHP中,它仍然无法工作,因为他在调用它之前已将HTML发送到浏览器。@CameronLaird请参见下面Wayne的回答。他将base.php
置于HTML之上。试试看。好的,谢谢你的帮助。它似乎仍然不起作用。会话是否应该启动();在每一页上?@CameronLaird是的。您应该在您的用户将访问的每个页面上使用session_start()。它可以工作,但当我将“”更改为“”时,它不工作。您所说的“不工作”是什么意思?发生了什么,与您预期的情况相反?当它只有索引时,在登录时会显示一个空白页面,然后您可以添加到购物篮并结帐,但当我更改它时,它会转到正确的页面,但当我签出它时,它会不断要求我登录。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div id="main">
<?php
include "base.php";
<?php include "base.php"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div id="main">