我是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>