簡體   English   中英

登錄會話讀取數據庫變量

[英]Login Session read database variables

我的第一個 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);
        }

如何顯示成功登錄用戶的姓名? 是否可以像這樣將數據庫信息存儲為會話變量?

例如:

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

提前致謝。

是的,當用戶成功登錄時使用它:

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

現在在歡迎回來時使用它:

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

編輯:在 if($valid) 語句中使用它:

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"];
        }
    }
}

好消息。 我已經開始工作了。

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"];
            }
        }

現在只有一個問題,我在登錄時不斷收到此錯誤,其余的現在可以顯示數據錯誤日志

剛修好。 解決方案:$SQLGetID -> execute(array(":username" => $username)); 沒有必要刪除那行代碼,它可以工作。 工作解決方案的 Gif

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM