我有一个HTML网站,我在其中使用PHP实现了登录和注册系统。
如果没有用户登录,则每个页面上的导航项“ Contul meu”都需要将我发送到“ gotosigning.html”页面。 但是,当用户登录后,我希望每个页面上的菜单项“ Contul meu”将我发送到“ account.html”页面。
例如 index.html 页面中的某些菜单项:
<li class="active"><a href="index.html">Acasă</a></li>
<li><a href="login.html">login</a></li>
<li><a href="signin.html">sign in</a></li>
<li><a href="gotosigning.html">Contul meu</a></li>
gotosigning.html页面重定向到一个页面,您可以在其中选择要登录还是登录,然后根据此处的选择进入login.html或signin.html。
这是一个基本示例,当用户未登录时,但在登录时,最后一个项目应在所有页面中变为<li><a href="account.html">Contul meu</a></li>
。
login.php ,它在login.html和signup.html页面中实现
<?php
$link = new mysqli("localhost", "root", "", "graphicdesign");
if($link->connect_error){
die("ERROR: Nu s-a putut realiza conexiunea la baza de date " .$link->connect_error);
}
session_start();
$email =$_POST['email'];
$password=$_POST['pass'];
$result = $link->query("SELECT email_cl, parola_cl FROM clienti WHERE email_cl= '".$email."' AND parola_cl= '".$password."'");
if($result->num_rows == 0 ) {
echo "Datele nu corespund!";
}
else {
$_SESSION['logged in']=true;
$_SESSION['email']=$email;
echo "Login cu succes!";
echo "<script>setTimeout(\"location.href = '../account.html';\",1500);</script>";
}
?>
如何使服务器始终知道用户登录的时间?
我如何告诉HTML页面何时根据已登录状态更新导航?
我唯一想到的是复制所有页面(但是它们太多了),然后实现一些代码以测试用户是否登录到服务器,可以使用正确的菜单选择该选项...但是似乎一点也不好...
谢谢!
答案 0 :(得分:1)
首先,您需要将所有页面从.html
重命名为.php
。除此之外,这两个扩展名之间绝对没有区别:如果页面以.php
结尾,则PHP处理器知道可以解释在<?php
和?>
标记之间找到的任何PHP代码。 如果页面以.html
结尾,则将不处理PHP。 HTML将继续完全相同。立即尝试-创建一个包含一些HTML的测试页,并以.php扩展名命名。您会看到它的工作原理与以.html
要在用户登录后更改导航项,可以参考在他们登录时设置的$ _SESSION变量。 注意:请不要在会话变量名中使用空格-下划线(例如logged_in
)很好。
示例:
<?php
if ($_SESSION['logged_in'] == true){
$out = '<li><a href="file_if_logged_in.php">Contul meu</a></li>';
}else{
$out = '<li><a href="file_if_NOT_logged_in.php">Contul meu</a></li>';
}
echo $out;
?>
最重要的是-确保将session_start();
放在每个PHP文件的顶部。
作为旁注,我个人希望在PHP文件的顶部有一个<?php ?>
部分,其中包含尽可能多的PHP代码。例如,我将上述代码放在<!DOCTYPE html>
之前的文件顶部-任何HTML之前。然后,我有了所有HTML代码,并且-在它所属的位置-我回显了PHP变量,如下所示:
<li class="active"><a href="index.html">Acasă</a></li>
<li><a href="login.html">login</a></li>
<?php echo $out ?>
<li><a href="signin.html">sign in</a></li>
(我有意将您的Contul meu
菜单项放置在DEMO上,以便您可以在其上方和下方看到内容。在您的示例中,这是最后一个菜单项,不会出于演示目的而清除。)
答案 1 :(得分:0)
您可以根据条件显示菜单。使用session
在每个登录/注销和登录页面的顶部进行检查,如下所示:-
注意:您将session
作为每个文件的开头。
<?php
session_start();
if(isset($_SESSION['email']) && !empty($_SESSION['email'])){
?>
<a href="logout.php">Logout</a>
<?php
}else{
?>
<li class="active"><a href="index.html">Acasă</a></li>
<li><a href="login.html">login</a></li>
<li><a href="signin.html">sign in</a></li>
<li><a href="account.html">Contul meu</a></li>
<?php } ?>