Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Przebudowa klas/struktura klas
Matkas
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 21.02.2011

Ostrzeżenie: (0%)
-----


Witam,
jako iż to mój pierwszy post na tym forum to wypadałoby się przedstawić.
Jestem 17nastolatkiem , który dopiero co raczkuje w php, pochodzącym z bardzo znanego miasta Bogatynia(7.08.2010), a na imię mam Mateusz! (IMG:style_emoticons/default/smile.gif)

A przechodząc do mojego problemu, to dawniej napisałem system logowania(o ile można to tak nazwać), ale teraz jak jestem starszy i mądrzejszy, to chciałbym Go przebudować, i zaczać bardziej doceniać OOP. Oczywiście wiem, że wszystko jest tu źle, dlattego chciałbym napisać wszystko od początku. Próbuje sobie uzmysłowić ile klas potrzebuje do logowania, i chodzenia po podstronach, w których wymagane jest zalogowanie.
Myślałem nad takimi:
class user_auth - Autoryzacja użytkownika, znajdują sie w niej funkcje potrzebne do zalogowania, informacje o użytkowniku(user_id itp.)
class session - Klasa zarządzająca sesjami oparta na bazie
class account_managment - Klasa do zarządzania kontem,zmiana haseł,informacji o profilu itd.

Problem mój polega na tym, że nie wiem jak te wszystkie 3 klasy połączyć, i w jaki sposób je dobrze napisać.
Próbowałem w mojej aktualnej klasie wprowadzić atrybuty, takie jak user_id,user_login,user_level. Lecz odwołując się do nich w innych plikach, nie uzyskuje żadnego rezultatu. Wygląda to mniejwięcej tak:

Nagłówek account.php
  1. require_once ("mainfile.php");

Nagłówek mainfile.php
  1. require_once('functions.php');
  2. require_once('config/config.php');
  3. require_once('class/class_database.php');
  4. require_once('class/class_account.php');
  5. $class_database = new class_database;
  6. $class_account = new class_account;


Lecz w obu tych plikach nie jestem w stanie odwołać się do $class_account->user_id;
W jaki sposób zoptymalizować klasy?


Poniżej skrypt logowania o którym wcześniej wspominałem.
  1. function login($login_in_login_form,$password_in_login_form)
  2. {
  3. $login_exist = $this->check_login_exist($login_in_login_form);
  4. //Sprawdza czy login wpisany w formularzu istnieje
  5. if($login_exist==TRUE)
  6. //Jesli istnieje to ->
  7. {
  8. $password_match = $this->confirm_password_in_login($login_in_login_form,$password_in_login_form);
  9. //Sprawdza czy haslo pasuje do loginu
  10. if($password_match == TRUE)
  11. //Jesli pasuje to ->
  12. {
  13. $if_activated = $this->check_account_activated($login_in_login_form);
  14. //Sprawdza czy konto jest aktywowane
  15. if($if_activated == TRUE)
  16. //Jesli konto aktywowane to->
  17. {
  18. $this->setsessions( $login_in_login_form);
  19. // Ustawia sesje
  20. $sucesfull = "Login sucesfull! In(".RELOAD_TIME." seconds) you'll be redirected.";
  21. $to_display .= display_good(redirect($sucesfull));
  22. //Funkcja `display_good` wyswietla tekst w odpowiednim 'pojemniku'
  23. //Funkcja `redirect` przekierowuje na daną strone(tu 'account'), i wyswietla komunikat.
  24.  
  25. }//Jesli konto nie aktywowane to
  26. else
  27. {
  28. $notactivated = "Account not activated";
  29. $to_display .= display_alert($notactivated));
  30. //Funkcje jak wyzej
  31. }
  32.  
  33. }//Jesli haslo nie pasuje to wyswietl na ekranie
  34. else
  35. {
  36. $to_display .= display_wrong("Bad password.");
  37. }
  38. }//Jesli login nie istnieje
  39. else
  40. {
  41. $to_display .= display_wrong("This user does not exist.");
  42. }
  43. return $to_display;//zwroc wynik
  44. }


Pozdrawiam, Mateusz
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


1. Przecież napisałem, że od błędów są wyjątki, a nie zwracanie 0/1.
2.
Cytat
To jak później się odwołać, do klasy wyświetlającej użytkownikowi 'błędy' logowania(konto nie zaaktywowane itp.)?
Tutaj wchodzisz w temat obsługi formularzy, czyli zagadnienia dosyć skomplikowanego - w tym celu powstają całe "subframeworki" w popularnych projektach.
3.
Cytat
Tylko, nie mam pojęcia w jakim celu mam wykorzystać tą klase. Filtracja przesyłanych danych?
Pisząc o obiekcie Request miałem na myśli obiekt reprezentujący żądanie HTTP. A chyba wiesz jakie dane zawiera takie żądanie?
4.
Cytat
// Funkcje ,które wyświetlają użytkownikowi komunikaty(np. złe hasło/login, brak aktywacji konta).
Pisząc o obiekcie Response miałem na myśli obiekt reprezentujący odpowiedź HTTP, czyli zestaw nagłówków (jak np. ciasteczka, prośba o przekierowanie, informacja o zarządzaniu pamięcią tymczasową) i treść odpowiedzi (którą generuje skrypt).
5.
Cytat
Funkcje, które wykonują takie czynności jak:
Za każdym razem, gdy do opisu obiektu potrzebujesz używać spójnika "i" oznacza to, że najprawdopodobniej powinieneś podzielić go na mniejsze obiekty odpowiedzialne za poszczególne zadania. Oczywiście "dodaj/usuń/zmień" itp. traktuje się jako jedno.
Go to the top of the page
+Quote Post
Matkas
post
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 21.02.2011

Ostrzeżenie: (0%)
-----


Cytat
1. Przecież napisałem, że od błędów są wyjątki, a nie zwracanie 0/1.


Czyli mój kod wtedy wyglądałby w ten sposób:
  1. if (!$activated) {
  2. $this->Error
  3. throw new Exception($user['login'][1]);
  4. // Obsługując wyjątki, przejmowałbym parametry tablicy, i odpowiednio interpretował numer 'błędu'
  5. }
  6.  
  7. if (!$password_match) {
  8. throw new Exception($user['login'][2]);
  9. }
  10.  
  11. if (!$login_exist) {
  12.  
  13. throw new Exception($user['login'][3]);
  14. }
  15.  
  16. if (!$this->error) {
  17. return 1;
  18. }
  19.  

Cytat
3. Pisząc o obiekcie Request miałem na myśli obiekt reprezentujący żądanie HTTP. A chyba wiesz jakie dane zawiera takie żądanie?

Zawiera informacje o Nas samych jeśli się nie myle?

Cytat
5. Za każdym razem, gdy do opisu obiektu potrzebujesz używać spójnika "i" oznacza to, że najprawdopodobniej powinieneś podzielić go na mniejsze obiekty odpowiedzialne za poszczególne zadania. Oczywiście "dodaj/usuń/zmień" itp. traktuje się jako jedno.

Czy tak wyglądała by klasa, która jest odpowiedzialna za logowanie?
  1.  
  2. class UserAuth extends User
  3.  
  4. {
  5. var $login;
  6. var $password;
  7. __construct($login,$password)
  8. {
  9. $this->login = $login;
  10. $this->password = $password;
  11. }
  12. function login()
  13. {
  14. if (!$this->check_activated()) //Odwoluje sie do funkcji odziedziczonej z klasy User
  15. {
  16. $this->Error;
  17. throw new Exception($user['login'][1]);
  18. // Obsługując wyjątki, przejmowałbym parametry tablicy, i odpowiednio interpretował numer 'błędu'
  19. }
  20.  
  21. if (!$this->password_match()) // Jak wyzej
  22. {
  23. throw new Exception($user['login'][2]);
  24. }
  25.  
  26. if (!$login_exist) //Jak wyzej
  27. {
  28.  
  29. throw new Exception($user['login'][3]);
  30. }
  31.  
  32. if (!$this->error)
  33. {
  34. return 1;
  35. //Przechodze do klasy obslugujaca sesje?
  36. }
  37. }
  38. function logout()
  39. {
  40. //przechodze do klasy usuwajaca sesje?
  41. }
  42. }
  43.  


Pozdrawiam, Mateusz
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.10.2025 - 23:56