Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [OOP] problemy początkującego - rejestracja
szczypior
post
Post #1





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 5.02.2007

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


Witam

Postanowiłem spróbować swoich sił w OOP, na przykładzie skryptu rejestracji użytkowników. Napisałem coś takiego i o dziwo działa (IMG:style_emoticons/default/winksmiley.jpg) Gdy dane są poprawne dodaje użytkownika, gdy nie to nie dodaje, ale za to również nie wyświetla komunikatu. Moja prośba do Was, doświadczonych w temacie osób, to zobaczenie czy ten kod jest napisany poprawnie (zgodnie ze sztuką), co można w nim ulepszyć i jak najlepiej rozwiązać wyświetlanie komunikatów, które w tej formie nie działają.

Za wszelkie opinie, porady serdecznie dziękuję(IMG:style_emoticons/default/smile.gif)

  1. class new_user
  2. {
  3. public $login;
  4. public $pass;
  5. public $re_pass;
  6. public $email;
  7.  
  8. function validate($dane)
  9. {
  10. $dane = htmlspecialchars($dane, ENT_QUOTES);
  11. $dane = mysql_real_escape_string($dane);
  12. {
  13. $dane = addslashes ($dane);
  14. }
  15. return $dane;
  16. }
  17.  
  18. function check_login ()
  19. {
  20. if ($this->login==$this->validate($this->login))
  21. {
  22. $query = mysql_query('SELECT id FROM test WHERE login = "'.$this->login.'"') or die (mysql_error());
  23. if (mysql_num_rows($query) != 0)
  24. {
  25. // login zajęty
  26. $komunikat = 'Wybrany login jest zajęty';
  27. return false;
  28. }
  29. else
  30. {
  31. // login wolny
  32. return $this->login;
  33. }
  34. }
  35. else
  36. {
  37. $komunikat = 'Login zawiera niedozwolone znaki';
  38. return false;
  39. }
  40. }
  41.  
  42. function check_pass ()
  43. {
  44. if ($this->pass==$this->validate($this->pass))
  45. {
  46. if ($this->pass==$this->re_pass)
  47. {
  48. if (strlen($this->pass)>5)
  49. {
  50. return md5($this->pass);
  51. }
  52. else
  53. {
  54. $komunikat = 'Podane hasło jest za krótkie (min. 6 znaków)';
  55. return false;
  56. }
  57. }
  58. else
  59. {
  60. $komunikat = 'Podane hasła są różne';
  61. return false;
  62. }
  63. }
  64. else
  65. {
  66. $komunikat = 'Hasło zawiera niedozwolone znaki';
  67. return false;
  68. }
  69.  
  70. }
  71.  
  72. function check_email ()
  73. {
  74. if (ereg("^[a-z0-9_\\.-]+@([a-z0-9_-]+\\.)+[a-z]{2,}$", $this->email))
  75. {
  76. return $this->email;
  77. }
  78. else
  79. {
  80. $komunikat = 'Podaj poprawny adres e-mail';
  81. return false;
  82. }
  83. }
  84.  
  85. function add_user ()
  86. {
  87. if($this->check_login() && $this->check_pass() && $this->check_email())
  88. {
  89. mysql_query("INSERT INTO test(login,pass,email) VALUES('".$this->check_login()."','".$this->check_pass()."','".$this->check_email()."')");
  90. {
  91. return true;
  92. }
  93. else
  94. {
  95. return false;
  96. }
  97. }
  98. }
  99.  
  100. }
  101.  
  102. $new = new new_user;
  103. $new->login = 'ssssss';
  104. $new->pass = 'aaaaaaaaa';
  105. $new->re_pass = 'aaaaaaaaa';
  106. $new->email = 'ttttt@gggggg.pl';
  107. $nowy = $new->add_user($new);
  108. echo $komunikat;
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Maciekbjw
post
Post #2





Grupa: Zarejestrowani
Postów: 217
Pomógł: 23
Dołączył: 2.12.2007
Skąd: Warszawa

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


Kolego według mnie nie potrzebnie pakujesz całą funkcjonalność do jednej klasy.
Model MVC się kłania.

Zrób osobno akcje, osobną klasę do walidacji danych, osobną do zapisu usera do bazy (tam metody zapisujace, a takze sprawdzajace dostepnosc jakiegos loginu). W ten sposób będzie to miało ręce i nogi (IMG:style_emoticons/default/smile.gif) bo to co przedstawiles to faktycznie klasy ale nijak ma sie to do sensu programowania obiektowego (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
szczypior
post
Post #3





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 5.02.2007

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


Cytat(Maciekbjw @ 19.09.2010, 20:55:38 ) *
Kolego według mnie nie potrzebnie pakujesz całą funkcjonalność do jednej klasy.
Model MVC się kłania.

Zrób osobno akcje, osobną klasę do walidacji danych, osobną do zapisu usera do bazy (tam metody zapisujace, a takze sprawdzajace dostepnosc jakiegos loginu). W ten sposób będzie to miało ręce i nogi (IMG:style_emoticons/default/smile.gif) bo to co przedstawiles to faktycznie klasy ale nijak ma sie to do sensu programowania obiektowego (IMG:style_emoticons/default/smile.gif)


Tzn mówisz, żeby zrobić osobno klasę do walidacji i zapisu, następnie wywoływać je po kolei?
  1. $check = new validate;
  2. $check ->login = 'ssss#%@#&;"sg/s0aa';
  3. $check ->pass = 'aaaaaaaaa';
  4. $check ->re_pass = 'aaaaaaaaa';
  5. $check ->email = 'tttttg@ggggg.pl';
  6.  
  7. $new = new user($pdo);
  8. $new->login = $check ->login;
  9. $new->pass = $check ->pass;
  10. $new->email = $check ->email;
  11. $new->save();

Tak miałoby wyglądać ich wywołanie?
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: 8.10.2025 - 18:16