0

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

我想根据$_SESSION['user_id']但未分配数据库中的 user_id 来回显用户信息,$_SESSION['user_id']因此我进入Notice: Undefined index: user_id in帐户页面$user_id = $_SESSION['user_id'];print_r($_SESSION['user_id']);在线。

我确实session_start();在页面顶部。

班级

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;
   }
}

登录

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 />';
        }
    }
}

账户页面

$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!';
}
4

2 回答 2

1

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.

于 2013-03-06T03:10:56.943 回答
0

$_SESSION['user_id'] 但数据库中的 user_id 未分配给 $_SESSION['user_id'] 所以我得到注意:未定义索引:帐户页面中的 user_id

这在逻辑上是不正确的说法只有当您立即
验证它 时,它的第一部分才能被证明是正确的,即:

$_SESSION['user_id'] = ...//being populated 
var_dump($_SESSION['user_id']);die;

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

对不起,但整个问题看起来像“为我调试我的代码”。
您为什么不自己调试它,使用您手头的解释器和环境的所有功能以及必不可少的能力来尽可能多地运行它?
为什么你要求陌生人只是在精神上调试你的代码,只是用他们的大脑来运行你的代码?它在设计上是错误的,而且效率极低!
请自己调试您的代码,找到某些问题,然后询问有关它的特定问题。

于 2013-03-06T07:36:09.910 回答