2013-05-29 105 views
1

我有一個問題,從我的sql數據庫使用會話的數據。我正在嘗試創建一個登錄系統。我已經有這個工作,但每個使用都被引導到相同的頁面 - 我想要私人配置文件,只能通過用正確的電子郵件地址和密碼登錄的人查看。PHP - 從sql數據庫獲取數據

我正在使用以下代碼 - 第19行出現錯誤!如果我是誠實的,我不會100%理解這一行 - 我是PHP和SQL的新手,並且已經閱讀了所有這些內容,但沒有得到完全向我解釋的答案。

任何幫助,將不勝感激 - 我指的教程任何事......

<?php # DISPLAY COMPLETE FORUM PAGE. 

# Access session. 
session_start() ; 

# Redirect if not logged in. 
if (!isset($_SESSION[ 'user_id' ])) { require ('login_tools.php') ; load() ; } 

# Set page title and display header section. 
$page_title = 'Forum' ; 


# Open database connection. 
require ('connect_db.php') ; 

# Display body section, retrieving from 'forum' database table. 
$q = "SELECT * FROM users WHERE user_id = $_SESSION[email]" ; 
$r = mysqli_query($dbc, $q) ; 
if ($result = $mysqli->query("SELECT * FROM users")) 
{ 
    echo '<table><tr><th></th><th></th><th id="msg"></th></tr>'; 
    while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) 
    { 
    echo '<tr><td>' . $row['first_name'] .' '. $row['last_name'] . '<br>'.  $row['email'].'</td> 
    <td>','</td><td>','</td> </tr>'; 
    } 
    echo '</table>' ; 
} 
else { echo '<p>There are currently no messages.</p>' ; } 

# Create navigation links. 
#echo '<p><a href="post.php">Post Message</a> | <a href="shop.php">Shop</a> | <a  href="home.php">Home</a> | <a href="goodbye.php">Logout</a></p>' ; 

# Close database connection. 
mysqli_close($dbc) ; 



?> 
+0

最近你試圖說錯? –

+0

您是否正確連接到數據庫? 注意:沒有必要提供所有這些代碼。 – Tom11

+0

@ Tom11這是必要的,所以我們可以完整地看到它進行調試。如果他沒有,我們只是要求看看它。 –

回答

2

你在你的會話中的語法錯誤:

$q = "SELECT * FROM users WHERE user_id = $_SESSION[email]" ; 

將其更改爲:

$q = "SELECT * FROM users WHERE user_id = {$_SESSION['email']}" ; 

但是,您應該在將會話數據插入數據庫之前逃避會話數據。

此外,在while()循環文本具有另一個語法錯誤:

echo '<tr><td>' . $row['first_name'] .' '. $row['last_name'] . '<br>'.  $row['email'].'</td> 
<td>','</td><td>','</td> </tr>'; 

刪除逗號,用句點替換它們:

echo '<tr><td>' . $row['first_name'] .' '. $row['last_name'] . '<br>'. $row['email'].'</td> <td>' . '</td><td>' . '</td> </tr>'; 

通過像@gareth說,你應該選擇prodedural或面向對象風格的編碼,並堅持下去,IE,或者使用mysqli_query()$mysql->query() :)

+1

+1用於識別非常小的細節:) – NullPointer

+0

感謝Phil的快速響應 - 我已經做出了您所建議的更改,但錯誤隨後會更改爲代碼:$ q =「SELECT * FROM users WHERE user_id = $ _SESSION ['email']」; – Tom36

+0

你得到的錯誤是什麼? –

0

你說「我收到第19行的錯誤!「 - 上面的行換行是否顯示第20行開始時沒有引號和實際代碼中的td?如果是這樣,請刪除換行符並確保第19行繼續直到錶行的其餘部分到達「;」

+0

第19行是 - if($ result = $ mysqli-> query(「SELECT * FROM users」)) – Tom36

+0

糟糕 - 您沒有行號顯示,當我試圖找到您的錯誤時,我明顯錯誤地計數。 – GreybeardTheUnready

+0

你實際上可以在字符串中包含換行符。 – Gareth

1

你需要的,如果你在程序的風格(在第二線等)使用mysqli(像這種提取物的第一行),或在面向對象的風格來決定

$r = mysqli_query($dbc, $q) ; 
if ($result = $mysqli->query("SELECT * FROM users")) 
{ 

。看看你的其他代碼,我會想象把第二行(你的第19行)改爲if ($result = mysqli_query("SELECT * FROM users"))將會消除那個錯誤(儘管不一定是其他的錯誤)

+0

我現在得到以下錯誤:警告:mysqli_query()期望至少2個參數,1在C:\ wamp \ www \ pic \ 001 \ forum.php在19行 – Tom36

+0

噢。對不起,我通常使用OO版本。你需要像這樣首先在你的'$ dbc'中添加:'($ result = mysqli_query($ dbc,「SELECT * FROM users」))' – Gareth

0

嘗試寫這樣

$q = "SELECT * FROM users WHERE user_id = '". $_SESSION['email']. "'"; 

編輯:

正如你所比較email這意味着它應該是字符串,所以你需要把它包在引號像上面。

也嘗試用

if ($result = mysqli_query($dbc, "SELECT * FROM users")) 

能看到一個用戶程序的方式或OOPS方式。嘗試通過添加$dbcmysqli_query()