Wykryto działanie AdBlocka!

Prawdopodobnie masz właczonego Adblocka. Korzystanie z bloga jest całkowicie darmowe. Jeśli jednak chcesz docenić prace autora, wyłacz blokowanie reklam dla tej witryny, aby jeszcze bardziej zmotywowac autora do dalszej pracy oraz częstszej publikacji artykułów.

Dziękuje :)

Treść główna bloga

Artykuły

System rejestracji i logowania – wersja obiektowa(OOP)


Logowanie i rejestracja - oopW jednym z pierwszych artykułów zaprezentowałem skrypt rejestracji i logowania. Skrypt ten jednak był napisany za pomocą kodu strukturalnego. Jeden z komentujących zaproponował abym stworzył wersję obiektową. Ten skrypt jest w całości oparty na obiektach. Zawiera on typowe dla tego typu skryptu funkcje, czyli rejestracja, logowanie oraz wyświetlanie danych o danym użytkowniku(IP, user_agent oraz data rejestracji)

Kod na Githubie

W pierwszej kolejności jak to często robię przedstawie strukturę katalogu:

  • index.php
  • sql.sql
  • css/style.css
  • config/config.ini
  • text/text.php
  • core/
    • session.class.php
    • auth.class.php
    • user.class.php
    • core.class.php
  • template/
    • header.php
    • front.php
    • footer.php
    • main.php
    • user_panel.php
    • login.php
    • register.php
  • .htaccess

W skrypcie tym zastosowałem plik konfiguracyjny z rozszerzeniem ini. Więcej można o tym poczytać tutaj oraz klasę do zarządzania sesjami, którą wcześniej napisałem. Z racji, że dostęp do pliku ini może być z poziomu URL, koniecznością stało się dodanie skryptu blokującego dostęp do tego typu plików. Właśnie dlatego jest plik .htaccess, gdzie blokowany jest dostęp do pliku z konfiguracją skryptu.

Plik index.php:
Plik index.php, czyli „rdzeń” całego skryptu. Tutaj odbywa się podstawowa konfiguracja, typu start sesji, ustawienie bufora czy rodzaj raportowania błędów. Następnie za pomocą funkcji __autoload() ładowane są potrzebne klasy z katalogu dir/. Potem jest dołączenie szablonu, podzielonego na 3 człony: header.php, front.php oraz footer.php.

Katalog core/:
W katalogu core/ znajdują się klasy, które są konieczne do funkcjonowania skryptu.

  • session.class.php – klasa do zarządzania sesjami, o której wspomniałem wcześniej
  • auth.class.php – czyli podstawowa autoryzacja użytkownika: logowanie, rejestracja i inne
  • core.class.php – główny rdzeń klasy, zarządza plikiem z konfiguracją oraz powiadomieniami
  • user.class.php – prosta klasa, która ma za zadanie wyświetlić podstawowe dane o użytkowniku

Warty wspomnienia jest również plik front.php. Jest to „centrum zarządzania akcjami”. W pliku tym skrypt operuje na zmiennej $page i w zależności od niej wykonuje daną akcje, np. rejestracja użytkownika, wylogowywanie go czy też pokazywanie danej podstrony.

Dodam również, że w tym skrypcie do obsługi bazy danych wykorzystano PDO zamiast MySQLi, jak to było w poprzedniej wersji.

  • Symek

    Bardzo ciekawy skrypt, ale mam pytanie.
    Można dowolnie dodawać klasy do skryptu np. lang.class z poprzedniego artykułu?
    Pozdrawiam

    • Oczywiście ze można, wystarczy podstawowa wiedza z zakresu oop

  • Tomasz

    Na serwerze wirtualnym działa super a na innym wyskakuje błąd: Parse error: syntax error, unexpected ‚[‚, expecting ‚]’ in /…/session.class.php on line 104 co może być przyczyną?

    • Pokaż linijkę w której występuje błąd

      • Tomasz

        linijka: $_SESSION[array_keys($data)[0]] = array_values($data)[0];

        przesłałem pliki na inny serwer i wszystko ok 🙂 może to być spowodowane jakąś blokadą ustawień serwera albo zbyt starą wersją?

        • Ten błąd był spowodowany starą wersją PHP.

          • Andrzej

            Jaka wersja php jest potrzebna ??

          • Andrzej: co najmniej 5.2.0

  • Adam

    Co tu jest żle:
    Fatal error: Uncaught exception ‚PDOException’ with message ‚SQLSTATE[HY000] [1044] Access denied for user ‚adam’@’localhost’ to database ‚users” in C:\xampp\htdocs\log1\index.php:50 Stack trace: #0 C:\xampp\htdocs\log1\index.php(50): PDO->__construct(‚mysql:dbname=us…’, ‚adam’, ‚sagosago’) #1 C:\xampp\htdocs\log1\index.php(58): connection() #2 {main} thrown in C:\xampp\htdocs\log1\index.php on line 50

    Czy tu muszę coś podać:driver = „mysql:”

    • Podałeś nieprawidłowe dane w połączeniu z baza danych. Napisz na gg 28630239

  • Bardzo fajny i przydatny skrypt. Przyda się. Dzięki 😀

  • Bartłomiej

    Witaj,
    Przy rejestracji wyskakuje mi błąd:
    Warning: Missing argument 2 for auth::__construct(), called in C:\WebServ\httpd\log\template\front.php on line 20 and defined in C:\WebServ\httpd\log\core\auth.class.php on line 13
    Rejestracja zakończyła się niepomyślnie. Spróbuj ponownie za jakiś czas.

    Jaki jest tego powód?

  • SYM

    Do sesji zapisuje się login taki jaki był wpisany w formularzu logowania (duże/małe litery) i na tym samym koncie możemy być jako „Login” i „login”. Nie jest wczytywany z bazy po weryfikacji tylko do sesji idzie ten z formularza.

    Mały „błąd” ale może czasem mieć znaczenie 🙂

    • Dzięki za tą informację. Niedługo planuje pełną modernizację bloga.

  • doominik

    Witam. Jako że dopiero się uczę php to niestety mam dużo pytań. Na szczęście co do tego skryptu mam tylko dwa pytania (na razie).

    1. W tej funkcji:
    public function DBconnection()
    {
    $db = new PDO(self::$config[‚db’][‚driver’] . ‚dbname=’ . self::$config[‚db’][‚db_name’] . ‚;host=’ . self::$config[‚db’][‚host’], self::$config[‚db’][‚user’], self::$config[‚db’][‚password’]);
    return (!$db) ? ‚Error during connection to database.’ : $db;
    }

    Prosiłbym o wytłumaczenie ostatniej linijki a konkretnie tego: „(!$db)”. Czy taki zapis po prostu sprawdza czy zmienna $db istnieje? Bo to co się dzieje po pytajniku rozumiem.

    2. regenerateId($type = true)
    Czy argument „true” oznacza że należy wygenerować nowe id sesji zachowując dane? A „false” całkowicie czyści sesję?

    Dziękuję

  • Dawid Dinger

    po wgraniu na serwer, dodaniu czystej bazy i uzupełnieniu config.ini skrypt nie uruchamia się jest cały czas czysta strona. na localhost działało ok. gdzie leży problem?

  • CNK

    Przy rejestracji otrzymuje błąd 500 na stronie index.php?page=register_action
    Żadnego innego błędu nie ma na stronie, nowe konto nie dodaje się do bazy. Ktoś może wie jak to naprawić?

    • CNK

      Ok, zauważyłem że system nie działa na PHP 7.1.0, na starszych wersjach działa

  • mattello4

    Mam problem po skopiowaniu na serwer wyskakuje syntax error, unexpected ‚[‚ in /core/Core.class.php on line 11