dsqtl335227 2013-03-06 02:56
浏览 28

PDO用户会话

I'm converting old mysql to PDO and I have my first problem.

I'd like to echo out user info based on $_SESSION['user_id'] but user_id from database is not assigned to $_SESSION['user_id'] so I get Notice: Undefined index: user_id in in account page on $user_id = $_SESSION['user_id']; and print_r($_SESSION['user_id']); line.

I do have session_start(); on top of the page.

Class

class User {
public $user_id = null;

public function userInfo($user_id) {
    global $db;

    $query = $db->prepare("SELECT user_id, username, email FROM users WHERE user_id = :id");
    $query->bindValue(':id', $user_id);
    $query->execute();

    return $query->fetch();
}

public function login($login, $password){
    global $db;

    $query = $db->prepare("SELECT COUNT(user_id) as count, user_id FROM users WHERE username = :user AND password = :pass");

    $query->bindValue(':user', $login);
    $query->bindValue(':pass', $password);
    $query->execute();

    $result = $query->fetchColumn();

    if ($result) {  
        $this->user_id = $result['user_id'];
    }

    return $result;
   }
}

Login

if (isset($_POST['login'], $_POST['password'])) {

$login = $_POST['login'];
$password = sha1($_POST['password']);

$errors = array();

if (empty($login) || empty($password))
{
 $errors[] = 'All fields required!';
} 
else {
    $user = new User;
    $log_in = $user->login($login, $password); 

    if($log_in) {
        $_SESSION['user_id'] = $user->user_id;
        header('Location: account.php');
        exit();
    } else { 
            $errors[] = 'Username or password incorrect!';
           }
}

if (!empty($errors)){

        foreach ($errors as $error)
        {
            echo '<div id="error"><strong>', $error, '</strong></div><br />';
        }
    }
}

Account page

$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!';
}
  • 写回答

2条回答 默认 最新

  • duangou1868 2013-03-06 03:10
    关注

    The main problem is, your login method is returning data, and your calling code is treating it as if it is setting internal variables:

    $user = new User;
    $log_in = $user->login($login, $password); 
    
    if($log_in) {
        $_SESSION['user_id'] = $user->user_id;
    

    see.. your user_id is actually in $log_in, not in $user... correct that and you should be fine.

    评论

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值