Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Walidacja formularza bez JS, wyjątki PHP.
Forum PHP.pl > Forum > Przedszkole
Damonsson
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.
CuteOne
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
Damonsson
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.
CuteOne
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ś
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.