#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;
}
}
}
?>