Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Skrypt rejestracji (OOP) - prośba o poprawę kodu
Testosteron
post
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 (IMG:style_emoticons/default/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
Testosteron
post
Post #2





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

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


Nie wiem, czy dobrze Cię zrozumiałem. Mogę stworzyć klasę form, która odpowiada za zwracanie pól formularza. Jej metoda mogłaby przyjmować parametr dotyczący typu pola, czyli - text, password, itp. Inna metoda tej klasy mogłaby ogólnie tworzyć formularz, a więc, np. ustawiałaby metodę get, bądź post i wskazywała na plik do którego mają zostać przesłane dane. Kolejne klasy dziedziczyłyby z tej klasy i odnosiłyby się do konkretnych typów pól formularza. Zawierałyby np. walidację wprowadzonych przez użytkownika danych i zwracałyby true bądź false

Dodatkowo metoda klasy form sprawdzałaby, czy dane zostały wcześniej przesłane. Zwracałaby wartość true bądź false. Poniżej deklaracji wszystkich klas mógłbym stworzyć instrukcję warunkową, która sprawdzałaby, czy dane zostały przesłane. Jeśli nie (a więc odpowiednia metoda zwróci wartość false), tworzy obiekty typu - login, password, mail, itp. W przeciwnym wypadku następuje sprawdzenie poprawności danych i jeśli wszystko jest dobrze, następuje zapisanie ich w bazie danych. W takim układzie tworząc kolejne formularze na stronie (np. komentarze, wyszukiwarka), mógłbym skorzystać z klas stworzonych wcześniej. Oczywiście musiałbym dodać nowe zapytanie, być może nową klasę weryfikującą poprawność danych, ale pracy byłoby o wiele mniej.

Uważasz, że tak byłoby dobrze?

Ten post edytował Testosteron 4.07.2014, 19:23:54
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 20:45