Получить указанную строку из базы данных с помощью PHP PDO / функции

#php #pdo

#php #pdo

Вопрос:

У меня проблемы с отображением других строк из базы данных с помощью следующего кода. Когда я набираю <?php echo $_SESSION['username']; ?> , я получаю имя пользователя, вошедшего в систему, на home.php , но когда я хочу отобразить компанию пользователя, например, из базы данных, используя тот же код <?php echo $_SESSION['company']; ?> , я не получаю эту строку на home.php. Мой код выглядит следующим образом:

config.php

 <?php
ob_start();
session_start();

date_default_timezone_set('Europe/London');

define('DBHOST','host');
define('DBUSER','user');
define('DBPASS','pass');
define('DBNAME','dbname');

define('DIR','localhost');
define('SITEEMAIL','email@host.com');

try {
    $db = new PDO("mysql:host=".DBHOST.";dbname=".DBNAME, DBUSER, DBPASS);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    echo '<p class="bg-danger">'.$e->getMessage().'</p>';
    exit;
}

include('classes/user.php');
include('classes/phpmailer/mail.php');
$user = new User($db);
?>
  

user.php

 <?php
    include('password.php');
    class User extends Password{

        private $_db;

        function __construct($db){
            parent::__construct();

            $this->_db = $db;
        }

        private function get_user_hash($username){

            try {
                $stmt = $this->_db->prepare('SELECT password, username, memberID FROM tableName WHERE username = :username AND active="Yes" ');
                $stmt->execute(array('username' => $username));

                return $stmt->fetch();

            } catch(PDOException $e) {
                echo '<p class="bg-danger">'.$e->getMessage().'</p>';
            }
        }

        public function login($username,$password){

            $row = $this->get_user_hash($username);

            if($this->password_verify($password,$row['password']) == 1){

                $_SESSION['loggedin'] = true;
                $_SESSION['username'] = $row['username'];
                $_SESSION['memberID'] = $row['memberID'];
                return true;
            }
        }

        public function logout(){
            session_destroy();
        }

        public function is_logged_in(){
            if(isset($_SESSION['loggedin']) amp;amp; $_SESSION['loggedin'] == true){
                return true;
            }
        }
    }
?>
  

home.php

 <?php
    require('includes/config.php');
    if(!$user->is_logged_in()){ header('Location: login.php'); }
?>
  

В теле, когда я хочу отобразить информацию о пользователе, я ввожу эту строку кода:

 <?php echo $_SESSION['username']; ?> **WORKING**

<?php echo $_SESSION['company']; ?> **NOT WORKING**
  

Я думаю, что проблема в какой-то функции или нужно создать другую для извлечения всех полей из базы данных, но если кто-нибудь сможет мне помочь, это будет здорово. Спасибо всем

Комментарии:

1. Для чего вы задаете значение $_SESSION['company'] ?

2. На странице user.php по функции public function login($username,$password) я добавляю $_SESSION['company'] = $row['company']; и все еще ничего @Saji

Ответ №1:

Смотрите обновленную версию ниже user.php . Проблема в том, что вы не выбираете столбец company из db и не устанавливаете сеанс.

 <?php
include('password.php');
class User extends Password{

    private $_db;

    function __construct($db){
        parent::__construct();

        $this->_db = $db;
    }

    private function get_user_hash($username){

        try {
            $stmt = $this->_db->prepare('SELECT password, username, memberID, company FROM tableName WHERE username = :username AND active="Yes" '); //included the column company
            $stmt->execute(array('username' => $username));

            return $stmt->fetch();

        } catch(PDOException $e) {
            echo '<p class="bg-danger">'.$e->getMessage().'</p>';
        }
    }

    public function login($username,$password){

        $row = $this->get_user_hash($username);

        if($this->password_verify($password,$row['password']) == 1){

            $_SESSION['loggedin'] = true;
            $_SESSION['username'] = $row['username'];
            $_SESSION['memberID'] = $row['memberID'];
            $_SESSION['company'] = $row['company']; //Added this line
            return true;
        }
    }

    public function logout(){
        session_destroy();
    }

    public function is_logged_in(){
        if(isset($_SESSION['loggedin']) amp;amp; $_SESSION['loggedin'] == true){
            return true;
        }
    }
}

?>