2017-03-04 75 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電子郵件.. –