- Saja
- Člen | 7
Zdravím, pokud při odeslání formuláře nastane chyba vyplnění údajů formulář se předvyplní a zobrazí chybu (addError). Bohužel takto vyplněný formulář se pokusí znovů odeslat při stisku F5, nebo Backspace. Pokud zavolám redirect formulář se nebude dát odeslat pomocí F5, ale zase nebude předvyplněn a nezobrazí se chybová zpráva. Jak lze tyto dvě věci zkombinovat. Cíl je zablokovat znovu odeslání přes F5 a předvyplnění položek při odeslání chybně vyplněného formuláře.
Díky za rady a tipy
- Filip Procházka
- Moderator | 4668
Netřeba. Formuláře to řeší dobře.
Proč by si uživatel nemohl formulář párkrát odeslat, když stejně mu ho to nedovolí dokončit?
- Saja
- Člen | 7
duke napsal(a):
Když dojde při zpracování formuláře k chybě, nic neukládáš. Vícenásobné odeslání formuláře s chybou tedy nevadí. Pokud k chybě nedojde, uložíš a přesměruješ, čímž zabráníš opakovanému uložení.
Toto je určitě pravda, jenže jsem chtěl zpříjemnit uživatelům práci. Může nastat situace, kdy uživatel projde 3 stránky na webu vyplní formulář (špatně), pak to opraví a odešle a chce se vrátit na stránku před tím, než vyplnil formulář. Tady už vzniká problém v podobě toho otravného okýnka "Přejete si odeslat data … ". Jako jedinou možnost vidím uložit data do session a pak zase předvyplnit formulář, ale toto se mi zdálo, že by mohlo mít Nette už řešeno proto jsem se zeptal. Další věc co mi na formuláři vadí, že při odeslání pokud nepřesměruji objeví se v adrese nějaký GET parametr (i když form je POST) dá se ho taky nějak jednoduše zbavit?
- Saja
- Člen | 7
ViPErCZ napsal(a):
No to je framework… tím parametrem rozliší, že se jedná o signál komponenty form a zařídí vykonání obslužného kódu. Nevím proč by to mělo vadit, že v adrese je parametr GET.
Rozhodně neříkám, že je to špatně. Jenom nemám rád, když je v URL více informací, než je nezbytně nutné. V Nette se pouze rozhlížím a rád bych používal stejné(podobné) zásady jaké jsem používal v aplikacích v čistém PHP. Rozumím, že je to framework a je třeba signály pro obslužné kódy. Napadá mě, jestli je tedy nelze místo v URL přenášet pomocí session a podobně. To je celé jenom se ptám na možnosti.
- ViPEr*CZ*
- Člen | 817
Aha, už tomu rozumím. Trochu mi to přišlo, že jsem to napsal tak, že to myslím špatně a to určitě ne. Přes sessions jsem to nikdy nezkoušel, protože mi to v url určitě nevadí. Rozhodně by to byla práce navíc a to má právě framework eliminovat. Netuším jak bych to přes session pak zpětně vecpal Nette, aby vědělo že má udělat onen signál. No možná osvětlí ještě někdo zručnější.
- Filip Procházka
- Moderator | 4668
To je z principu špatně. Co kdybys chtěl mít vícekrát otevřený stejný formulář? URL je nejlepší možné místo pro takovou informaci.