PHP显示登录用户的名字和姓氏[重复]
Posted
技术标签:
【中文标题】PHP显示登录用户的名字和姓氏[重复]【英文标题】:PHP display first and last name of logged in user [duplicate] 【发布时间】:2021-11-27 00:09:11 【问题描述】:我想显示登录用户的姓名,但由于登录时没有输入姓名的字段,会话只获取电子邮件和密码值。如何显示名称?
我的server.php
<?php
include_once "inc/user-connection.php";
session_start();
$name = mysqli_real_escape_string($conn, $_POST['name']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$username = mysqli_real_escape_string($conn, $_POST['username']);
if (isset($_POST['admin-sign-in']))
if (!empty($email))
if (!empty($password))
$sql = 'SELECT email, password FROM admin WHERE email = ?';
// preparing the SQL statement
if ($stmt = $conn->prepare($sql))
$stmt->bind_param('s', $_POST['email']);
$stmt->execute();
$stmt->store_result(); // Store the result so we can check if the account exists in the database.
// If email exists in sign_up table
if ($stmt->num_rows > 0)
$stmt->bind_result($email, $password);
$stmt->fetch();
// if password user enters matches the one in the database
if (password_verify($password, $hashed_password))
$query = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($query);
$_SESSION['name'] = $row['name'];
// upon successful login, redirect user to landing apge
header("location: dashboard.php");
die();
else
// Incorrect password
header("location: ../html/sign-in-error.html");
die();
else
// Incorrect username
header("location: ../html/sign-in-error.html");
die();
$stmt->close();
else
header("location: ../html/404-error.html");
die();
else
header("location: ../html/404-error.html");
die();
我的dashboard.php
<?php
session_start();
?>
<div class="d-block">
<h1 class="lead fw-normal text-muted mb-4 px-lg-10">Hello, <?php echo $_SESSION['name']; ?></h1>
</div>
登录页面
仪表板:应该显示名字和姓氏,但为空(它可以显示电子邮件,但我不希望这样)
$name
变量包含名字和姓氏,表中只有一列 name。
【问题讨论】:
您的代码中的逻辑并没有真正的意义。首先,您从 admin 中选择所有已发布电子邮件的字段(对于 SQL 注入也是开放的)。然后,如果您从数据库中获取值(始终假设您确实找到了某些东西)。如果电子邮件和密码不为空,您是否再次获取用户数据?这次只从数据库中选择电子邮件和密码?这没有任何意义。 您还应该永远以纯文本形式存储密码!您应该只存储使用password_hash() 生成的密码哈希,并使用password_verify() 验证密码和哈希。 关于您的实际问题,只需在您的选择中获取名称并将其添加为会话变量,就像您处理电子邮件一样。 您不应使用mysqli_real_escape_string()
手动转义数据。到处使用准备好的语句(出于某种原因,您只为一个请求执行此操作,而不为其他请求执行)
根据建议:我在检查密码时添加了用于注册的准备声明 password_hash()
和 password_verify()
。我做对了吗??也有人可以提供实际答案吗?
【参考方案1】:
就像对您的问题的评论一样,在登录时,只需在检查用户登录详细信息时从数据库中获取名称,为了减轻您的痛苦,您可以将这些名称存储到您的 $_SESSION
以便您可以随时调用它如果会话结束则需要它。
$_SESSION['first_name'] = $name;
不应该比这更难。唯一令人困惑的是,您将注册存储到与登录时使用的不同的表中,但似乎管理员和用户表是分开的。
Offtopic:您可以将列添加到用户表中,例如 admin
和 BOOLEAN
或 rank
以及实际排名名称
【讨论】:
以上是关于PHP显示登录用户的名字和姓氏[重复]的主要内容,如果未能解决你的问题,请参考以下文章
通过 PhP 将 HTML 表单发送到电子邮件时遇到问题 [重复]
PHP - 针对 Windows 2003 Active Directory 的 LDAP 身份验证(用户 ID 不同于名字和姓氏)