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%)
-----


Chodziło mi o aplikacje na urządzenia mobilne. Dużo stron posiada takie aplikacje, które ułatwiają korzystanie z nich, np. FB, nk, Kwejk, Demotywatory, itp.

Natrafiłem na pewien problem w kodzie. Otóż - muszę stworzyć klasę, która sprawdza, czy dane zostały przesłane z formularza (następuje ich weryfikacja) czy nie (wyświetlenie formularza). W poprzednim kodzie sprawdzałem czy którakolwiek ze zmiennych globalnych nie została wysłana. W nowym kodzie mogę stworzyć dowolną ilość kontrolek formularza o dowolnych nazwach. Jak więc zrobić taką klasę? Może po prostu zrobić to już poza klasami?

Faktycznie, ściągnąłem starszą wersję. W sumie za bardzo nie wczytałem się na ich stronie, ale na pierwszy rzut oka widzę, ze jest trochę zabawy z instalacją Symphony 2. Trzeba zainstalować Compozera, itp. W Zend pewnie też są w miarę porządnie napisane klasy walidacji danych. Jutro ściągnę Zenda albo ę Symphony 2, bo dzisiaj jestem już zmęczony.

Trochę poprawiłem kod, ale na razie zrobiłem tylko szkielet.
  1. <?php
  2. class form{
  3. private $name, $value;
  4.  
  5. public function setName($name){
  6. $this->name=$name;
  7. }
  8. public function getName(){
  9. return $this->name;
  10. }
  11. public function setValue($name){
  12. $this->value=$value;
  13. }
  14. public function getValue(){
  15. return $this->value;
  16. }
  17.  
  18. public function newForm($method, $file){
  19. echo '<form action="' . $file . '" method="' . $method . '" />';
  20. }
  21.  
  22. public function finish(){
  23. echo '</form>';
  24. }
  25. }
  26.  
  27. class inputText extends form{
  28. public function createText(){
  29. return '<input type="text" name="' . $this->getName() . '" />';
  30. }
  31. }
  32.  
  33. class inputPass extends form{
  34. public function createPass(){
  35. return '<input type="password" name="' . $this->getName() . '" />';
  36. }
  37. }
  38.  
  39. class inputSubmit extends form{
  40. public function createSubmit(){
  41. return '<input type="submit" value="' .$this->getValue(). '" />';
  42. }
  43. }
  44. class validation{
  45. private $variable, $type;
  46.  
  47. public function setValidation($variable, $type){
  48. $this->variable = $variable;
  49. $this->type = $type;
  50. }
  51. public function validateForm(){
  52. htmlspecialchars($this->variable); //na razie nie łączę się z bazą danych, więc powinno mi to wystarczyć
  53. switch ($this->type){
  54. case 1: //nr 1 oznacza login
  55. {
  56. if (strlen($this->variable) < 3){
  57. return false;
  58. } else {
  59. return true;
  60. }
  61. }
  62. //case 2:
  63. //etc
  64. }
  65.  
  66. }
  67. }
  68.  
  69. class register{
  70. private $login, $pass;
  71.  
  72. public function setRegister($login, $pass){
  73. $this->login = $login;
  74. $this->pass = $pass;
  75. }
  76.  
  77. public function finalRegister(){
  78. return 'Zarestrowałem konto o nicku ' . $this->login . '. Jego hasło to: ' . $this->pass;
  79. }
  80. }
  81.  
  82. if (empty($_POST['login']) || empty($_POST['pass']) ){
  83. $form = new form;
  84. $form->newForm('POST', '8.php');
  85. $login = new inputText;
  86. $login->setName('login');
  87. echo $login->createText();
  88. $pass = new inputPass;
  89. $pass->setName('pass');
  90. echo $pass->createPass();
  91. $submit = new inputSubmit;
  92. $submit->setValue('Wyslij');
  93. echo $submit->createSubmit();
  94. $form->finish();
  95. } else {
  96. $valid = new validation;
  97. $valid->setValidation($_POST['login'], 1);
  98. if ($valid->validateForm() == false){
  99. echo "Nie moge zarejestrowac tego usera";
  100. } else {
  101. $reg = new register;
  102. $reg->setRegister($_POST['login'], $_POST['pass']);
  103. echo $reg->finalRegister();
  104. }
  105. }
  106. ?>


Nikt już się nie wypowie?

Ten post edytował Testosteron 6.07.2014, 19:10:17
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: 29.12.2025 - 19:34