我正在我的网站上为用户制作一个个人资料页面,该人可以在其中更改他/她的信息。我应该可以更改,姓名,姓氏,用户名,代码等。但我从用户名开始。
当一个人登录时,我将用户名存储在会话中:
索引.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!';
}
?>
我已经做了一个测试
简介.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]'";
但是在这里我得到一个错误:未定义的变量:配置文件中的用户名.php
有人能明白为什么会这样吗?
如果我很了解你,我认为这个查询:
$stmt = $mysqli->prepare("SELECT firstname FROM login WHERE u_id=$username");
应该是这样的:
$stmt = $mysqli->prepare("SELECT firstname FROM login WHERE username ='.$_SESSION[username].'");
//forgive my syntax issues
如果要检索记录的用户的名字,则 where 子句的参数应该是用户的用户名,因为这是标识用户的唯一唯一方法,但是我建议您在会话中也设置用户的 ID,以便 where 参数现在采用用户的唯一 ID。这是确保您检索该特定用户的信息的更好方法,因为两个用户可能具有相同的用户名,因此当您的 where 子句将其作为参数时,它会从数据库中检索两行,这肯定会引起问题。
您没有启动会话的可能性很高。我只知道写 $_SESSION['用户名'] 而不是 u_id = ' 。$_SESSION[用户名]'