Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 72 Pomógł: 0 Dołączył: 17.02.2007 Ostrzeżenie: (0%)
|
Hejka,
jak zrobić walidacje formularza tak żeby po za komunikatem typu 'nie wypełniony np nick' zaznaczał pola nie wypełnione zmieniając czcionkę danego pola na czerwono. Wtedy wystarczył by jeden komunikat 'proszę uzupełnić pola zaznaczone na czerwono' W tej chwili mój formularz wygląda następująco:
|
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D |
Mortus jak widzę czuwa. I ma rację. $_POST to tablica superglobalna i wisi, więc jej wypełnienie musi być sprawdzane występowaniem któregoś z elementów zawartego w niej. Większość osób robi to sprawdzając istnienie submita o określonym name w nim. Ale count jest podstawowym dla mnie gdy mam formularz z kilkoma submitami. Bo przecież nie będę zgadywał który submit wcisnął user lub sprawdzał istnienie wszystkich. Za to zliczę ile mam wpisów w niej (IMG:style_emoticons/default/winksmiley.jpg) Potem switchem mogę modyfikować zachowanie zależnie od submit już, ale sprawdzenie czy właściwie $_POST ma choć jeden element w zupełności wystarczy. Sugestia o isset jest dobra, ale można także używać array_key_exists('name_pola', $_POST) i to rozwiązanie ja stosuję najczęściej, bo nie wywali nam się, podobnie jak isset, na wartości 0, co już mortus zasugerował. Swoja drogą wariacje na temat Dodaj/Edytuj to tylko pierdółka tak naprawdę. Dlaczego? Bo to się realizuje jednym polem hidden. Ustawienie tam 0 = nowy, jakakolwiek liczba = id do edycji. Oczywiście id sprawdzamy po stronie serwera. A musimy sprawdzić czy aby nie brak uprawnień do działań. Wystarczająco się naoglądałem skryptów, gdzie user ma prawo edycji tekstów kogoś innego, bo sobie można spreparować POST lub GET i system nie sprawdza uprawnień (IMG:style_emoticons/default/winksmiley.jpg) Ja takie "akcje" loguję by wiedzieć, który user cwaniakuje.
I ma rację mortus... Sposobów rozwiązania problemu jest więcej niż jedna. Ja osobiście skłaniam się do takiej: - tworzymy strukturę przechowującą domyślne wartości pól. - jeśli przechwyciliśmy GET sprawdzamy uprawnienia i zamiast domyślnych wrzucamy pobrane. - jeśli wyłapujemy POST to walidacja idzie, zapis itp - dopiero teraz wyświetlamy formularz z polami uzupełnionymi wartościami ze struktury wartości pól. Czemu tak? Bo to nam kapitalnie upraszcza wszystko, włącznie z komunikatami błędów o formie jaką chcesz zastosować. Wystarczy, że stworzymy drugą strukturę, która przechowuje błędy. Jeśli w czasie walidacji napotkamy błąd, to wrzucamy do niej ów błąd z nazwą pola jako kluczem. A teraz cudujemy... Jeśli owa struktura jest pusta to robi się insert lub update. Jeśli zawiera choć jeden wpis ( count ) to operacje na bazie nie następują, a pod danym polem następuje sprawdzenie czy tablica błędów zawiera wpis o nazwie pola. Tak? No to wyświetlamy ów komunikat (IMG:style_emoticons/default/smile.gif) |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%)
|
Sugestia o isset jest dobra, ale można także używać array_key_exists('name_pola', $_POST) i to rozwiązanie ja stosuję najczęściej, bo nie wywali nam się, podobnie jak isset, na wartości 0, co już mortus zasugerował. isset na wartości zero się nie wywali, wywali się natomiast, jeżeli nie wpiszemy niczego, dlatego samo sprawdzenienie wystarcza i musimy sprawdzać, czy ta zmienna nie jest pustym łańcuchem znaków Oczywiście mówimy cały czas o danych przesyłanych za pomocą formularza (choć w przypadku zmiennych inicjowanych w samym skrypcie sprawa wygląda podobnie). Na wartości 0 na pewno wywali się empty, bo $zmienna = '0'; to nadal pusta (empty) zmienna. Ogólnie to w rzeczywistości mamy tyle rozwiązań ilu programistów (choć pewnie większość rozwiązań będzie podobna, albo identyczna), jedyną kwestią jaką trzeba rozważyć jest natomiast wydajność, która i tak w przypadku samej walidacji formularza może się tylko nieznacznie różnić w różnych rozwiązaniach, no chyba, że ktoś to strasznie zamota. Ten post edytował mortus 22.03.2010, 13:35:56 |
|
|
|
rossco [PHP]Walidacja formularza 21.03.2010, 16:07:03
MateuszScirka Odpowiedni warunek if z empty +
[JAVASCRIPT] pob... 21.03.2010, 16:09:32 
Pawel_W Cytat(MateuszScirka @ 21.03.2010, 16:09... 21.03.2010, 16:17:43
rossco a możecie mi to wytłumaczyć na przykładzie jeśli b... 21.03.2010, 16:19:46
MateuszScirka Nom o to mi chodziło, można zrobić to na początku ... 21.03.2010, 16:24:49
rossco jak uważacie czy ja nie powinnam wywalić formularz... 21.03.2010, 16:36:55
MateuszScirka Możesz zostawić, możesz wywalić, osobiście skłania... 21.03.2010, 16:40:23
rossco jestem początkująca ale też mi się wydaje że powin... 21.03.2010, 16:53:50
MateuszScirka To nic że jest w ifie, będzie działało. Warunek zo... 21.03.2010, 16:59:09
mortus Niestety u Ciebie nie da się zrobić takiej walidac... 21.03.2010, 17:02:55
rossco Zrobiłam tak:
formularz przeniosłam do pliku form... 21.03.2010, 17:39:46
MateuszScirka Nie trzeba wszedzie sprawdzac tym issetem ;] Chodz... 21.03.2010, 17:42:13 
mortus Cytat(MateuszScirka @ 21.03.2010, 17:42... 21.03.2010, 18:29:21
rossco if(isset($_POST["stanowisko"])) {
... 21.03.2010, 17:51:31
MateuszScirka Mortus, nie mylę się. Isset ma sprawdzać tylko czy... 21.03.2010, 18:38:34 
mortus Cytat(MateuszScirka @ 21.03.2010, 18:38... 22.03.2010, 10:35:26
rossco Mortus ja się dopiero uczę i pewnie dlatego ten ko... 21.03.2010, 19:02:13
rossco Chyba na początek nauki w php (podejście trzecie:)... 22.03.2010, 13:38:36
mortus Po prostu jeden nawias w linii 56 zamyka nie to co... 22.03.2010, 13:44:15
thek Błąd masz prozaiczny:
[PHP] pobierz, plaintext els... 22.03.2010, 13:56:08
mortus Dokładnie! Wszystko zależy od potrzeby, założe... 22.03.2010, 14:20:32
rossco SUPER Walidacja działa, ale przestało dodawać do ... 22.03.2010, 14:28:19
mortus W linii 22 wpisz $validation_error = false; P... 22.03.2010, 14:38:19
rossco Zastosowałam się do wskazówek ale nadal nie dodaję... 22.03.2010, 14:54:13
mortus Dodaj na samym początku skryptu[PHP] pobierz, plai... 22.03.2010, 15:04:48
rossco Cytat(mortus @ 22.03.2010, 15:04:48 )... 22.03.2010, 15:30:42
mortus Usuń tę linię 19, bo nie jest potrzebna (powinno w... 22.03.2010, 16:09:10
rossco Działa ) Mortus bardzo Ci dziękuję! Przeanali... 22.03.2010, 16:42:06 ![]() ![]() |
|
Aktualny czas: 27.12.2025 - 22:02 |