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
szczypior
post
Post #2





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

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


Cytat
z jakiego powodu nie uzywasz PDO ?

Gdyż to tylko testowy kod, szybciej pisze się bez PDO. Nacodzień jednak korzystam z dobrodziejstw PDO.

Cytat
podejscie z adduser jest dla mnie troche dziwne

Nie bardzo rozumiem jak mam oddzielić warstwę z userem od zapisywania? Rozumiem, że proponujesz, aby w inny sposób przekazać zvalidowane dane do zapytania SQL, tak? Masz jakąś konkretną propozycję?

Napisany przeze mnie kod miałby służyć do rejestracji użytkowników w serwisie poprzez formularz i miałby operować na otrzymanych danych, więc nie będzie to na masową skalę. Nie mniej jednak nie bardzo rozumiem idee "fabryki". Co ona powinna zawiera/robić?

Wyświetlanie komunikatów udało mi się rozwiązać po wskazówkach Nospor'a:) Czy ten sposób jest OK? Czy jest lepsze rozwiązanie?

Natomiast nadal nie bardzo wiem, jak udoskonalić resztę kodu. Bardzo proszę o porady, pomoc. Teraz wygląda on tak:
  1.  
  2. class new_user
  3. {
  4. public $login;
  5. public $pass;
  6. public $re_pass;
  7. public $email;
  8. public $status;
  9.  
  10. function validate($dane)
  11. {
  12. $dane = htmlspecialchars($dane, ENT_QUOTES);
  13. $dane = mysql_real_escape_string($dane);
  14. {
  15. $dane = addslashes ($dane);
  16. }
  17. return $dane;
  18. }
  19.  
  20. function check_login ()
  21. {
  22. if ($this->login==$this->validate($this->login))
  23. {
  24. $query = mysql_query('SELECT id FROM test WHERE login = "'.$this->login.'"') or die (mysql_error());
  25. if (mysql_num_rows($query) != 0)
  26. {
  27. // login zajęty
  28. $this->status = 'Wybrany login jest zajęty';
  29. return false;
  30. }
  31. else
  32. {
  33. // login wolny
  34. return $this->login;
  35. }
  36. }
  37. else
  38. {
  39. $this->status = 'Login zawiera niedozwolone znaki';
  40. return false;
  41. }
  42. }
  43.  
  44. function check_pass ()
  45. {
  46. if ($this->pass==$this->validate($this->pass))
  47. {
  48. if ($this->pass==$this->re_pass)
  49. {
  50. if (strlen($this->pass)>5)
  51. {
  52. return md5($this->pass);
  53. }
  54. else
  55. {
  56. $this->status = 'Podane hasło jest za krótkie (min. 6 znaków)';
  57. return false;
  58. }
  59. }
  60. else
  61. {
  62. $this->status = 'Podane hasła są różne';
  63. return false;
  64. }
  65. }
  66. else
  67. {
  68. $this->status = 'Hasło zawiera niedozwolone znaki';
  69. return false;
  70. }
  71.  
  72. }
  73.  
  74. function check_email ()
  75. {
  76. if (ereg("^[a-z0-9_\\.-]+@([a-z0-9_-]+\\.)+[a-z]{2,}$", $this->email))
  77. {
  78. return $this->email;
  79. }
  80. else
  81. {
  82. $this->status = 'Podaj poprawny adres e-mail';
  83. return false;
  84. }
  85. }
  86.  
  87. function add_user ()
  88. {
  89. if($this->check_login() && $this->check_pass() && $this->check_email())
  90. {
  91. mysql_query("INSERT INTO test(login,pass,email) VALUES('".$this->check_login()."','".$this->check_pass()."','".$this->check_email()."')");
  92. {
  93. $this->status = 'Użytkownik dodany poprawnie.';
  94. return true;
  95. }
  96. else
  97. {
  98. $this->status = 'Wystąpił błąd podczas dodawania użytkownika.';
  99. return false;
  100. }
  101. }
  102. }
  103.  
  104. }
  105.  
  106. $new = new new_user;
  107. $new->login = 'sssssgs';
  108. $new->pass = 'aaaaaaaaa';
  109. $new->re_pass = 'aaaaaaaaa';
  110. $new->email = 'tttttg@ggggg.pl';
  111. $nowy = $new->add_user($new);
  112. echo $new->status;
  113.  
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: 27.09.2025 - 01:54