PHP-登录按钮不会更改为注销按钮

时间:2021-07-27 22:28:57

标签: php authentication session logout

我正在更改“登录!”当用户登录网站时,按钮到“注销”按钮。出于某种原因,即使登录后登录按钮仍显示为默认值。

这是我的标题部分,显示按钮的 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>

这是我的 login.php 文件以供额外参考

<?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>';
}

4 个答案:

答案 0 :(得分:0)

我认为您在 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>

答案 1 :(得分:0)

您的情况有问题。

在这里,您在用户登录时显示登录按钮,因为您使用 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> ";
   }
                    
 ?>

答案 2 :(得分:0)

您将要显示的 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> ";
                   
}
                    
                    ?>

答案 3 :(得分:-1)

在头文件中添加代码。

<?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> ";}?>