Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> rejestracja, sprawdzenie
tukan
post 14.07.2012, 22:50:53
Post #1





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 19.06.2011

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


Witam,
Mam dla Was do sprawdzenia początek rejestracji. Nie ma tu jeszcze zapisu do bazy danych, ale mam gotową walidację loginu i hasła. Został e-mail, ale to będzie analogicznie to loginu. Podaję kod:
  1. <?php
  2. function connect() {
  3. try {
  4. $host = "localhost";
  5. $dbname = "sfwyf";
  6. $user = "root";
  7. $pass = "vertrigo";
  8.  
  9. $dbh = new PDO("mysql:host=$host; dbname=$dbname", $user, $pass);
  10.  
  11. echo "Połączenie nawiązane";
  12. return $dbh;
  13. } catch ( PDOException $error) { die("Failed to connect:" . $error->getMessage());
  14. }
  15.  
  16. }
  17.  
  18. function is_availble_login($dbh, $desired_login) // ta funkcja, bo jeszce będę wykorzystywał przy sprawdzaniu ajaxowym, to samo będzie dla meila
  19. {
  20. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  21. $sql = "SELECT * FROM users WHERE username =:username)";
  22. $q = $dbh->prepare($sql);
  23. try{ $count_row = $q->execute(array(':username'=>$desired_login));}
  24.  
  25. catch(PDOException $e) { print_r( "checking.... ".$e->getTrace() );}
  26. if ($count_row->fetchColumn() > 0) {
  27. return false;
  28. else return true;
  29. }
  30. }
  31. class r_User{
  32. public $id;
  33. public $pass;
  34. public $pass2;
  35. public $name;
  36. public $username;
  37. public $email;
  38. public $permission_level;
  39. public $validate = true;
  40. public $registration_error = array();
  41. public $registration_error_id = array();
  42. function valid_form{
  43. if(this->$pass==$this->pass2){
  44.  
  45. $this->pass = trim($this->pass);
  46. if( !preg_match('^(?:[0-9a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ!@#$%^&*()_-=+[]{}|.]{5,15})$', $this->pass)
  47. {
  48. array_push($registration_error, "Podane hasło nie jest poprawne. Musi posiadać od 5 do 15 znaków. Hasło może zawierać następujące znaki: cyfry; litery; oraz następujące znaki: !@#$%^&*()_-=+[]{}|.")
  49. array_push($regisration_error_id, 0) // żebym wiedział, które pole na czerwono}
  50. $validate = false;
  51. }
  52.  
  53.  
  54. }
  55. else {array_push($registration_error, "Podane hasła nie zgadzają się");
  56. array_push($regisration_error_id, 0) // żebym wiedział, które pole na czerwono}
  57. $validate = false;
  58.  
  59. }
  60. //teraz login
  61.  
  62. $this->username = trim($this->username);
  63. if( !preg_match('^(?:[0-9a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ._-!@#$&]{5,15})$', $this->username)
  64. {
  65. array_push($registration_error, "Podany login jest niepoprawnyasło nie jest poprawne. Musi posiadać od 5 do 15 znaków. Hasło może zawierać następujące znaki: cyfry; litery; oraz następujące znaki: ._-!@#$&")
  66. array_push($regisration_error_id, 1) // żebym wiedział, które pole na czerwono}
  67. $validate = false;
  68. }
  69. else{
  70. if(is_availble_login($dbh, $this->username))
  71. {
  72. //wpisuje do bazy
  73. }
  74. else{
  75. array_push($registration_error, "Ten login jest już zajęty");
  76. array_push($regisration_error_id, 1) // żebym wiedział, które pole na czerwono}
  77. $validate = false;
  78. }
  79.  
  80.  
  81. }
  82.  
  83.  
  84.  
  85. }
  86. else {array_push($registration_error, "Podane hasła nie zgadzają się");
  87. array_push($regisration_error_id, 0) // żebym wiedział, które pole na czerwono}
  88. $validate = false;
  89.  
  90. }
  91. }
  92.  
  93.  
  94.  
  95.  
  96. }
  97.  
  98.  
  99.  
  100. ?>

Możliwe, że gdzieś "ify" mogą zachodzić na siebie, ale to poprawię. Chodzi o koncepcje walidacji, jak ją poprawić/uoptymalnić?

Ten post edytował tukan 14.07.2012, 22:52:05
Go to the top of the page
+Quote Post
Orzeszekk
post 14.07.2012, 23:29:24
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

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


Jeśli zerwiesz z syndromem - "Co nie ja napisałem, to niedobre" to możesz odkryć że ogólnodostępne frameworki PHP takie jak cakePHP lub Symfony 1/2 posiadają bardzo rozbudowane i wygodne walidatory.

Serio, szkoda sie bawic w wynajdowanie koła na nowo. Wbrew pozorom nie nauczysz się podczas tego zbyt dużo.

Ja myślę że walidacja jest paskudnie zrobiona. Wszystkie walidatory masz na stałe wpisane w metode validForm. Gdy przybędzie ci tego trochę, to kod wewnatrz tej metody rozrosnie sie na 30 ifów i case-ów. Trzeba robic rzeczy generycznie, tak by nie robic copy-paste jak bedziesz chcial to uzyc w innym miejscu.

Powinieneś utworzyć przynajmniej 2 klasy oparte na interfejsach podobnych do tych:

interface ValidatorEngine
{
function validateForm(Form $form);
function addValidator(Validator $validator);
}

interface Validator
{
function doValidate(ValidateFieldData $data);
}

w klase ValidateFieldData pakujesz wszystkie dane jakie musisz przeslac z formularza do walidatora, z metody doValidate zwracasz rezultat walidacji, dodajesz walidatory do validatorEngine i wstrzykujesz tam formularz.

Mozesz ten system pocisnac dalej i rozszerzyc interfejs Validator o metode w stylu getJavascript() która zwroci kod javascript potrzebny do przeprowadzenia danej walidacji rowniez po stronie klienta dla responsywnosci, i za pomoca validatorEngine uzbierany w tej sposob JS doklejac do widokow formularzy.

A wtedy ci wyjdzie system walidatorow jaki masz w symfony i wyjdzie na to ze nie warto bylo tego wszystkiego pisac, by sobie zwalidowac pare formularzy.

Ten post edytował Orzeszekk 14.07.2012, 23:37:59


--------------------
"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs
Go to the top of the page
+Quote Post

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: 6.07.2025 - 20:49