我将旧的mysql转换为PDO,我遇到了第一个问题。
我希望根据$_SESSION['user_id']
回显用户信息,但数据库中的user_id未分配给$_SESSION['user_id']
,因此我在{{1}的帐户页面中获得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 />';
}
}
}
答案 0 :(得分:1)
主要问题是,您的登录方法是返回数据,而您的调用代码正在将其视为设置内部变量:
$user = new User;
$log_in = $user->login($login, $password);
if($log_in) {
$_SESSION['user_id'] = $user->user_id;
请参阅..你的user_id实际上是在$ log_in中,而不是$ user ...正确的,你应该没事。
答案 1 :(得分: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
代码,看看出了什么问题。等等。
抱歉,但整个问题看起来像是“为我调试代码”
为什么不自己调试,使用你手头的翻译和环境的所有功能和运行它所必需的能力多少次?
你为什么要求陌生人只是心理调试你的代码,只是用他们的大脑运行你的代码?这是错误的设计和非常低效!
请自行调试代码,找到某些问题,然后询问有关它的特定问题。