Autor Zpráva
mrkus
Profil *
Ahoj, chci vytvořit více stránkový formulář. Našel jsem několik řešení. Každé řešení má své plusy i mínusy. Chtěl bych poradit, které je nejlepší nebo poradit ještě jiné řešení než zde uvedu.

1) skryté formulářové pole
Na jednotlivých stránkách by byly textové pole, které již byly na předchozích stránkách vyplněny a měli nastaveno type="hidden", aby je běžný návštěvník v dalších krocích neviděl. A poté na poslední stránce bych vyhodnotil všechny pole.

2) ukládání do cookies
Uživatel by vyplnil input. Pomocí javascriptu bych detekoval odejití z textového pole a dále bych pomocí javascriptu uložil hodnoty do cookies, ale tady je problém ten, co když bude mít uživatel cookies vyplé. Nechci ho nutit do zapínání cookies.

3) ukládání do session
Bylo by to stejné jako u cookies, ale zase je tu problém, co když uživatel bude vyplňovat formulář na jedné stránce dlouho a session mu vyprší?

Díky za vaše postřehy a nápady
o_O
Profil
Myslím, že první možnost je asi nejlepší.
mrkus
Profil *
dobrý, ale co když budu mít na každé stránce nad formulářem navigaci s odkazi a bude možné se kdykoliv vrátit k jakémukoliv kroku. Pro tento případ by skryté inputy nešly použít nebo nad možností kdykoliv se vrátit kamkoliv neuvažovat?
o_O
Profil
Chtějí-li vyplňovat formulář nebo navštěvovat stránku, budou to dělat odděleně. Viz. plaváčkovy použitelné formuláře, odstavec „Formulář je obrovský a děsně nepřehledný, čert aby se v tom vyznal“.

- klidně ho rozdělte do několika stránek a ponechte uživateli možnost se na všech vyplněných stránkách volně pohybovat (znáte to - postačí tlačítko s názvem "předchozí" a "další", nic neřešitelného).
mrkus
Profil *
místo menu použiji tlačítka další a předchozí, ale jak toto pomocí sjrytých polí vyřešit? Napadá mě jediní a to, že bych na každé stránce musel mít všechny formulářová pole, které jsou na všech stránkách nebo jak udělat aby nedošlo ke ztracení dat když se vrátím zpět?
o_O
Profil
Co takto si prostě do hidenn inputů vložit vše a na každé stránce?
<input type="hidden" name="jmeno" value="<?php if(isset($_POST['jmeno']))echo $_POST['jmeno']; ?>">
<input type="hidden" name="prijmeni" value="<?php if(isset($_POST['prijmeni']))echo $_POST['prijmeni']; ?>">
...
mrkus
Profil *
no takže musím mít na každé stránce všechny pole které se nacházejí na všech stránkách formuláře ano?
Medvídek
Profil
mrkus:
Já mam 8 "stránkový" formulář a každou sekci mam obalenou divem s id sekce. Pak tlačítka předchozí, další - ty jen javascriptem zobrazují a schovávají divy. Výhoda je, že mam celý formulář od začátku načtený a v některých sekcích si kopíruju hodnoty inputů z jiných sekcí (např mail).
tatyalien
Profil
Já ukládám do sessionu, nic neřešitelného, prostě když se vrátím na stránku co už vyplňoval, zobrazí se data pokud dá další má je prázdné... expirace u proměnné do zavření prohlížeče...
fruity
Profil *
o_O:
Jeho řešení je nejlepší, ale použij spíš tohle
<input type="hidden" name="jmeno" value="<?php echo $_POST['jmeno']; ?>">
o_O
Profil
fruity:
ale použij spíš tohle
Ano ano, necháme si pěkně vypisovat errory, už vidím obsah inputu:
Notice: Undefined index: jmeno in ... on line X


Dalo by se to ještě přepsat na:
<?php echo isset($_POST['jmeno']) ? $_POST['jmeno']:''; ?>

což je o 4 znaky kratší.
fruity
Profil *
at si každý dělá podle svého já jsem pro volny co nejméně zatěžovat načítání :-) Vypnutím erroru se stěží něco vypíše :-)
o_O
Profil
fruity:
Vypnutím erroru se stěží něco vypíše
Vypínání errorů je jasná věc, ovšem co takový error log? Určitě by jste nechtěl hledat určitý řádek v 30MB souboru.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0