首页 > 解决方案 > 我如何在我所有页面的标题上登录后调用我的用户名 PHP mysql

问题描述

我得到了我的user.phpheader.phpindexph.php。登录后,我可以显示我的用户数据,但我想在我浏览的每个页面之间的标题中调用它。我的标题是我网站上的另一个文件,我使用“require_once('header.php')”来在indexph.phpuser.php上调用它,但是当我退出user.php时,我丢失了用户名数据,这是我的代码的一部分。

USER.PHP(不是全部)

<?php include("conexion.php");
require_once("header.php") ?>
<form action="" method="POST" id="loginform">
   <input type="text" placeholder="Usuario" name="usuar">
   <input type="password" placeholder="Contraseña" name="pw">
   <button type="submit" class="btn" name="logi">Login</button>
   <a href="">Olvidaste la contraseña?</a>
</form>
?>

头文件.php

<?php
include("conexion.php");
if(isset($_POST['logi'])){
   $u=$_POST["usuar"];
   $c=$_POST["pw"];

   $sql="SELECT * FROM usuario
   WHERE usuario='".$u."' AND contr='".$c."' ";

   $res=mysql_query($sql,$con);
   $can=mysql_num_rows($res);
   $b=mysql_fetch_array($res);

   if($can == 1)
   {

    echo "Login OK by ".$u;
    //echo"".$_SESSION['id_user'];
    //header('location:indexph.php');//te envia luego de logear correctamente
    echo "<form action='logout.php' method='POST'>";
    echo "<button type='submit' name='logo'>Logout</button>";
    echo "</form>";
}
else
{
    echo "Login Failed";
}

}

?>

<header id="header">
<div class="navbar">
<nav>
            <ul id="menuitems">
                <li><a href="../index.html">Home</a></li>
                <li><a href="indexph.php">Productos</a></li>
                <li><a href="añadir.html">Añadir</a></li>
                <li><a href="detalle productos.html">D.P&#9760;</a></li>
                <li><a href="account.html">Cuenta</a></li>
            </ul> 
</nav>

            <a href="kart.php" class="nav-item nav-link active">
            <img src="../img/cart.png" width="50px" height="50px">
            </a>
            <!---here i would like to call my username so it shows in every page that calls 
            header.php---->
</div>
</header>

这是我的“ indexph.php ”页面之一,我想在其中显示我的用户名只是调用 header.php

<?php
session_start();
require_once('header.php');
if(isset($_SESSION['usuar']))
{
   echo"<br>Logged by ".$_SESSION['usuar'];

}
?>
<html> <!--- here it would be all html, images and everything---> </html>

但我不能,那个“回声”不起作用,问题是想要标题上的用户名,这就是所有请帮助我无法解决这个问题:c

标签: phpmysqlsession

解决方案


因此,在您的header.php中,您需要在登录后设置会话变量以供以后使用。

if($can == 1) {
    $_SESSION['id_user'] = $b['id']; // or however your id column is called in the database
    // of course, you can also save the username or whatever value you want in a session variable
}

关于会话及其变量的事情是,它们被保存在服务器端,因此您可以在并发请求和不同文件中使用它们,直到它们被销毁。

但我发现您发布的代码存在几个问题:

  1. 您正在使用mysql_*长期不推荐使用的函数(自 PHP 5.5,2013 年 6 月起)。检查,为什么你不应该在这里使用它们。
  2. 您对 SQL 注入攻击持开放态度。在这里阅读它。
  3. 您正在将密码以清晰易读的文本保存到数据库中。如果您遇到数据库泄露,所有用户名/密码组合都会向全世界开放。也许有些人在其他网站上使用了这些相同的凭据。尝试在您的代码中使用password_hashpassword_verify函数。但首先,请熟悉您当前的代码 :)
  4. 不是问题,而是(也许)个人喜好。用英语编写你的代码,这样会更容易获得帮助——就像这里的 SO 一样。不会说您的语言的人将能够更好地理解您的代码。此外,如果在某个时候您决定将项目交给一个不太热心甚至根本无法理解您的语言的人,他们会有点挣扎。

推荐阅读