Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] problem z prostą klasą
Forum PHP.pl > Forum > Przedszkole
dwwa
zacząłem uczyć się programowania obiektowego, napisałem prostą klasę do walidacji formularzy
  1. class form_valid {
  2.  
  3. public function valid_email($value) {
  4. if (!preg_match('/^([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})$/i', $value)) {
  5. $this->error = 'Podany email jest nieprawidłowy.';
  6. }
  7. }
  8.  
  9. public function show_error() {
  10. return $this->error;
  11. }
  12.  
  13. public function is_valid() {
  14. return (count($this->error) > 0) ? FALSE : TRUE;
  15. }
  16.  
  17. }

tak z niej korzystam:
  1. if (isset($_POST['valid'])) {
  2. $email = $_POST['email'];
  3. $form_valid = new form_valid;
  4. $form_valid->valid_email($email);
  5.  
  6. if ($form_valid->is_valid()) {
  7. echo 'Email jest prawidłowy.';
  8. }
  9. else {
  10. $form_valid->show_error();
  11. }
  12.  
  13. }
  14.  
  15.  
  16. ?>
  17.  
  18. <form action="" method="post">
  19. email: <input type="text" name="email" />
  20. <input type="submit" value="sprawdz" name="valid" />
  21. </form>

tylko nie wiem dlaczego jak wpiszę zły adres email to nie pokazuje błędu.. jak wpisuję poprawny to jest ok. co jest nie tak?
blooregard
  1. if ($form_valid->is_valid()) {
  2. echo 'Email jest prawidłowy.';
  3. }
  4. else {
  5. echo $form_valid->show_error(); // <- brakowało tego echo tongue.gif
  6. }


Dobrze byłoby, byś metody, które jedynie zwracają jakąś wartość (tzw. gettery) nazywał np. tak: getCosTam - w Twoim przypadku zamiast show_error() mogłoby być getError().

Ale to detal wink.gif
dwwa
zapomniałem o echo, mam kilka pytań
  1. <?php
  2.  
  3. class form_valid {
  4.  
  5. public function validate($value, $require = false, $min_length = false, $max_length = false) {
  6. if ($require = true) {
  7. if (empty($value)) {
  8. $this->error = 'Pole wymagane';
  9. }
  10. }
  11. if (strlen($value) < $min_length) {
  12. $this->error = 'Musisz podać minimum '.$min_length.' znaków.';
  13. }
  14. if (strlen($value) > $max_length) {
  15. $this->error = 'Maksymalna ilosć znaków to '.$max_length.'.';
  16. }
  17. }
  18.  
  19. public function valid_email($value) {
  20. if (!preg_match('/^([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})$/i', $value)) {
  21. $this->error = 'Podany email jest nieprawidłowy.';
  22. }
  23. }
  24.  
  25. public function get_error() {
  26. return $this->error;
  27. }
  28.  
  29. public function is_valid() {
  30. return (count($this->error) > 0) ? FALSE : TRUE;
  31. }
  32.  
  33. }
  34.  
  35. if (isset($_POST['valid'])) {
  36. $email = $_POST['email'];
  37. $name = $_POST['name'];
  38. $form_valid = new form_valid;
  39. $form_valid->validate($email, false, 3, 5);
  40. $form_valid->validate($name, true);
  41.  
  42. if ($form_valid->is_valid()) {
  43. echo 'Email jest prawidłowy.';
  44. }
  45. else {
  46. echo $form_valid->get_error();
  47. }
  48.  
  49. }
  50.  
  51.  
  52. ?>
  53.  
  54. <form action="" method="post">
  55. email: <input type="text" name="email" /><br />
  56. imie: <input type="text" name="name" /><br />
  57. <input type="submit" value="sprawdz" name="valid" />
  58. </form>

1. jak zrobić, żebym mógł sprawdzać email czy jest emailem i dodatkowo czy ma min. x znaków i max. x znaków? próbowałem tak:
  1. $form_valid->validate($form_valid->valid_email($email), false, 3, 5);

ale za każdym razem wyrzuca mi Musisz podać minimum 3 znaków. tak jakby nie przekazywało $value do metody

2. dlaczego jak w nawiasach przy metodzie dam np. $min_length = false to skrypt tego nie pomija? robię np. tak:
  1. $form_valid->validate($name, true);

wtedy jak nic nie wpiszę to jest ok, pokazuje błąd, ale jak wpiszę byle co to wyskakuje mi: Maksymalna ilosć znaków to .

3. mam formularz z np. 3 polami i każde chce inaczej walidować np. mam pole:

imię (pole wymagane, min. znaków, max. znaków),
nazwisko (pole wymagane),
email (poprawność emaila, czyli valid_email)


jak mam to zrobić?
CuteOne
1. $form_valid->valid_email($email) nie zwraca żadnej wartości więc jak chcesz walidować coś co nie istnieje?

2.
  1.  
  2. public function aaa($len = null) {
  3.  
  4. if(!is_null($len)) {
  5.  
  6. if($len > 10) {
  7. ...


3. Stwórz klasę bazową np. FormValid i dla każdego rodzaju elementu formularza utwórz klasy pochodne np. ValidInput, ValidCheckbox itd.

  1.  
  2. $form = new Form();
  3. //if post
  4. $valid = new FormValid($form);
  5. $valid -> addValidation(new ValidCheckbox('my_checkbox'), false, 1)
  6. -> addValidation(new ValidText('my_text'), false, 12, 150, '[a-zA-Z]');
  7.  
  8. if($valid -> isValid()) {


dwwa
Dla każdego rodzaju elementu formularza mam robić osobną klasę? przecież to bez sensu jest. W większości kursach pisali, że 1 plik = 1 klasa, to żebym mógł walidować wszystkie rodzaje formularza musiałbym mieć z ~ 8 klas. O to chodzi?

Metoda valid_email zwraca błąd jeśli email jest nieprawidłowy, tzn. "przekazuje" ten błąd do metody get_error, która go wyświetla, więc chyba powinno zajarzyć..
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.