php - PHP $_SESSION 变量未显示值
问题描述
我正在页面的标题中创建一个文本,其中包含已登录用户的名称。它工作了一段时间,但是当我去做其他事情时,它就停止了。就像 $_SESSION['ime'] 持有一个空值;我很确定我没有碰任何与此相关的东西。
这是一些代码:我的主要 php 文件:
session_start();
// initializing variables
$username = "";
$email = "";
$errors = array();
// connect to the database
$db = mysqli_connect('localhost', 'root', '', 'audiprojekat');
// REGISTER USER
if (isset($_POST['reg_user'])) {
$vrsta = "KO";
$ime = mysqli_real_escape_string($db, $_POST['ime']);
$prezime = mysqli_real_escape_string($db, $_POST['prezime']);
$username = mysqli_real_escape_string($db, $_POST['username']);
$email = mysqli_real_escape_string($db, $_POST['email']);
$password = mysqli_real_escape_string($db, $_POST['password']);
// first check the database to make sure
// a user does not already exist with the same username and/or email
$user_check_query = "SELECT * FROM registrovani WHERE username='$username' OR email='$email' LIMIT 1";
$result = mysqli_query($db, $user_check_query);
$user = mysqli_fetch_assoc($result);
if ($user) { // if user exists
if ($user['username'] === $username) {
array_push($errors, "Username already exists");
}
if ($user['email'] === $email) {
array_push($errors, "email already exists");
}
}
// Finally, register user if there are no errors in the form
if (count($errors) == 0) {
$password = md5($password);//encrypt the password before saving in the database
$query = "INSERT INTO registrovani (ime, prezime, username, email, password, vrsta)
VALUES('$ime','$prezime','$username', '$email', '$password', '$vrsta')";
mysqli_query($db, $query);
$_SESSION['username'] = $username;
$_SESSION['ime'] = $ime;
$_SESSION['success'] = "You are now logged in";
header('location: user.php');
}
}
if (isset($_POST['login_user'])) {
$username = mysqli_real_escape_string($db, $_POST['username']);
$password = mysqli_real_escape_string($db, $_POST['password']);
if (empty($username)) {
array_push($errors, "Username is required");
}
if (empty($password)) {
array_push($errors, "Password is required");
}
if (count($errors) == 0) {
$password = md5($password);
$query = "SELECT * FROM registrovani WHERE username='$username' AND password='$password'";
$results = mysqli_query($db, $query);
if (mysqli_num_rows($results) == 1) {
$_SESSION['username'] = $username;
$_SESSION['ime'] = $ime;
$_SESSION['email'] = $email;
$_SESSION['success'] = "You are now logged in";
header('location: user.php');
}else {
array_push($errors, "Wrong username/password combination");
}
}
}
?>
这是html页面:
<?php include('server.php'); ?>
<p id="user_cont" style="color: white; margin-left: 80%; margin-top: 0; margin-bottom: 0; width: 20%; background-color: black; padding: .5%; font-family: 'Rajdhani', sans-serif; font-size: 140%; border-left: thick red solid;">
<?php
if(isset($_SESSION['username'])){
echo $_SESSION['ime'];
echo " <a href='logout.php' style='color: red; text-decoration: none;'>Odjavite se</a>";
}
else echo " <a href='login.php' style='color: white; text-decoration: none;'>Prijavite se</a>";
?>
</p>
$_SESSION['username'] 和 $_SESSION['password'] 没问题,但 $_SESSION['ime'], $_SESSION['prezime'], $_SESSION['email'] 是空的。
我检查了 mySQL 数据库,一切都正确写入。
解决方案
您的程序有 2 个步骤,1. reg_user,2. login_user
我想你是说登录到你的页面后一些参数是空的。但是,您没有从 Select 查询中读取数据。
从查询中读取并存储 SESSION 数据的示例代码:
$row = $results->fetch_assoc();
$_SESSION['ime'] = $row['ime'];
$_SESSION['email'] = $row['email'];
$_SESSION['prezime'] = $row['prezime'];
参考: https ://www.w3schools.com/php/func_mysqli_fetch_assoc.asp
最后,请阅读更多关于 PDO 或 MYSQLI 的 SQL 注入。
推荐阅读
- javascript - DataTables垂直页面适合窗口调整大小
- php - php嵌套foreach意外结果
- hive - DbVisualizer 在使用 kerberos 身份验证连接到 hive 时出错
- python - 我可以从外部类的类方法中调用内部类吗?
- php - 引导表中的分页
- ios - 如何使用 ARKit 在两个 ARSCNViews 中显示相同的场景?
- kubernetes - CoreOS VM 上 Kubernetes 的 Flannel pod 故障(和 DNS)
- html - 从 url 拖放到输入文件
- python - 如何在 Python 3.6 上使用 conda 或 pip 安装 pygraphviz?
- c# - Posting a message box when database records are added, or when an exception is generated