php - 我如何在我所有页面的标题上登录后调用我的用户名 PHP mysql
问题描述
我得到了我的user.php、header.php和indexph.php。登录后,我可以显示我的用户数据,但我想在我浏览的每个页面之间的标题中调用它。我的标题是我网站上的另一个文件,我使用“require_once('header.php')”来在indexph.php或user.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☠</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
解决方案
因此,在您的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
}
关于会话及其变量的事情是,它们被保存在服务器端,因此您可以在并发请求和不同文件中使用它们,直到它们被销毁。
但我发现您发布的代码存在几个问题:
- 您正在使用
mysql_*
长期不推荐使用的函数(自 PHP 5.5,2013 年 6 月起)。检查,为什么你不应该在这里使用它们。 - 您对 SQL 注入攻击持开放态度。在这里阅读它。
- 您正在将密码以清晰易读的文本保存到数据库中。如果您遇到数据库泄露,所有用户名/密码组合都会向全世界开放。也许有些人在其他网站上使用了这些相同的凭据。尝试在您的代码中使用
password_hash
和password_verify
函数。但首先,请熟悉您当前的代码 :) - 不是问题,而是(也许)个人喜好。用英语编写你的代码,这样会更容易获得帮助——就像这里的 SO 一样。不会说您的语言的人将能够更好地理解您的代码。此外,如果在某个时候您决定将项目交给一个不太热心甚至根本无法理解您的语言的人,他们会有点挣扎。
推荐阅读
- parse-platform - 在客户端在 LiveQuery 上接收之前修改对象
- elasticsearch - APM 服务器仍未连接到 Elasticsearch
- linux - 启动詹金斯时它正在启动但是当检查詹金斯的状态时它说活动(退出)
- html - 如何将块放置在列的底部?
- gem5 - 除了主 ELF 可执行文件外,如何从命令行预加载 gem5 中给定原始字节的内存?
- jquery - jQuery .click 与 .change
- r - 交叉连接计算新变量
- vue.js - Vuetify 数据表:扩展行时获取数据
- rabbitmq - RabbitTemplate 的 setChannelTransacted 标志导致消息未传递到队列
- r - 修改 GGplot2 对象