如何在登录后隐藏登录表单


How to hide login form after login

我是PHP新手。所以我为我的网站做了一个登录信息,在用户登录后我很难隐藏表单。我希望它在用户成功登录后消失。我的代码如下,

<?php
    include "connect.php";
    $_SESSION['backurl'] = basename($_SERVER['PHP_SELF']);
?>
<div class = "loginform">  
            <form name = "login" action = "login.php" method = "post" accept-charset = "utf-8"> 
                <?php
                     echo $_SESSION['username'];
                    //IF LOGADO TIRAR FORM. 
                ?>
                <ul>  
                    <li><label for = "usermail" class = "letralogin" >Email</label>  
                    <input type = "email" name = "usermail" placeholder = "yourname@email.com" required></li> 
                    <p>
                    <li><label for = "password" class = "letralogin">Password</label>  
                    <input type = "password" name = "password" placeholder = "password" required></li> 
                    <p>                 
                    <input type = "submit" name = "login" value = "Login"></li>
                </ul>                   
            </form>
            </div>
            <div class = "divreg">
                <input type = "button" onclick = "location.href = 'registo.php';" value = "Registo" class = "buttreg"/>
            </div>

这是我在login.php,上的代码

<?php
    include "connect.php";
    if(isset($_POST['login']))
    {
        $username = $_POST['usermail'];
        $password = sha1($_POST['password']);
        $sql = "select * from utilizador where email = '$username' and password = '$password'";
        $result = mysqli_query($conn, $sql);
        if (mysqli_num_rows($result) > 0)
        {
            echo 'OK';
            $_SESSION['username'] = $username;
            header('Location: ' . $_SESSION['backurl']);
        }
        else 
        {
            echo 'wrong password';
            header('Location: ' . $_SESSION['backurl']);
        }
    }
    else
    {
        header('Location: inicio.php');
    }
?>

您可以在顶部的登录文件中检查会话:

include "connect.php";
session_start();
    $_SESSION['backurl'] = basename($_SERVER['PHP_SELF']);
if(isset($_SESSION['username']) && !empty($_SESSION['username']) )   {
       header('Location: ' . $_SESSION['backurl']);
}

如果您有两个单独的文件,则需要在两个文件中使用session_start函数。

假设只有在用户登录时才设置username会话变量,这将是您想要的。

if (!isset($_SESSION['username'])) {
?>
HTML FORM CODE GOES HERE
<?php
}
?>

这样做的目的是检查您是否设置了用户名,如果没有,如果您将其放置在PHP标记之间,它将显示登录表单的HTML。此外,您可以在其中放入一点JavaScript,以隐藏您的loginformdiv,这也将从页面中删除登录表单。

您应该检查您的会话是否为空。像这样:

session_start();
if(!empty($_SESSION['username']) {
       ?>
       <!--your login form-->
       <?php
} else {
       ?>
       main page.
       <?php
}

这是针对您想要的情况,当用户没有登录时,除了登录部分之外,不会为他显示任何页面。或者,如果你只想在登录后隐藏登录表单,它会是这样的:

session_start();
if(empty($_SESSION['username']) {
       ?>
       <!--your login form-->
       <?php
}
?>
<!--main part details. -->

前言:

当前,您在头之前输出的是头上方的回声,仅此一点就会杀死您的代码。

要么回显,要么回显标头;你不可能两者都有,而不是你现在使用它们的方式。

  • 在这里了解更多信息:如何修复";标头已发送";PHP中的错误

这是一个基本方法,正如我在评论中提到的,为表单代码分配一个变量,并封装在引号中。

您可以以以下骨架/基本模型为基础,然后从中提取。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);
session_start();
$_SESSION['user'] = "John";
?>
<!DOCTYPE html>
    <head><title></title></head>
    <body>
<?php 

$form = '
            <form name = "login" action = "login.php" method = "post" accept-charset = "utf-8">
                <ul>  
                    <li><label for = "usermail" class = "letralogin" >Email</label>  
                    <input type = "email" name = "usermail" placeholder = "yourname@email.com" required></li> 
                    <p>
                    <li><label for = "password" class = "letralogin">Password</label>  
                    <input type = "password" name = "password" placeholder = "password" required></li> 
                    <p>                 
                    <input type = "submit" name = "login" value = "Login"></li>
                </ul>                   
            </form>
';

if (isset($_SESSION['user']) && $_SESSION['user'] == 'John') {
    echo "Welcome " . $_SESSION['user'];
    }
    else{ 
    echo $form;
    }
?>
    </body>
 </html>