2017-09-27 64 views
-1

我遇到了第一個php項目的問題。 一位朋友幫我帶了一點這個學校的項目,我現在卡住了。登錄會話讀取數據庫變量

我想讀取我的數據庫值並在會話中使用它們。

這是我爲database.php配置

<?php session_start(); ?> 
<?php 
//DB Config 
define('DB_USER', 'user'); 
define('DB_PASS', 'password'); 
define('DB_NAME', 'KBZ'); 
define('DB_HOST', 'localhost'); 
$odb = new PDO('mysql: host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS); 



//Other Configs 
if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) 
{ 
    $userIP = $_SERVER['HTTP_CF_CONNECTING_IP']; 
} 
else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) 
{ 
    $userIP = $_SERVER['HTTP_X_FORWARDED_FOR']; 
} 
else if(!empty($_SERVER['HTTP_CLIENT_IP'])) 
{ 
    $userIP = $_SERVER['HTTP_CLIENT_IP']; 
} 
else 
{ 
    $userIP = $_SERVER['REMOTE_ADDR']; 
} 
?> 

然後我有一個connection.php文件

$user = new user($odb); 
class user 
{ 
var $odb; 

function __CONSTRUCT($odb) 
{ 
    $this -> odb = $odb; 
} 
function loggedIn() 
{ 
    if (isset($_SESSION['username'], $_SESSION['ID'])) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

和我的login.php

<form id="form-login" role="form" action="" method="post"> 
    <?php 
    if (isset($_POST['LoginButton'])){ 
$DBchkusr = $odb -> prepare("SELECT * FROM `Users` WHERE `username` = :username AND `password` = :password LIMIT 1"); 
     $DBchkusr -> execute(array(':username' => $username, ':password' => hash('SHA256', $password))); 
     $valid = $DBchkusr -> fetchColumn(0); 
     if ($valid) 
     { 

      $DBGetID = $odb -> prepare("SELECT `ID`, FROM `Users` WHERE `username` = :username LIMIT 1"); 
      $DBGetID -> execute(array(':username' => $username)); 

      $_SESSION['username'] = $username; 

      $_SESSION['ID'] = $DBGetID -> fetchColumn(0); 
     } 

我怎樣才能顯示成功登錄用戶的名稱? 是否有可能將數據庫信息存儲爲像這樣的Session變量?

例如:

歡迎回來<?php> $_SESSION['Name']?>

在此先感謝。

+0

這與phpmyadmin有什麼關係? – symcbean

+0

除了phpmyadmin,@symcbean不再查詢? – Escobar

回答

0

是,使用這個當用戶成功登錄:

session_start(); 
$_SESSION["name"] = $name; // $name is received from database 

現在在歡迎使用回:

session_start(); 
echo "welcome back" . $_SESSION["name"]; 

編輯: 使用此如果($有效)statament :

if ($valid) { 
    $stmt = $odb->prepare("SELECT * FROM `Users` WHERE `username` = :username LIMIT 1"); 
    if ($stmt->execute(array($username))) { 
     while ($row = $stmt->fetch()) { 
      // remove any of this session variables as you want 
      $_SESSION["id"] = $row["id"]; 
      $_SESSION["username"] = $row["username"]; 
      $_SESSION["password"] = $row["password"]; 
      $_SESSION["name"] = $row["name"]; 
     } 
    } 
} 
+0

$ _SESSION [「用戶名」]正在工作,但當我嘗試使用$ _SESSION [「名稱」](在分貝我有ID,用戶名,密碼,名稱)顯示真實名稱它不會diplay它 – Escobar

+0

我編輯答案見它 –

+0

沒有錯,但它似乎是隱形的?東西沒有按預期工作,只是檢查數據庫和一切正確的那裏,用戶名和編號顯示,但沒有名稱顯示 – Escobar

0

好吧好消息。我有它的工作。

if ($loginCheck) 
     { 
      $SQLGetID = $odb -> prepare("SELECT * FROM `Account` WHERE `username` = :username LIMIT 1"); 
      $SQLGetID -> execute(array(":username" => $username)); 
      if ($SQLGetID->execute(array($username))); { //had to add an ; and it worked 


      while ($row = $SQLGetID->fetch()) { // THIS IS LINE 92 


       $_SESSION["id"] = $row["ID"]; 
       $_SESSION["username"] = $row["username"]; 
       $_SESSION["password"] = $row["password"]; 
       $_SESSION["vorname"] = $row["vorname"]; 
       $_SESSION["nachname"] = $row["nachname"]; 
       $_SESSION["email"] = $row["email"]; 
       $_SESSION["handy"] = $row["handy"]; 
      } 
     } 

孤單現在只剩下一個問題我一直在登錄收到此錯誤,其餘的現在與顯示數據Error Log

只是固定它。 解決方案:$ SQLGetID - > execute(array(「:username」=> $ username));是不必要的刪除該行代碼,它的工作原理。 Gif of the working solution