Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Walidacja formularza bez JS, wyjątki PHP.
Damonsson
post 1.11.2012, 20:11:09
Post #1





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Mam pytanie: Mam walidację formularza po stronie przeglądarki, wszystko działa super. Ale załóżmy, że użytkownik wyłączy JS. Wtedy będzie mógł wpisać cokolwiek i przejdzie formularz.

Aktualnie zrobiłem tak, że jeśli użytkownik wypełni źle jakieś pole, np. za mało znaków. To po SUBMIT dostanie czystą stronę z wyjątkiem "login => String musi mieć minimum 3 znaki".

Widok:
  1. <form method="post" action="<?php echo URL; ?>register/create">
  2.  
  3. <label>Login</label>
  4. <span class="w">
  5. <input id="login" name="login" type="text" tabindex="1" /><br />
  6. </span>
  7. <label> </label>
  8. <p>
  9. <button id="submit" name="submit" type="submit" tabindex="8" >Sign up</button>
  10. </p>
  11.  
  12. </form>


funkcja create:
  1. if (isset($_POST['submit'])) {
  2. try {
  3. $form = new Form();
  4.  
  5.  
  6. $form->post('login')
  7. ->val('minlenght', 3);
  8. $form->post('email')
  9. ->val('validateEmail');
  10.  
  11. $form->submit();
  12.  
  13. $data = array(
  14. 'login' => $this->cleanString($_POST['login']),
  15. 'password' => $_POST['password'],
  16. 'email' => $_POST['email']
  17. );
  18.  
  19. $this->model->create($data);
  20. header('Location: ' . URL . 'register');
  21. } catch (Exception $e) {
  22. echo $e->getMessage();
  23. }
  24. }


funkcja minlenght:
  1. if (strlen($data) < $arg) {
  2. return "String musi mieć minimum $arg znaków";
  3. }


funkcja submit:
  1. public function submit() {
  2.  
  3. if (empty($this->_error)) {
  4. //jeśli walidacja ok
  5. return true;
  6. } else {
  7. //jeśli źle wypełnione
  8. $str = '';
  9. foreach ($this->_error as $key => $value) {
  10. $str .= $key . ' => ' . $value . "\n";
  11. }
  12. throw new Exception($str);
  13. }
  14. }


Chciałbym, aby to było jakoś bardziej przyjazne dla użytkownika i na przykład, przenosiło użytkownika z powrotem na stronę z formularzem i gdzieś tam była informacja, że "login => String musi mieć minimum 3 znaki".
Nie wiem czy w ogóle używanie wyjątków do takich sytuacji jest ok? I czy to co chcę osiągnąć jest możliwe, używając wyjątków? Może kompletnie, źle się do tego zabrałem?
Po prostu nie wiem jak się za to zabrać, wszystko było super, do momentu kiedy zdałem sobie sprawę, że jednak warto byłoby pokazać użytkownikowi co zrobił źle w przyjaźniejszy sposób.
Próbowałem patrzeć jak to jest w różnych frameworkach, ale tylko jeszcze bardziej zgłupiałem.
Go to the top of the page
+Quote Post
CuteOne
post 1.11.2012, 21:13:45
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Wyjątki mają pomagać developerom nie użytkownikom, więc pomysł lekko nie trafiony smile.gif Tak całkiem szczerze, nie zastanawiałeś się nad podpięciem Zenda do obsługi formularzy? Jane na początku musisz poświęcić sporo czasu na napisanie dekoratorów itp. ale w zamian otrzymujesz:
- walidację (nawet po stronie przeglądarki) pisząc 5 linijek kodu
- filtry
- przenośność kodu - piszesz raz a później kopiuj-wklej
- obsługę nieprzewidzianych przez Ciebie sytuacji
Go to the top of the page
+Quote Post
Damonsson
post 1.11.2012, 21:27:13
Post #3





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


No właśnie tak myślałem, że te wyjątki to był strzał kulą prosto w płot. Już się zabrałem za napisanie tego od nowa porządnie. Nawet przez tą godzinkę, znalazłem fajną klasę do obsługi walidacji, więc mam się na czym wzorować.

Tak zastanawiałem się, tylko, że będę bezmyślnie używał rozwiązań Zenda i nic z tego nie wyniosę. Wcześniej zacząłem właśnie pisać w Zendzie, ale poczułem się trochę, jak motorniczy tramwaju jadący po szynach, bez kierownicy i biegów, a jednak dojeżdżający do przystanków, choć samemu nie wie jak. A tak pisząc to wszystko samemu, bardzo dużo już się nauczyłem i później będę wiedział po co używam tej biblioteki i co ona właściwie robi.
Go to the top of the page
+Quote Post
CuteOne
post 1.11.2012, 21:55:33
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


To jest właśnie magia frameworków, sam musisz dojść i zrozumieć zasady działania cudzego kodu smile.gif Przyznaję, że sam na początku sceptycznie do nich podchodziłem bo nie wiedziałem jak działają ale teraz nie wyobrażam sobie pisania nawet najprostszej stronki bez frameworka. Oczywiście jeżeli zależy ci na nauce to pisz własny kod ale staraj się nie unikać FW bo potrafią nauczyć wielu ciekawych rzeczy, których sam nie jesteś w stanie pojąć. Ja dopiero używając FW dowiedziałem się, że autoryzacja użytkownika nie ma nic wspólnego z sesją smile.gif

Jak skończysz kod rzuć jakiś przykład wykorzystania tej biblioteki o której wspomniałeś

Ten post edytował CuteOne 1.11.2012, 21:55:44
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: 5.07.2025 - 17:33