2017-03-04 73 views
0

我是新来的PHP,当它涉及到会话我更是一个初学者。我有我的index.php页面,这是用户可以注册和登录的地方。这些表格正在发布到submit.php,分别用于注册和登录。未定义的变量:_SESSION PHP登录脚本

这是dashboard.php文件,其中我显示了用户名和用户名以及他登录的帐户的电子邮件地址。

<?php 
session_start(); 
include "includes/config.php"; 
include "layouts/header.php"; 
$s_title = "Superior Results"; 
if(isset($_SESSION['id'])) { 
    $username = $_SESSION['username']; 
    $email = $_SESSION['email']; 
    $id = $_SESSION['id']; 

} else { 
    header('Location: index.php'); 
    die(); 
} 
$sql = "SELECT email, username FROM members"; 
$result = mysqli_query($dbCon, $sql); 

$row = mysqli_fetch_assoc($result); 

?> 

这也是我如何dashboard.php文件调用这些会话变量

<?php echo $_SESSION['username'];?> 
<?php echo $_SESSION['email'];?> 

用户名的作品,但电子邮件没有工作,就说明公告:未定义指数:电子邮件

screenshot

+0

是的,你在哪里* *设置的'$ _SESSION'变量?我缺少像'$ _SESSION ['email'] = $ row ['email']'的东西。 – Xorifelse

+0

你在哪里设置了$ _SESSION ['email']的值?你确定你做到了吗? – VictorArcas

+0

我没有在任何地方设置这些变量......它应该从用户帐户的会话中获取。对不起我有点困惑这个 –

回答

0

在您的用户登录后需要设置会话变量

$sql = "SELECT email, username FROM members WHERE id = '".$confirmed login id from the login process."' "; 
$result = mysqli_query($dbCon, $sql); 

$row = mysqli_fetch_assoc($result); 

$SESSION['id'] = $row['id']; 
$SESSION['email'] = $row['email']; 
$SESSION['username'] = $row['username']; 

一旦他们在登录后的会话变量的设置,你可以在任何其他页面也是其中的一部分在使用它们会话(已在session_start()上的第一行)

+0

当我没有从其他帐户,其中包括不同的电子邮件但依然有我,我的第一个帐户的电子邮件地址.. HTTP登录: //i.imgur。com/jZgtBih.png .... http://i.imgur.com/lBomGSQ.png .... http://i.imgur.com/dkBpxfx.png –

+0

@NoorQureshi如果你想删除你的'PHPSESSID'如果你在这个查询中正确设置了'id',那么这个问题很可能会被解决。 – Xorifelse

+0

@Xorifelse是的,我做了没有工作..我在这里做错了什么:http://i.imgur.com/xZvzhzk.png .....用户名输出似乎工作正常,'电子邮件'造成问题... –

1

这样做的原因错误是,你试图读取一个不存在的数组键。 isset()函数在那里,所以你可以测试这个。有没有必要为null检查,你从来没有分配到空的元素:

// check that the 'email' key exists 
if (isset($_SESSION['email'])) { 
    // it does; output the message 
    echo $_SESSION['email']; 

    // remove the key so we don't keep outputting the message 
    unset($_SESSION['email']); 
} 

好,刚才下面您的意见,我不确定我是否了解您的需求,但你想要做这样的事情: ?

$username = $_POST['username']; 

$sql = "SELECT email FROM users WHERE username = '$username'"; 
if(($result = mysqli_query($conn, $sql) != false){ 
    if(($row = $result->fetch_assoc() !== null)){ 
    $_SESSION['email'] = $row; 
    } else { 
    echo 'no rows in database'; 
    } 
} else { 
    echo 'You have an error in you mysql syntax'; 
} 
//.. work with concrete user 
+0

请解释如何设置它? – Xorifelse

+0

session_start(); $ _SESSION ['email'] =“[email protected]”; echo $ _SESSION ['email']; –

+0

它重定向我到我的index.php页面并没有让我与我的用户名/密码登录http://i.imgur.com/CgOepR0.png当我isset电子邮件.. –