Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Prosta klasa rotatora linków do analizy, Chciałbym się dowiedzieć co robię źle i jak to powinno wyglądać.
emtiej
post
Post #1





Grupa: Zarejestrowani
Postów: 207
Pomógł: 18
Dołączył: 12.04.2009
Skąd: Rypin

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


Już od dawna miałem zamiar zacząć pisać coś w OOP, do tej pory tylko teoria z której wiadomo dużo bez praktyki do głowy nie wejdzie i postanowiłem napisać prosty skrypt rotatora linków, stworzyłem klasę "lr" i klasę "admin" która jest rozszerzeniem klasy lr(chciałbym, aby w lr znajdowały się funkcje które wyciągają linki z bazy i takie tam, co chciałbym też wykorzystać w panelu administracyjnym. Dopiero zacząłem i już mam jakieś wątpliwości co do logiki i użyteczności kodu. To mój pierwszy zamach na OOP, proszę o wskazówki co źle robię, jak wy to byście zrobili itp. Rotator ma być prosty, jego funkcje to: dodawanie, usuwanie, edycja dodanych linków. W bazie zrobiłem sobie tabelę "config" w której przechowuję login i hasło administratora.

Tu plik lrclass.php
  1. <?php
  2.  
  3. //-----------------------------------------------------------
  4. //- Klasa rotatora linków -
  5. //-----------------------------------------------------------
  6.  
  7. class lr
  8. {
  9. private function db()
  10. {
  11. $this->dbhost = "localhost";
  12. $this->dbname = "lr";
  13. $this->dbuser = "lg";
  14. $this->dbpass = "lgpass";
  15.  
  16. $conn = new mysqli($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname);
  17.  
  18. return $conn;
  19.  
  20. }
  21.  
  22. public function lr()
  23. {
  24. print_r($this->GetConfig());
  25. }
  26.  
  27. public function GetConfig()
  28. {
  29. // funkcja pobiera i zwraca tabel? config
  30. $db = $this->db();
  31. $query = $db->query("SELECT * FROM config");
  32. $result = $query->fetch_assoc();
  33.  
  34. return $result;
  35. }
  36. public function GetLinks()
  37. {
  38. $db = $this->db();
  39. $query = $db->query("SELECT * FROM links");
  40. $result = $query->fetch_assoc();
  41.  
  42. return $result;
  43. }
  44.  
  45.  
  46.  
  47.  
  48. }
  49.  
  50. ?>
  51.  


adminclass.php
  1. <?php
  2.  
  3. //-----------------------------------------------------------
  4. //- Klasa panelu administracyjnego -
  5. //-----------------------------------------------------------
  6. require_once("lrclass.php");
  7.  
  8. class admin extends lr
  9. {
  10.  
  11. var $admin;
  12.  
  13. public function admin()
  14. {
  15. if(self::IsAdmin())
  16. {
  17. echo "Jesteś zalogowany jako administrator";
  18.  
  19. if($_GET['action'] == 'logout')
  20. {
  21. self::StopAdminSession();
  22. }
  23. }else{
  24. if($_GET['login'] && $_GET['pass'])
  25. {
  26. if(self::login($_GET['login'], $_GET['pass']))
  27. {
  28. echo "Dobre dane do logowania";
  29. }else{
  30. echo "Złe dane do logowania!";
  31. }
  32. }else{
  33. echo "Tu formularz logowania";
  34. echo $_SESSION['login'];
  35. }
  36. }
  37.  
  38. }
  39. public function login($login, $pass)
  40. {
  41. $this->adminlogin = self::GetAdminLogin();
  42. $this->adminpass = self::GetAdminPass();
  43.  
  44. if($login == $this->adminlogin && $pass == $this->adminpass)
  45. {
  46. self::StartAdminSession();
  47. return TRUE;
  48. }else{
  49. return FALSE;
  50. }
  51.  
  52.  
  53. }
  54. public function StartAdminSession()
  55. {
  56. $_SESSION['login'] = TRUE;
  57.  
  58. }
  59. public function StopAdminSession()
  60. {
  61. $_SESSION = array();
  62. }
  63. public function GetAdminLogin()
  64. {
  65. $db = parent::db();
  66. $query = $db->query("SELECT value FROM config where name='adminlogin'");
  67. if(!$db) DIE("Zapytanie się nie powiodło");
  68. $result = $query->fetch_object();
  69. $result = $result->value;
  70.  
  71. return $result;
  72. }
  73. public function GetAdminPass()
  74. {
  75. $db = parent::db();
  76. $query = $db->query("SELECT value FROM config where name='adminpass'");
  77. if(!$db) DIE("Zapytanie się nie powiodło");
  78. $result = $query->fetch_object();
  79. $result = $result->value;;
  80.  
  81. return $result;
  82. }
  83. public function IsAdmin()
  84. {
  85. if($_SESSION['login']){
  86. return TRUE;
  87. }else{
  88. return FALSE;
  89. }
  90. }
  91. }
  92.  
  93. ?>


W klasie lr jest funkcja db(), czy to jest dobry pomysł żeby ją tam umieszczać? Może lepszym wyjściem byłaby osobna klasa do łączenia z bazą? Naprawdę teoretycznie trochę wiem, ale w praktyce wymiękam hah smile.gif Pomóżcie początkującemu ^^

Ten post edytował emtiej 22.03.2010, 13:33:34
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




var $admin;
public function admin()

Jesli juz uzywasz php5 to nie stosuj VAR - jest to wylacznie dla php4 a w php5 tolerowane.



self::StopAdminSession();
wiesz do czego sluzy self:: ?

Włącz sobie wyswietlanie wszystkich bledow a zobaczysz ile ich masz smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
emtiej
post
Post #3





Grupa: Zarejestrowani
Postów: 207
Pomógł: 18
Dołączył: 12.04.2009
Skąd: Rypin

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


Cytat
Jesli juz uzywasz php5 to nie stosuj VAR


To pozostało z testów

Cytat
Włącz sobie wyswietlanie wszystkich bledow a zobaczysz ile ich masz


mellow.gif ciężko mi je opanować hah smile.gif Masakra
Cytat
self::StopAdminSession();
wiesz do czego sluzy self:: ?


Teraz już wiem hah smile.gif

Jednak teorii za mało jeszcze hah smile.gif Ok na razie dam się na spokój, ale nie zamykaj proszę tego tematu, wrzucę tu poprawiony kod za kilka dni smile.gif
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




hah i staraj się nie używać tablic $_GET/$_POST/$_SESSION "na żywca" wewnątrz klas hah lepiej przekazywać konkretne wartości w formie parametrów hah hah hah.
Go to the top of the page
+Quote Post
zend
post
Post #5





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


Wywyłując metode getDb kilka razy nawiązujesz połączenie z bazą danych kilkakrotnie

  1.  
  2. myclass {
  3. static $DB = null;
  4.  
  5. public function getDb()
  6. {
  7. if(self::$DB === null)
  8. {
  9. self::$DB = new mysqli('xxx' , 'xxx');
  10. }
  11. }
  12.  
  13. }
  14.  


Takie rozwiązanie zapobiegnie kilkukrotnemu nawiązywaniu połączenia z bazą. Nie myśl też że z poziomu deklarując metodę jako prywatną zapobiegniesz wielokrotnym połączeniom, wystarczy wywołać pobliczną metodę getConfig() dwukrotnie i już mamy jedno niepotrzebne połączenie z bazą.

Kolejną sprawą jest kwestia ustawiania parametrów do połączenia z bazą, powinieneś mieć możliwość ustawienia tych danych z zewnątrz klasy, a nie ustawiać je od środka i w dodatku przy każdym wywołaniu db

Ten post edytował zend 26.03.2010, 20:15:28
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 06:36