Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Skrypt rejestracji (OOP) - prośba o poprawę kodu
Testosteron
post 3.07.2014, 17:17:30
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

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


Witajcie!

Chcę nauczyć się programowania obiektowego. Niestety, kursy internetowe opierają się na nieco głupich przykładach, w stylu:
- zaszczekaj burku
- hau hau
Nie ma to przełożenia na realne problemy z jakimi stykamy się w programowaniu. W mojej książce, "PHP i MySQL. Vademecum profesjonalisty" także programowanie obiektowe nie zostało dobrze opisane. Postanowiłem więc spróbować napisać coś prostego. W moim przypadku był ro system rejestracji. Skrypt działa w 100%, chociaż nie jest dokończony (nie ma walidacji hasła, a walidacja loginu też nie jest w pełni skończona). Chodzi mi raczej o samą zasadę działania. Od razu mówię, że jest to mój PIERWSZY, obiektowy projekt pisany bez żadnego wzoru. Zależy mi na tym, żeby ktoś poradził, co należy zmienić.
  1. <?php
  2. /* class connect{
  3.   function __construct(){
  4.   $polaczenie = @new mysqli('localhost', 'root', 'haslo', 'login');
  5.   if (mysqli_connect_errno() != 0){
  6.   echo '<p>Wystąpił błąd połączenia: ' . mysqli_connect_error() . '</p>';
  7.   }
  8.   }
  9. }
  10. */
  11.  
  12. class formularz{
  13. function wyswietl(){
  14. echo"<table>
  15. <form action='register.php' method='post'>
  16. <tr><td>Login:</td><td><input type='text' name='login'></td></tr>
  17. <tr><td>Password:</td><td><input type='password' name='pass'></td></tr>
  18. <tr><td><input type='submit' value='zarejestruj'></td></tr></form>
  19. </table>";
  20. }
  21.  
  22. }
  23.  
  24. class walidacja extends formularz{
  25.  
  26. //dodawanie usera
  27. function __construct(){
  28. $mysqli = new mysqli('localhost', 'root', 'haslo', 'login');
  29. $login = $mysqli->real_escape_string($_POST['login']);
  30. $pass = $mysqli->real_escape_string($_POST['pass']);
  31.  
  32. if (empty($login) || empty($pass) ){
  33. $this->wyswietl();
  34. } else {
  35. if ($this->sprawdz_login($login) ){
  36. $query = $mysqli->query("INSERT INTO login VALUE('" . $login . "', '" . $pass . "')");
  37. if ($query){
  38. echo 'user został dodany';
  39. } else {
  40. echo 'blad';
  41. }
  42. }
  43.  
  44. }
  45. }
  46.  
  47. //Poprawność loginu
  48. function sprawdz_login($login){
  49. $login = $_POST['login'];
  50. if (strlen($login) < 4){
  51. echo 'login musi miec przynajmniej 4 znaki';
  52. } else {
  53. return true;
  54. }
  55. }
  56. }
  57.  
  58.  
  59.  
  60. $formularz = new walidacja;
  61.  
  62. ?>

Na początku chciałem napisać klasę connect (obecnie jest zawarta w komentarzu), jednak miałem problem z wykorzystaniem jej, tzn. zależy mi, żeby w jednej klasie zawrzeć wszystkie dane dotyczące logowania do mysql i później żebym mógł w innych klasach wykorzystywać wszystkie metody mysqli. Niestety miałem z tym problem. Jeżeli ktoś wie jak to zrobić, to byłbym także wdzięczny za odpowiedź.

pozdrawiam smile.gif

Ten post edytował Testosteron 3.07.2014, 17:21:48
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
SmokAnalog
post 4.07.2014, 09:40:17
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Dziedziczenie jest wspaniałe i daje mnóstwo korzyści. Jedną z moich ulubionych jest tzw. polimorfizm. Jako że nie lubisz przykładów nieinformatycznych (ja np. wolę takie na psach, truskawkach itd. biggrin.gif), to spróbuję podać informatyczny. Ba, podam nawet przykład dla klasy formularzy.

Prędzej czy później będziesz chciał zrobić obiekty pól formularza. To jest doskonałe miejsce dla dziedziczenia, bo one będą miały jakieś części wspólne, na przykład:
  1. class InputText extends InputField {...}
  2. class InputCheckbox extends InputField {...}
  3. // teraz uważaj:
  4. class InputTextarea extends InputText {...}

Obiekt generujący textarea mógłby dziedziczyć po obiekcie generującym zwykłe pole tekstowe, bo będą miały prawdopodobnie wiele wspólnego, a jedną z niewielu różnic będzie metoda, która wypluwa ich HTML.

W klasie formularza mógłbyś mieć metodę, która dodaje pole na zasadzie:
  1. $form = new Form;
  2. $textarea = new InputTextarea;
  3.  
  4. $form->add($textarea);


A definicja metody add w klasie Form mogłaby wyglądać tak:
  1. public function add(InputField $field) {...}


Tutaj działa nasz polimorfizm, bo mówisz metodzie add, że może przyjmować dowolne pole. Każda z naszych powyższych klas InputText, InputCheckbox i InputTextarea to instancje klasy InputField, bo każda po niej dziedziczy. InputText i InputCheckbox bezpośrednio, a InputTextarea dziedziczy po InputText, czyli też jest dzieckiem klasy InputField smile.gif
Go to the top of the page
+Quote Post

Posty w temacie
- Testosteron   [PHP] Skrypt rejestracji (OOP) - prośba o poprawę kodu   3.07.2014, 17:17:30
- - ctom   do przemyślenia : co ma wspólnego "class wali...   3.07.2014, 17:57:45
- - SmokAnalog   Po pierwsze takie małe kosmetyczne sprawy: Nazwy k...   3.07.2014, 18:16:58
- - Testosteron   [PHP] pobierz, plaintext <?php/* class connect{...   4.07.2014, 08:43:29
- - Turson   Dalej masz te same błędy: Nazewnictwo klas Ogólnie...   4.07.2014, 08:50:45
- - Testosteron   * Nazewnictwo to mały pikuś. Ten skrypt miał być w...   4.07.2014, 09:07:30
- - aras785   Odnośnie ECHO to nigdy nie używaj tego w metodach ...   4.07.2014, 09:31:46
- - SmokAnalog   Dziedziczenie jest wspaniałe i daje mnóstwo korzyś...   4.07.2014, 09:40:17
- - Testosteron   Nie wiem, czy dobrze Cię zrozumiałem. Mogę stworzy...   4.07.2014, 18:22:34
- - pedro84   @Testosteron - nie. Przeczytałeś w ogóle post oraz...   4.07.2014, 23:26:45
- - Testosteron   Czytałem, ale przed samym wyjściem. A metody walid...   5.07.2014, 08:40:52
- - pedro84   Walidacja moim zdaniem powinna być osobnym bytem. ...   5.07.2014, 10:32:38
- - Testosteron   Ściągnąłem Symfony. Muszę przyznać, ze ten kod jes...   5.07.2014, 16:44:24
- - pedro84   Chodziło mi o Symfony 2. Najpierw musisz poznać p...   5.07.2014, 19:03:18
- - Testosteron   Chodziło mi o aplikacje na urządzenia mobilne. Duż...   17.07.2014, 07:55:48
- - Pyton_000   Drobne uwagi co do kodu. W klasach dziedziczących ...   17.07.2014, 08:31:45
- - golabow   Może pomyśl o klasie abstrakcyjnej, wydzielisz do ...   17.07.2014, 09:24:11
- - Testosteron   Macie rację. Postaram się poprawić kod. Tylko, że ...   17.07.2014, 20:29:58
- - pedro84   A właściwie po co Ci metoda, w której klasa pluje ...   17.07.2014, 23:52:04
- - Testosteron   No niby mogę, ale z drugiej strony w widoku można ...   18.07.2014, 13:48:29


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 Wersja Lo-Fi Aktualny czas: 15.06.2025 - 19:08