Php PDO用户会话
我正在将旧的mysql转换为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'])){ $
$\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;