borpaw
21.06.2013, 17:01:06
Jak zebrać komunikaty błędów validacji z kilku form tzn:
mam np. jedną stronę - formularz, który jest złożony z kilku form, każda forma ma swój buton-submit
oprócz tego jest jeszcze na końcu formularza powiedzmy buton "przejdź dalej" ale nie powinno być można przejść
dalej jeśli wszystkie formy nie są zvalidowane pozytywnie.
I taki zbiorczy komunikat błędów chciałbym wyświetlać na górze strony (często widać takie rozwiązania na stronach)
Czy taka budowa formularza umożliwia zrobienie tego? czy może inaczej trzeba to zaprojektować? Czy przy wielu formach jest to możliwe do zrobienia?
b4rt3kk
21.06.2013, 17:05:59
Za pomocą PHP - nie, za pomocą JS - tak.
borpaw
22.06.2013, 09:36:40
najlepiej PHP, ale jeśli się nie da to proszę o inne sugestie
b4rt3kk
22.06.2013, 10:17:42
Już wspomniałem, w PHP się nie da, bo musisz wysłać formularz, żeby utworzyć zmienne, a kilku form-ów naraz nie wyślesz. Tylko za pomocą JS możesz zwalidować te pola "w locie". Więc moja sugestia - użyj JS (nie mówię stricte o JS, może to być również jakaś biblioteka).
borpaw
22.06.2013, 10:37:19
Ok dzięki, też dochodzę do tego wniosku,
Czyli zrobić to tak mniej więcej (w pseudokodzie):
<form 1></form>
<form 2></form>
<form 3></form>
<script>
function submitAll(){
submit form 1
submit form 2
submit form 3
}
</script>
wtedy wyślę formy po kolei i jeśli któraś nie przejdzie walidacji to zgłosi błąd
Czy tak to rozwiązać?
c1chy
22.06.2013, 10:55:33
nie, jak zrobisz pierwszy submit to reszta się nie wyśle bo strona się odświeży.
chyba że przez submit masz na myśli wysłanie danych za pomocą AJAX to wtedy mniej więcej tak. Tylko najpierw wysyłasz i sprawdzasz odpowiedź jak są błędy to wyświetlasz jak nie ma to wysyłasz drugą itd.
b4rt3kk
22.06.2013, 11:18:44
Masz dajmy na to takie formy:
<form1><input11><input12></form1>
<form2><input21><input22></form2>
<form3><input31><input32></form3>
Sprawdzasz po kolei wszystkie inputy za pomocą JS i jeśli wszystkie pola zwaliduje poprawnie to lecisz dalej. Jeśli do walidacji nie jest konieczne łączenie się z bazą to i Ajax nie będzie potrzebny.
function checkAll() {
var error = 0;
if (input11.value != 'costam') error++;
if (input12.value != 'costam') error++;
if (error > 0) return false; else return true;
}
Coś w ten deseń.
c1chy
22.06.2013, 11:23:45
Dodałbym tylko, że i tak na samym końcu zanim zapiszesz te dane gdzieś, musisz je zwalidować raz jeszcze po stronie serwera. Na wypadek gdyby użytkownik coś kombinował z javascriptem lub w ogóle go pominął.
markonix
24.06.2013, 23:21:33
Jaki sens ma tworzenie 3 formularzy skoro one tworzą jedną logiczną całość (wnioskuje po "Przejdź dalej").
To ma tylko sens gdy te 3 formularze są oddzielne - służą do czegoś innego, ale wtedy oczywistym jest, że przy submit walidowany jest ten wysłany, a nie wszystkie.
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.