【发布时间】:2016-07-10 00:23:58
【问题描述】:
我正在为我的网站上的用户创建个人资料页面,此人可以更改他/她的信息。我应该可以更改,姓名,姓氏,用户名,代码等。但我已经从用户名开始。
当一个人登录时,我将用户名存储在会话中:
index.php
<?php
if( !isset( $_SESSION['username'])) include('resources/auth/login.php');
else exit( header('Location: home.php') );
if( !isset( $_SESSION ) ) session_start();
// Logout Session
if( isset( $_GET['todo'] ) && $_GET['todo'] == 'logout'){
session_unset();
session_destroy();
//echo 'You have been logged out!';
}
?>
我做了一个测试
profile.php:
<?php
if( !isset( $_SESSION ) ) session_start();
?>
<?php //echo $_SESSION['username'];?>
这就是我的用户名
但是如果我想从 mysql 数据库中调用属于该用户名的名字,我应该使用 session[username] 吗?我开始为它创建一个 SQL 查询:
<?php
$stmt = $mysqli->prepare("SELECT firstname FROM login");
$stmt->execute();
$fname = null;
$stmt->bind_result($fname);
while($stmt->fetch()) {
echo $fname;
}
$stmt->close();
$mysqli->close();
?>
这可行,但会调用数据库中的所有名字。所以我尝试将 u_id,即 db = 中的 PK 设置为存储的会话变量:
$stmt = $mysqli->prepare("SELECT firstname FROM login WHERE u_id=$username");
和
$stmt = $mysqli->prepare("SELECT firstname FROM loginWHERE u_id = '.$_SESSION[username]'";
但在这里我得到一个错误: 未定义变量:profile.php 中的用户名
谁能看出这是为什么?
【问题讨论】:
-
您开始会话之后试图访问/使用 $_SESSION 值?这是没有意义的。 PHP 不能时间旅行,并且不会在调用 session_start() 后追溯重新运行用户名测试。请注意,对
set会话的测试不是对 session_start() 的有效测试。完全有可能在没有 $_SESSION 的情况下进行会话(实际上只是一个 cookie)。请改用session_status()。 -
我看不到我之后开始会话?这是一个人登录时运行的第一个脚本。
-
如果您不调用
session_start(),那么$_SESSION是一个空白/空数组,这意味着您将永远无法在其中找到用户名。 -
抱歉,我看到我的问题中遗漏了一些信息。我会更新它。