如何解决PHP-登录按钮不会更改为注销按钮
我正在更改“登录!”当用户登录网站时,按钮到“注销”按钮。出于某种原因,即使登录后登录按钮仍显示为默认值。
<?PHP session_start(); ?>
<!DOCTYPE html>
<html>
<head>
<Meta name="viewport" content="width=device-width,initial scale=1.0" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@400;600;700;800&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans:ital@0;1&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css">
</head>
<style>
h1 {
font-family: 'Nunito Sans',sans-serif;
font-weight: 700;
}
</style>
<body>
<nav class="navbar sticky-top navbar-expand-md navbar-dark bg-primary flex-wrap">
<div class="container-fluid">
<a class="navbar-brand" href="index.PHP">
<h1>The Demo Project</h1>
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarheader" aria-controls="navbarheader" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarheader">
<form class="col-12 d-xs-block d-md-none py-2">
<input type="search" class="form-control" placeholder="Search..." aria-label="Search">
</form>
<ul class="navbar-nav me-auto mb-2 mb-md-0 mx-0 text-center">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="index.PHP">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="post.PHP">Post</a>
</li>
<li class="nav-item">
<a class="nav-link" href="stories.PHP">Stories</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="dropdownitems" data-bs-toggle="dropdown" aria-expanded="false">Resources</a>
<ul class="dropdown-menu" aria-labelledby="dropdownitems">
<li><a class="dropdown-item" href="organizations.PHP">All Organizations</a></li>
<li><a class="dropdown-item" href="health.PHP">Health Updates</a></li>
<li><a class="dropdown-item" href="test.PHP">Data Test</a></li>
</ul>
</ul>
<form class="col-12 col-md-4 col-lg-auto me-md-3 d-none d-md-block">
<input type="search" class="form-control" placeholder="Buscar..." aria-label="Search">
</form>
<div class="d-grid gap-2 d-md-flex justify-content-md-end pb-md-0 pb-2 px-md-0">
<?PHP
if (isset($_SESSION['email'])) {
echo " <a role='button' class='btn btn-outline-light' href='loginpage.PHP'>Login!</a> ";
echo " <a role='button' class='btn btn-info' href='register.PHP'>Signup</a> ";
}
else {
echo " <a role='button' class='btn btn-outline-light' href='logout.PHP'>logout</a> ";
echo " <a role='button' class='btn btn-info' href='register.PHP'>Signup</a> ";
}
?>
</div>
</div>
</div>
</nav>
<!--
<div class="d-grid gap-2 d-md-flex justify-content-md-end pb-md-0 pb-2 px-md-0">
<a role="button" class="btn btn-outline-light" href="loginpage.PHP">Login</a>
<a role="button" class="btn btn-info" href="register.PHP">Signup</a>
</div>
($_SESSION['email'])
-->
</body>
</html>
特别是这部分:
<div class="d-grid gap-2 d-md-flex justify-content-md-end pb-md-0 pb-2 px-md-0">
<?PHP
if (isset($_SESSION['email'])) {
echo " <a role='button' class='btn btn-outline-light'
href='loginpage.PHP'>Login!</a> ";
echo " <a role='button' class='btn btn-info'
href='register.PHP'>Signup</a> ";
}
else {
echo " <a role='button' class='btn btn-outline-light'
href='logout.PHP'>logout</a> ";
echo " <a role='button' class='btn btn-info'
href='register.PHP'>Signup</a> ";
}
?>
</div>
<?PHP
// Check if the form has been submitted
$email = $_POST['email'];
$pass = $_POST['pass'];
$errors = []; //Initialize error array
if (empty($email)) {
$errors[] = 'You forgot to enter your email address';
}
if (empty($pass)) {
$errors[] = 'You forgot to enter your password';
}
if (!empty($email) && !empty($pass)){
require_once('includes/MysqLi_connect.PHP');
$q = "SELECT * from users WHERE email='$email' AND pass=SHA2('$pass',512)";
$result = @MysqLi_query($dbc,$q); //Run the query
$row= MysqLi_fetch_array($result,MysqLI_ASSOC);
if($row){
session_start();
$_SESSION['id'] = $row['id'];
$_SESSION['user_name'] = $row['user_name'];
$_SESSION['email'] = $row['email'];
//Redirect
header("Location:welcome.PHP");
//exit(); //Quit the script
}
}
$errors[] = 'Your email address and password do not match!'; //Errors if there is incorrect email/password
if (!empty($errors)){
echo '<h1>ERROR!</h1>
<p>The following error(s) occured due to:<br>';
foreach ($errors as $msg) {
echo "$msg<br>";
}
echo '</p><p><a href=loginpage.PHP>Please try again.</a></p>';
}
解决方法
我认为您在 if 语句中的逻辑可能略有偏差。
你有:
if (isset($_SESSION['email'])) {
echo " <a role='button' class='btn btn-outline-light'
href='loginpage.php'>Login!</a> ";
echo " <a role='button' class='btn btn-info'
href='register.php'>Signup</a> ";
}
else {
echo " <a role='button' class='btn btn-outline-light'
href='logout.php'>Logout</a> ";
echo " <a role='button' class='btn btn-info'
href='register.php'>Signup</a> ";
}
这是说,如果会话电子邮件存在,则显示登录名,否则显示注销。
试试:
if (!isset($_SESSION['email'])) {
echo " <a role='button' class='btn btn-outline-light'
href='loginpage.php'>Login!</a> ";
echo " <a role='button' class='btn btn-info'
href='register.php'>Signup</a> ";
}
else {
echo " <a role='button' class='btn btn-outline-light'
href='logout.php'>Logout</a> ";
echo " <a role='button' class='btn btn-info'
href='register.php'>Signup</a> ";
}
您甚至可以将注册按钮移出逻辑以保持代码干燥。
看起来像:
<div class="d-grid gap-2 d-md-flex justify-content-md-end pb-md-0 pb-2 px-md-0">
<?php
if (!isset($_SESSION['email'])) {
echo " <a role='button' class='btn btn-outline-light' href='loginpage.php'>Login!</a> ";
} else {
echo " <a role='button' class='btn btn-outline-light' href='logout.php'>Logout</a> ";
}
?>
<a role='button' class='btn btn-info' href='register.php'>Signup</a>
</div>
,
您的情况有问题。
在这里,您在用户登录时显示登录按钮,因为您使用 isset 函数检查 $_SESSION['email'] 是否存在。
添加一个!在 isset 之前并在用户登录时删除注册按钮。
<?php
if (!isset($_SESSION['email'])) {
echo " <a role='button' class='btn btn-outline-light' href='loginpage.php'>Login!</a> ";
echo " <a role='button' class='btn btn-info' href='register.php'>Signup</a> ";
} else {
echo " <a role='button' class='btn btn-outline-light' href='logout.php'>Logout</a> ";
}
?>
,
您将要显示的 HTML 按钮放置在错误的条件块中。代码可以实现如下。
<?php
if (isset($_SESSION['email'])) {
// the logout button should be placed inside of this condition block.
echo " <a role='button' class='btn btn-outline-light'href='logout.php'>Logout</a>";
echo " <a role='button' class='btn btn-info' href='register.php'>Signup</a> ";
}
else {
// the login button show only be shown if the session has not yet been created.
echo " <a role='button' class='btn btn-outline-light' href='loginpage.php'>Login!</a> ";
echo " <a role='button' class='btn btn-info' href='register.php'>Signup</a> ";
}
?>
,
在头文件中添加代码。
<?php
if (isset($_SESSION['email']))
{ echo " <a role='button' class='btn btn-outline-light' href='logout.php'>Logout</a> ";echo " <a role='button' class='btn btn-info href='register.php'>Signup</a> ";}
else{ echo " <a role='button' class='btn btn-outline-light' href='loginpage.php'>Login!</a> "; echo " <a role='button' class='btn btn-info' href='register.php'>Signup</a> ";}?>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。