Php PDO用户会话

Php PDO用户会话,php,session,pdo,Php,Session,Pdo,我正在将旧的mysql转换为PDO,我遇到了第一个问题 我想根据$\u会话['user\u id']回显用户信息,但数据库中的用户id未分配给$\u会话['user\u id'],因此我得到注意:未定义索引:在$user\u id=$\u会话['user\u id']的帐户页面中的用户id和打印($_会话['user\u id'])行 我确实有session_start()位于页面顶部 阶级 登录 if(设置($\u POST['login'],$\u POST['password'])){ $

我正在将旧的mysql转换为PDO,我遇到了第一个问题

我想根据
$\u会话['user\u id']
回显用户信息,但数据库中的用户id未分配给
$\u会话['user\u id']
,因此我得到
注意:未定义索引:在
$user\u id=$\u会话['user\u id']的帐户页面中的用户id
打印($_会话['user\u id'])

我确实有
session_start()位于页面顶部

阶级

登录

if(设置($\u POST['login'],$\u POST['password'])){
$login=$_POST['login'];
$password=sha1($_POST['password']);
$errors=array();
if(空($login)| |空($password))
{
$errors[]=“所有字段均为必填项!”;
} 
否则{
$user=新用户;
$log_in=$user->login($login,$password);
如果($登录){
$\会话['user\u id']=$user->user\u id;
标题('Location:account.php');
退出();
}否则{
$errors[]=“用户名或密码不正确!”;
}
}
如果(!empty($errors)){
foreach($errors作为$error)
{
回显“”,$error“
”; } } }
帐户页

$user = new User;
$user_id = $_SESSION['user_id'];
$data = $user->userInfo($user_id);

echo $data['username'],'<br />';
echo $data['email'],'<br />';

echo '<pre>';
print_r($_SESSION['user_id']);
echo '</pre>';

if(isset($_SESSION['user_id'])){

    echo '<pre>';
    print_r($data);
    echo '</pre>';

    echo $data['username'],'<br />';
    echo $data['email'],'<br />';

    }else {
    echo 'Please log in!';
}
$user=新用户;
$user\u id=$\u会话['user\u id'];
$data=$user->userInfo($user\u id);
echo$data['username'],“
”; echo$data['email'],“
”; 回声'; 打印($会话['user\u id']); 回声'; 如果(isset($\u会话['user\u id'])){ 回声'; 打印(数据); 回声'; echo$data['username'],“
”; echo$data['email'],“
”; }否则{ echo“请登录!”; }
主要问题是,您的登录方法返回数据,而您的调用代码将其视为设置内部变量:

看。。您的用户id实际上在$log\U in中,而不是在$user中。。。纠正这一点,你应该会没事的

$\u会话['user\u id']但数据库中的user\u id未分配给$\u会话['user\u id'],因此我收到通知:未定义索引:帐户页中的user\u id

$user = new User;
$user_id = $_SESSION['user_id'];
$data = $user->userInfo($user_id);

echo $data['username'],'<br />';
echo $data['email'],'<br />';

echo '<pre>';
print_r($_SESSION['user_id']);
echo '</pre>';

if(isset($_SESSION['user_id'])){

    echo '<pre>';
    print_r($data);
    echo '</pre>';

    echo $data['username'],'<br />';
    echo $data['email'],'<br />';

    }else {
    echo 'Please log in!';
}
这是逻辑上不正确的陈述
只有当您立即验证它时,才能证明它的第一部分是正确的,即:

如果它不会死掉显示正确的值-只有这样你才能说它没有被填充。否则你所有的进一步扣除都是不正确的。因为可能有1000个原因(尽管已正确填充)无法显示在另一页上。
好吧,如果它不会死在这里-把这个
var die
code移到上面,看看哪里出了问题。等等

抱歉,整个问题看起来像是“为我调试代码”。
为什么不自己调试它,利用解释器的所有功能和您手头的环境,以及不可或缺的能力,尽可能多地运行它?
为什么你让陌生人在心里调试你的代码,用他们的大脑运行你的代码?它的设计是错误的,效率极低

请自己调试代码,找出某些问题,然后问一个关于它的特定问题

在所有使用变量的页面上都有session_start吗?实际上它仍然可以工作。变量是公共的,方法作用于$user object.oops您是对的,没有看到:if($result){$this->user\u id=$result['user\u id'];}那么您是说它应该工作?那么代码有什么问题?我卡住了,救命啊。在旧的mysql中,我有
return(mysql\u result($query,0)==1)?mysql_结果($query,0,'user_id'):false
和登录页面上的会话用户id仅由
$\u会话['user\u id']=$login\u function\u name设置
$user = new User;
$user_id = $_SESSION['user_id'];
$data = $user->userInfo($user_id);

echo $data['username'],'<br />';
echo $data['email'],'<br />';

echo '<pre>';
print_r($_SESSION['user_id']);
echo '</pre>';

if(isset($_SESSION['user_id'])){

    echo '<pre>';
    print_r($data);
    echo '</pre>';

    echo $data['username'],'<br />';
    echo $data['email'],'<br />';

    }else {
    echo 'Please log in!';
}
$user = new User;
$log_in = $user->login($login, $password); 

if($log_in) {
    $_SESSION['user_id'] = $user->user_id;
$_SESSION['user_id'] = ...//being populated 
var_dump($_SESSION['user_id']);die;