Witam,
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
{
if( isset($_COOKIE['userid']) && isset($_COOKIE['pass']) ) {
// przygotowanie szkieletu zapytania
$stmt = MySQLDriver::$pdo -> prepare('SELECT * FROM `users` WHERE `id` = :id AND `haslo` = :pass LIMIT 1');
$stmt -> bindValue(':id', intval($_COOKIE['userid']), PDO
::PARAM_INT); $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)
{
echo 'Wystapil blad biblioteki PDO: ' . $e->getMessage(); }
}
}
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 />
<b>
<?php echo 'Gość'; ?></b>
<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.
public static function connect
() {
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ć.
Ten post edytował Still 12.10.2010, 21:49:56