Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasy czy dobrze kombinuje?
Forum PHP.pl > Forum > PHP
gandziorz
Witam,
Przez cały czas pisałem funkcje i postanowiłem obrać zmiany na lepsze i wprowadzać się w klasy.
Mam taki mały problem otóż chciałbym zrobić walidację poprzez klasę i ona wzraca mi rodzaj błędy.
Wcześniej robiłem to tak:
  1. <?php
  2. $errors = array();
  3. //imie
  4. if (empty($imie)) {
  5. array_push ($errors, 'puste_imie');
  6. }
  7.  
  8. //nazwisko
  9. if (empty($nazwisko)) {
  10. array_push ($errors, 'puste_nazwisko');
  11. }
  12.  
  13. //ulica
  14. if (empty($ulica)) {
  15. array_push ($errors, 'puste_ulica');
  16. }
  17. (...)
  18. ?>


Teraz piszę klasę rejestracji i walidacja musi być uwzględniona jak dotychczas czyli:
Na stronie:
  1. <?php
  2. $errors = array();
  3. $user = new Register;
  4. $user->check($imie, $nazwisko, $ulica);
  5. $errors = $user;
  6. ?>


W klasie:
  1. <?php
  2. class Register {
  3.    var
  4.        $user;
  5.        $errors;
  6.    function check ($imie, $nazwisko, $ulica, $nrdom, $nrmieszk, $miasto, $kodpoczt1, $kodpoczt2, $wojewodztwo, $telkom, $teldom1, $teldom2, $email, $rczlon, $login, $haslo, $haslo2, $agree) {
  7.            if (empty($imie)) {
  8.                array_push ($errors, 'puste_imie');
  9.            }
  10.            if (empty($nazwisko)) {
  11.                array_push ($errors, 'puste_nazwisko');
  12.            }
  13.  
  14.            if (empty($ulica)) {
  15.                array_push ($errors, 'puste_ulica');
  16.            }
  17.  
  18.    } //zakonczenie funkcji sprawdzajacej
  19. } //zakonczenie klasy
  20. ?>

To początek klasy, więc chodzi mi tylko o to czy do $errors na stronie zostaną dopisane wartości z klasy czyli jak nie ma imienia to: 'puste_imie' itp.
erix
Powinieneś zrobić raczej klasę user z metodą register...

A jeśli chodzi o kombinowanie:

  1. <?php
  2. function check ($imie, $nazwisko, $ulica, $nrdom, $nrmieszk, $miasto, $kodpoczt1, $kodpoczt2, $wojewodztwo, $telkom, $teldom1, $teldom2, $email, $rczlon, $login, $haslo, $haslo2, $agree) {
  3.           if (empty($imie)) {
  4.               array_push ($errors, 'puste_imie');
  5.           }
  6. ?>

Nie możesz podstawić tablicy z własnościami i sprawdzać pętlą wartości...?
gandziorz
No to zrobię klasę user z możliwością logowania, rejestracji, wylogowania, edycji.
Teraz pytanko odnośnie walidacji.
Robię stronę w smarty.

W pliku "strona" zakładam że mam coś takiego:
  1. <?php
  2. $user = new Register;
  3. $user->check($imie, $nazwisko, $ulica);
  4. $errors = $user;
  5.  
  6. $smarty->assign ('errors', $errors);
  7. $smarty->display ('dolacz.tpl');
  8. ?>

W pliku dolacz.tpl mam:
  1. <?php
  2. {if $errors}
  3. <ul style="color:red">
  4. {section name=e loop=$errors}
  5. {if $errors[e] eq 'puste_imie'}
  6. <li>Prosz&#281; wpisać imię!
  7. {/if}
  8. {if $errors[e] eq 'puste_nazwisko'}
  9. <li>Prosz&#281; wpisać nazwisko!
  10. {/if}
  11. {if $errors[e] eq 'puste_ulica'}
  12. <li>Prosz&#281; wpisać ulicę!
  13. {/if}
  14. {/section}
  15. </ul>
  16. {/if}
  17. ?>


I wiadomo że jak errors (array) będzie miało dopisane "puste_imie" to na stronie wyświetli błąd Proszę wpisać imię!
Jak pisałem to za pomocą funkcji to działało jednak w klasie nie mogę dopisać żadnych wartości i na stronie wyświetla się błąd:
Fatal error: Cannot use object of type Register as array in C:VertrigoServwww\templates_c%%57^57F^57F5B932%%dolacz.tpl.php on line 43
erix
Przecież przypisujesz OBIEKT do zmiennej, którą traktujesz jak tablicę...

Gdybyś dodał obsługę interfejsu Iterator, to pewnie by poszło.

  1. <?php
  2. $errors = $user;
  3. ?>

Nie przypisujesz tu przecież tablicy z błędami, tylko całą klasę użyszkodnika.
gandziorz
Okej dałem radę wystarczyło trochę pobawić się jeszcze w pliku tpl i gra gitara smile.gif
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.