2014-10-19 93 views
0

這是我正在處理的登錄腳本;它使用mysqli(我知道它不如PDO安全) 運行MySQL查詢後,我是fetch_object()。然後,我正在分配$ _session來保存用戶ID和電子郵件。 $ _SESSION ['uid'] = $ user-> ID有效,但不是$ _SESSION ['uemail'] = $ user-> email。這可能是因爲電子郵件存儲在$ user對象中嗎?我必須以某種方式轉換它嗎?

電子郵件是存儲屁股varchar(255)在數據庫ID是int(11)。

<?php 
include_once("config.php"); 

$username = $_POST['username']; 
$password = sha1($_POST['password']); 

$query = "SELECT ID FROM user WHERE username = '$username' AND password = '$password' LIMIT 1"; 

if ($result = $db->query($query)) { 
    while ($user = $result->fetch_object()) { 
     $_SESSION['uid'] = $user->ID; 
     $_SESSION['uemail'] = $user->email ; 
     header("Location: index.php"); 
     //exit(); 
    } 
}else { 
    echo "Invalid login information. Please return to the previous page."; 
    //exit(); 
} 
//var_dump(get_object_vars($result)); 

//$db->close(); 
?> 

在此先感謝。

+1

''SELECT ID,email FROM ...' - 因爲您還需要選擇'email'列 – 2014-10-19 00:36:04

+0

謝謝,我只是想將其改爲* – woodchuck 2014-10-19 00:39:59

+0

不客氣 – 2014-10-19 00:40:28

回答

1

您並未從數據庫中選擇電子郵件列。

嘗試:

$query = "SELECT ID, email FROM user WHERE username = '$username' AND password = '$password' LIMIT 1"; 
+0

我現在覺得很蠢,我只是想改變它爲* – woodchuck 2014-10-19 00:40:39

+1

[ '是的,我說4分鐘前''(http://stackoverflow.com/questions/26446023/assign-session-var-from-object#comment41534623_26446023)。 – 2014-10-19 00:40:51

2

評論回答:

您需要選擇列(S),而您要查詢:

SELECT ID, email FROM ... 

這就是爲什麼$_SESSION['uemail'] = $user->email ;是失敗的。

要麼選擇有問題的特定列,要麼SELECT *也可以。

但是,之前已經說過,不建議使用*,因此請選擇實際的列。