Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PDO i PHP5] - CMS
Forum PHP.pl > Forum > PHP > Object-oriented programming
coolos
Witam serdecznie

Jestem tu nowy, dopiero uczę się obiektywności w php (wcześniej programowałem strukturalnie) i nie wiem czy gdzieś nie zbłądziłem. Piszę CMS'A na moją stronkę no i nie wiem czy debrzę postępuję. Mam taki kodzik:

klasa odpowiedzialna za połączenie z bazą danych:
  1. <?php
  2. class bd
  3. {
  4.    public $zapytanie;
  5.    //przygotowanie danych do bindowania
  6.    public function PrzygotujDoBazy($formula, $bindowanie)
  7.    {
  8.        global $baza;
  9.        $this->zapytanie = $baza->prepare($formula);    
  10.        
  11.        if(count($bindowanie) > 0)
  12.        {    
  13.            foreach($bindowanie as $bind)
  14.            {
  15.                $this->zapytanie->BindValue($bind[0], $bind[1], $bind[2]);
  16.            }
  17.        }
  18.        return $this->zapytanie->execute();
  19.    }
  20.    //zwraca zapytanie
  21.    public function ZwrocZapytanie()
  22.    {
  23.        return $this->zapytanie;
  24.    }
  25.    //czysci zapytanie    
  26.    public function WyczyscZapytanie ()
  27.    {
  28.        $this->zapytanie->closeCursor();
  29.        unset($this->zapytanie);
  30.    }
  31. }
  32. ?>


klasa odpowiedzialna za logowanie

  1. <?php
  2. class uwierzytelnianie
  3. {
  4.    //start sesji
  5.    public function StartSesji()
  6.    {
  7.        session_start();
  8.    
  9.        if (!isset($_SESSION['inicjuj']))
  10.        {
  11.            session_regenerate_id();
  12.            $_SESSION['inicjuj'] = true;
  13.            $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  14.        }
  15.    
  16.        if($_SESSION['ip'] != $_SERVER['REMOTE_ADDR'])
  17.        {
  18.            $this->Przekierowanie("http://www.strona.pl");
  19.        }
  20.  
  21.    }
  22.    //forma do logowania
  23.    public function FormaLogowanie($komunikat)
  24.    {
  25.        if(!empty($komunikat))
  26.        {
  27.            $string ="<p>".$komunikat."</p>";    
  28.        }
  29.        
  30.        $string .= '
  31.        <form method="post" action="index.php?akcja=logowaniesprawdz">
  32.        Login:<input type="text" name="login">
  33.        Haslo:<input type="password" name="haslo">
  34.        <input type="submit" value="Zaloguj sie">
  35.        </form>
  36.        ';
  37.        
  38.        szablony::ZapisDoSzablonu("logowanie", $string);
  39.    }
  40.    //sprawdzenie uzytkownika i jego zalogowanie
  41.    public function SprawdzLogowanie($login, $haslo)
  42.    {
  43.        if(!empty($login) && !empty($haslo))
  44.        {
  45.            $login = addslashes($login);
  46.            $haslo = addslashes(sha1($haslo));
  47.            
  48.            $bind= array(
  49.                         array(':login', $login, PDO::PARAM_STR),
  50.                         array(':haslo', $haslo, PDO::PARAM_STR)
  51.                         );
  52.            bd::PrzygotujDoBazy("SELECT * from uzytkownicy WHERE login = :login and haslo= :haslo", $bind);
  53.            if(($rzad = bd::ZwrocZapytanie()->fetch()) > 0)
  54.            {
  55.                $_SESSION['login'] = stripslashes($rzad['login']);
  56.                $_SESSION['poziom'] = stripslashes($rzad['poziom']);
  57.  
  58.                bd::WyczyscZapytanie();
  59.                $this->Przekierowanie("./index.php");
  60.            }
  61.            else
  62.            {
  63.                bd::WyczyscZapytanie();
  64.                $this->FormaLogowanie("Zly login lub haslo");
  65.            }            
  66.            
  67.        }
  68.        else
  69.        {
  70.            $this->FormaLogowanie("Pola login oraz haslo musza zostac wypelnione");
  71.        }
  72.                
  73.    }
  74.    //wylogowywanie
  75.    public function Wyloguj()
  76.    {
  77.        $_SESSION['login'] = $_SESSION['poziom'] = 0;
  78.        unset($_SESSION['login']);
  79.        unset($_SESSION['poziom']);
  80.    }
  81.    //import z klasy szablony
  82.    public function WyswietlSzablon($nazwa)
  83.    {
  84.        szablony::ImportSzablonu($nazwa);
  85.    }
  86.    //przekierowanie
  87.    private function Przekierowanie($strona)
  88.    {
  89.            header("HTTP/1.1 301 Moved Permanently");
  90.            header("location: {$strona}");
  91.            header("Connection: close");
  92.            exit;    
  93.    }
  94. }
  95. ?>


klasa odpowiedzialna za import szablonu

  1. <?php
  2. class szablony
  3. {
  4.    private $szablon = array();
  5.    
  6.    public function ZapisDoSzablonu($nazwa, $string)
  7.    {
  8.        $this->szablon[$nazwa] = $string;
  9.    }
  10.    
  11.    public function ImportSzablonu($nazwa)
  12.    {
  13.        $szab = file_get_contents("./szablony/{$nazwa}.html");
  14.        
  15.        foreach($this->szablon as $nazwa => $string)
  16.        {
  17.            $naco[] = $string;
  18.            $co[] = "<!--{$nazwa}-->";
  19.        }
  20.        
  21.        $szab = str_replace($co,$naco,$szab);
  22.        echo $szab;
  23.    }
  24.    
  25. }
  26. ?>
Whisller
Nie wiem może jestem trochę rozdrażniony ale chyba podobnych czy wręcz identycznych tematów różniących się tylko nazwą klasy na tym forum można już liczyć w dziesiątkach. Więc może warto by użyć opcji która wbrew pozorą nie jest magiczna SZUKAJ. Sprawdzić z czego inni bardziej doświadczeni programiści korzystają w dostępie do bazy danych czy też obsłudze sesji.

Bo tego typu podejściem to Wy ( mówie o wszystkich autorach tego typu wątków ), daleko nie zajdziecie. Sory za OT ale nie mogę już patrzeć na te posty :/
coolos
No i wykonanie
  1. <?php
  2. //polaczenie z baza danych
  3. try
  4. {
  5.    $baza = new pdo("mysql:host=localhost;dbname=nazwabazy;", 'root', 'haslo', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  6.    $baza -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  7. }
  8. catch(PDOException $wyjatek)
  9. {
  10.    echo 'Wystapil blad z podlaczeniem do bazy danych, tresc bledu: ' . $wyjatek->getMessage();
  11.    exit;
  12. }
  13.  
  14. //Tworzenie obiektów
  15. $uwierz = new uwierzytelnianie;
  16.  
  17. //czesc wlasciwa
  18. $uwierz->StartSesji();
  19.  
  20. if(!empty($_SESSION['login']) && $_SESSION['poziom'] > 0)
  21. {
  22.    //tresc widoczna po zalogowaniu
  23. }
  24. else
  25. {
  26.    switch($_GET['akcja'])
  27.    {
  28.    case 'logowaniesprawdz':
  29.        $uwierz->SprawdzLogowanie($_POST['login'], $_POST['haslo']);
  30.        break;
  31.    default:
  32.        $uwierz->FormaLogowanie("Witaj, zaloguj sie aby uzyskac dostep do panelu administacyjnego");
  33.    }    
  34.    $uwierz->WyswietlSzablon("logowanie");
  35. }
  36.  
  37. ?>


Jeżeli ktoś mógłby mi powiedzieć co robię dobrze, a co źle byłbym wdzięczny.

Pozdrawiam

Cytat(Whisller @ 15.04.2009, 12:29:58 ) *
Nie wiem może jestem trochę rozdrażniony ale chyba podobnych czy wręcz identycznych tematów różniących się tylko nazwą klasy na tym forum można już liczyć w dziesiątkach. Więc może warto by użyć opcji która wbrew pozorą nie jest magiczna SZUKAJ. Sprawdzić z czego inni bardziej doświadczeni programiści korzystają w dostępie do bazy danych czy też obsłudze sesji.

Bo tego typu podejściem to Wy ( mówie o wszystkich autorach tego typu wątków ), daleko nie zajdziecie. Sory za OT ale nie mogę już patrzeć na te posty :/


W zasadzie skoro na wszystko jest odpowiedź to po co pytać?
erix
Cytat
W zasadzie skoro na wszystko jest odpowiedź to po co pytać?

Pytać, jeśli problem, z którym się zmagasz jest naprawdę ciężki do rozwiązania. A to już kolejny tego typu wątek w tym tygodniu. Poszukaj, a znajdziesz. Jeśli chodzi o np. system szablonów, który nie ma szans na wydajne działanie - też o tym już było. Jeśli chodzi o nazwy zmiennych - używaj angielskich.

Cytat
i nie wiem czy gdzieś nie zbłądziłem

Zajrzyj do angielskiej Wikipedii o MVC, wszystko znajdziesz. Przejrzyj źródła gotowych frameworków. Przykro mi, ale programista, który nie jest w stanie poradzić sobie z wyszukiwarką niech lepiej skleja modele z papieru. Wszystko jest w dokumentacji, wszystko można znaleźć. Można też przeanalizować gotowe frameworki, dokumentację też mają napisaną, wystarczy wykazać odrobinę inicjatywy, a nie wklejasz listingi z nadzieją, że ktoś zrobi Ci po prostu audyt.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.