2017-02-21 45 views
-1

我已經從教程中設置了登錄/註冊系統,現在我正在嘗試使用會話來顯示配置文件信息。我看了不少論壇和教程,我相信我有實際的代碼需要顯示數據庫中的實際信息,但我無法展示它。我可能做錯了什麼......我試圖從數據庫中獲取「電子郵件」部分並將其顯示給配置文件。

<?php 
require('db.php'); 

// Create connection 
$conn = new mysqli("XXXXXX"); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "SELECT id, username, email FROM users"; 
$result = $conn->query($sql); 

$_SESSION['email'] = $_POST['email']; 


?> 
<?php 
session_start(); 
?> 
<p><strong>Email:</strong>&nbsp;<?php echo $_SESSION['email']; ?></p> 
+4

你需要把在session_start()在很你的php文件的頂部 – Dimi

+1

爲什麼session_start終於?它應該在$ _SESSION – C2486

+1

之前簡單:先啓動會話FIRST,然後確保POST數組有值;不知道從哪裏來。 –

回答

2

從有限的信息我能想到的是:

  • 一旦用戶成功登錄,要顯示該用戶的個人資料信息,您已經完成登錄/註冊模塊
  • , 對?

在這種情況下,這裏是你的情況基本假設:

  1. 首先,如果你是你的用戶轉移到登錄後此頁面,則意味着不會有$ _ POST數據(一般)。你可以使用var_dump($ _ POST)來確認它。

  2. 您已經在登錄時有$ _SESSION變量設置了一些商品。假設它是$ _SESSION ['email'],您可以使用var_dump($ _ SESSION)來確認它。

基於這個假設,這是你修改後的代碼將如何看起來像:

<?php 
require('db.php'); 

//This should come first before accessing $_SESSION 
session_start(); 

// Create connection 
$conn = new mysqli("XXXXXX"); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

//This query should be used with WHERE as you only want to get data of one particular user. 
//This is just for an example purpose, in practice you should always use parameterized query Or at least escape data before using it. 
$sql = "SELECT id, username, email FROM users WHERE email = " . $_SESSION['email'] . ";"; 

$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    while($row = $result->fetch_assoc()) { 
     //Assuming only one record will be returned because username/email should be unique 
     $result = $row; 
    } 
} else { 
    //Handle if you don't get any data 
} 

$email = $result['email']; 

?> 

<p><strong>Email:</strong>&nbsp;<?php echo $email; ?></p> 

我希望這可能是一些幫助