Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] OOP poprawność kodu
Forum PHP.pl > Forum > Przedszkole
plej
class.panel.php
  1. class panel
  2. {
  3. public $haslo;
  4. public $haslo2;
  5. public $login;
  6. public $email;
  7. public $email2;
  8. public $blad = 0;
  9. public $tabela = 'uzytkownik';
  10. public $wyslane;
  11.  
  12. function Rejestracja($wyslane, $loginn, $hasloo, $hasloo2, $emaill, $emaill2)
  13. {
  14. $this->wyslane = $wyslane;
  15. if(!isset($_SESSION['login']))
  16. {
  17.  
  18.  
  19. if ($this->wyslane)
  20. {
  21. $this->login = htmlspecialchars(stripslashes(strip_tags(trim($loginn))), ENT_QUOTES);
  22. $this->haslo = htmlspecialchars(stripslashes(strip_tags(trim($hasloo))), ENT_QUOTES);
  23. $this->haslo2 = htmlspecialchars(stripslashes(strip_tags(trim($hasloo2))), ENT_QUOTES);
  24. $this->email = htmlspecialchars(stripslashes(strip_tags(trim($emaill))), ENT_QUOTES);
  25. $this->email2 = htmlspecialchars(stripslashes(strip_tags(trim($emaill2))), ENT_QUOTES);
  26.  
  27. if (strlen($this->login) < 3 or strlen($this->login) > 30 or !eregi("^[a-zA-Z0-9_.]+$", $this->login))
  28. {
  29. $this->blad++;
  30. echo '<p>Proszę wprowadzić poprawny login (od 3 do 30 znaków).</p>';
  31. } else {
  32. $wynik = mysql_query("SELECT * FROM $this->tabela WHERE login='$this->login'");
  33. if (mysql_num_rows($wynik) <> 0)
  34. {
  35. $this->blad++;
  36. echo '<p>Podana nazwa użytkownika została już zajęta.</p>';
  37. }
  38. }
  39. if ($this->haslo !== $this->haslo2)
  40. {
  41. $this->blad++;
  42. echo '<p> Podane hasła nie są ze sobą zgodne. </p>';
  43. }
  44. if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+\.)+[a-z]{2,4}$", $this->email))
  45. {
  46. $this->blad++;
  47. echo '<p> Proszę wprowadzić poprawnie adres e-mail.</p>';
  48. } else {
  49. $wynik = mysql_query("SELECT * FROM $this->tabela WHERE email='$this->email'");
  50. if (mysql_num_rows($wynik) <> 0)
  51. {
  52. $this->blad++;
  53. echo '<p>Podany adres e-mail jest już zajęty.</p>';
  54. }
  55. }
  56. if ($this->email !== $this->email2)
  57. {
  58. $this->blad++;
  59. echo '<p>Podane adresy e-mail nie są ze sobą zgodne.</p>';
  60. }
  61. if ($this->blad == 0)
  62. {
  63. $this->haslo = md5($this->haslo);
  64. $kod = uniqid(rand());
  65.  
  66. $wynik = mysql_query("INSERT INTO $this->tabela VALUES('', '$this->login', '$this->haslo', '$this->email', '$kod', NOW(), '')");
  67. if ($wynik)
  68. {
  69. $list = "Witaj $this->login ! Kliknij w poniższy link, aby aktywować swoje konto. $kod";
  70. mail($email, "Rejestracja użytkownika", $list, "FROM: <>");
  71. echo '<p>Dziękujemy za rejestrację! W ciągu najbliższych 5 minut dostaniesz wiadomość e-mail z dalszymi wskazówkami rejestracji.</p>';
  72. }
  73. }
  74. }
  75. // Tworzenie formularza
  76. echo <<< KONIEC
  77.  
  78.   <form action="index.php" method="post">
  79.   <input type="hidden" name="wyslane" value="TRUE" />
  80.  
  81.   <p>Login <font color="black">*</font>: <input type="text" name="login" /></p>
  82.   <p>Hasło <font color="red">*</font>: <input type="password" name="haslo" /></p>
  83.   <p>Powtórz hasło <font color="red">*</font>: <input type="password" name="haslo2" /></p>
  84.   <p>Adres e-mail <font color="red">*</font>: <input type="text" name="email" /></p>
  85.   <p>Powtórz adres e-mail <font color="red">*</font>: <input type="text" name="email2" /></p>
  86.   <p><input type="submit" value="wyślij" /></p></form>
  87. KONIEC;
  88. } else
  89. header('Location: index.php');
  90. }
  91. }


index.php
  1. require_once('class.db.php');
  2. require_once('class.panel.php');
  3. $po = new db('plej', 'jakies', 'cos', 'localhost');
  4.  
  5. $panel = new panel();
  6. $panel->Rejestracja($_POST["wyslane"], $_POST['login'], $_POST['haslo'], $_POST['haslo2'], $_POST['email'], $_POST['email2']);

Skrypt działa i dodaje użytkownika ale mi chodzi czy dobrze pisze np. czy dobrze zmienne dodaje itd. czy lepiej jakoś inaczej je przekazywać, czy styl pisania w OOP jest dobry dlatego pisze do was żeby od razu się uczyć dobrze : )) z góry mówię że w oop nie siedzę długo dopiero w nim raczkuje.
Mam nadzieje że rozumiecie o co chodzi.

Pozdrawiam.
piotrooo89
więc tak zacznę od samej góry:
-pola klasy powinny być private, ustawiane/pobierane za pomocą setterów/getterów
-ja np do metod przekazuje tablice z danymi i ewentualnie identyfikator rekordu, dlaczego? aby jak zmieni mi się struktura (doda/odejmie) jedno pole to żeby nie trzeba było zmieniać we wszystkich miejscach wywołania, no i przekazywanie miliarda parametrów też nie jest zbyt estetyczne
-klasy nie powinny wyświetlać błędów w postaci echo, tylko wyrzucać wyjątki
-jeśli już łączysz się z bazą danych zrób to po bożemu za pomocą PDO
-widzę że Twoja metoda robi miliard rzeczy jednocześnie, powinieneś rozbić ją na metody pośrednie np: funkcja do metoda maila, metoda do generowania formularza etc...
-metody nie powinny zwracać wartości bezpośrednio na ekran (echo) tylko powinieneś używać return
-korzystasz z zdeprecjonowanych funkcji - eregi

to tyle zauważyłem, długa droga przed Tobą.
kaem
I po co tam jest stripslashes? Chyba że masz włączone na serwerze magic quotes, to zalecałbym wyłączenie. A przed insertem lub updatem do bazy lepiej stosować funkcję mysql_real_escape_string.
plej
trochę dużo tego no ale zrobię jak mówicie : ))
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.