Programuję od jakiegoś roku, ale dopiero od około miesiąca zająłem się OOP i PDO. Mam problem z używaniem atrybutów jednej klasy w drugiej. Konkretniej:
klasa users, ma konstruktor iż pobiera z bazy danych na podstawie cookies (jeżeli są) informacje o użytkowniku takie jak login, adres avatara itp i zapisuje je do swoich atrybutów.
druga klasa wyświetlająca stronę, nazywa się strona. jest w niej funkcja jak wyświetl_początek() i wyświetla ona kod html z logiem, menu. jest też wyswietl_koniec() gdzie rysowana jest stopka.
potrzeba mi użyć w wyświetl_początek() tych pobranych z bazy danych informacji o użytkowniku. jak to rozwiązać?
Fragmenty kodu o jakie się rozchodzi:
class Users { private $zalogowany; public function __construct() { $this->sprawdz_zalogowanie(); } public function sprawdz_zalogowanie() { try { { // przygotowanie szkieletu zapytania $stmt = MySQLDriver::$pdo -> prepare('SELECT * FROM `users` WHERE `id` = :id AND `haslo` = :pass LIMIT 1'); $stmt -> bindValue(':pass', $_COOKIE['pass'], PDO::PARAM_STR); // wykonanie zapytania $stmt -> execute(); // jeżeli zwróci kogoś z takim id i hasłem if ($row = $stmt -> fetch(PDO::FETCH_ASSOC)) { foreach ($row as $k => $v) { $this->$k = $v; } $stmt -> closeCursor(); $this->zalogowany = TRUE; } else { $this->zalogowany = FALSE; } } else { $this->zalogowany = FALSE; } } catch(PDOException $e) { } } }
class Strona { public $tytul_strony; public $keywords; public function __construct() { MySQLDriver::connect(); } public function wyswietl_poczatek($user) { echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'."\n".'<html xmlns="http://www.w3.org/1999/xhtml">'."\n"; $this->wyswietl_head(); echo "<body>\n"; ?> <div id="top"> <a href="index.php"><img src="images/logo.png" width="445" height="160" alt="" /></a> <div id="logowanie"> <img src="images/avatars/0.gif" hspace="10" style="float:left" alt="" /> <span style="font-size:10px">Jesteś zalogowany jako:</span><br /> <span style="font-size:10px"><br /> Przejdź do profilu <br /> Wyloguj</span> </div> </div> <?php $this->wyswietl_topmenu(); ?> <!-- treść główna serwisu --> <table width="1060" border="1" cellpadding="0" cellspacing="0" align="center"> <tr> <td width="500" rowspan="2" valign="top" align="left"> <!-- lewa główna kolumna --> <!-- wyszukiwarka --> <?php $this->wyswietl_wyszukiwarka(); ?> <!-- / wyszukiwarka --> <?php } }
class MySQLDriver { // Nawiązanie połączenia z bazą danych. { self::$pdo = new PDO('mysql:host=localhost;dbname=baza', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); self::$pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } }
index.php
// załadowanie class include_once('../classes/mysqldriver.php'); include_once('../classes/users.php'); include_once('../classes/strona.php'); // tworzenie obiektów $strona = new Strona(); $user = new Users(); $strona->wyswietl_poczatek(); //tutaj tresc danego dzialu $strona->wyswietl_koniec();
Dziękuję za jakąkolwiek pomoc. Pozdrawiam.
PS. Ogólnie to dobrze zrobiłem tą obsługę bazy danych? W tym wypadku wykorzystałem static, ale nie chcę tego nadużywać.