Autor Zpráva
quatzael
Profil
Je prosím možné nějak jednoduše vyřešit to, aby tlačítko v prohlížeči "Zpět" bylo "disabled" a nedalo se ani žádným jiným způsobem vrátit zpět?
Alphard
Profil
V PHP určitě ne. A zobrazení dříve nacachované/ručně uložené stránky nejde zabránit žádným způsobem.
Na serveru lze zajistit zneplatnění předchozí stránky, tj. že se znovu neodešle formulář, nezobrazí se aktualizované údaje apod.

V rychlosti jsem zkusil najít několik javascriptových řešení, ale mám o nich pochybnosti, takže raději neodkazuji.
quatzael
Profil
Alphard:
Na serveru lze zajistit zneplatnění předchozí stránky, tj. že se znovu neodešle formulář, nezobrazí se aktualizované údaje apod.
No a to se řeší jak? Pomocí PHP jako přesměrování, ne? Nebo nějak v .htaccess?
lionel messi
Profil
quatzael:
No a to se řeší jak? Pomocí PHP jako přesměrování, ne?
Presne tak, zavoláš header("Location: http://www.example.com/", true, 303);</code>.

Po upozornení [#9] odstránená syntaktická chyba.
Marschmallow
Profil
quatzael:
Jistou možností by bylo také použití iframe, nebo embed vnořených ve stránce.
Alphard
Profil
„No a to se řeší jak? Pomocí PHP jako přesměrování, ne?“
Presne tak, zavoláš header
Ne nutně.
Nevím, jak mám chápat dotaz, jestli jako blbě položenou otázku hledající řešení znovuodesílaných formulářů, nebo fakt zamezení návratu na předchozí stránku (např. přímou editací url).
Na to první stačí přesměrování, na to druhé by bylo nutné kontrolovat a editovat soubor uživatelských oprávnění.

Jistou možností by bylo také použití iframe, nebo embed vnořených ve stránce.
No nevím, triviální problémy vyřeší přesměrování mnohem jednodušeji, složitější problémy to stejně nevyřeší.
quatzael
Profil
Alphard:
Jde o přesměrování. Jenže já potřebuju, aby po odeslání formuláře zůstaly i proměnné v $_POST, což je hodně komplikovaný.
Fisir
Profil
Reaguji na quatzaela:
Tak si celé pole $_POST překopíruj do session.
quatzael
Profil
lionel messi:
Presne tak, zavoláš header("Location: http://www.example.com/", true 303);.
Za prvé Ti tam chybí čárka za true a za druhé to nefunguje. Vrátit se zpět klidně můžu.


Mám script formular.php odešle se na redirect.php, v něm mám to přesměrování na confirm.php. Když na tom posledním scriptu stisknu tlačítko zpět. Vrátí mě to na script formular.php. Ale já potřebuju, aby už se nedalo nikam vracet.
lionel messi
Profil
quatzael:
Za prvé Ti tam chybí čárka za true a za druhé to nefunguje. Vrátit se zpět klidně můžu.
Za prvé, máš pravdu a za druhé, vzťahovalo sa to k:

Alphard:
Na serveru lze zajistit zneplatnění předchozí stránky, tj. že se znovu neodešle formulář, nezobrazí se aktualizované údaje apod.

a nie k nemožnosti vrátiť sa späť.
quatzael
Profil
lionel messi:
a nie k nemožnosti vrátiť sa späť.
No jo, ale tu tady právě že řeším..
Fisir
Profil
Reaguji na quatzaela:
Jediná možnost je poznamenat si uživatelovu návštěvu a kontrolovat, zda stránku již navštívil a pokud ano, odmítnout mu ji zobrazit. Nic takového, jako deaktivace tlačítka Zpět nejde.
Alphard
Profil
quatzael:
To je nějaký vícekrokový formulář? Já si pořád myslím, že je ten dotaz položený špatně. Neformuloval bych ho jako „Jak zabránit používání tlačítka zpět“, ale „Jak udělat správně formulář, aby fungoval i s tlačítkem zpět“.
Uživatelé od tlačítka Zpět očekávají, že bude fungovat. Webovým tvůrcům to někdy přináší problémy, ale je třeba se s tím vyrovnat.

Nevím, kde přesně je problém, ale musí to jít řešit lépe. Udržuj si třeba v session informaci o aktuálním stavu. Pokud jde uživatel zpět a (např.) objednávka nebyla ještě potvrzena, předvyplň dříve zadané údaje a nech ho normálně dál pracovat. Pokud již byla akce potvrzen a nelze ji změnit, přesměruj zcela na začátek procesu (např. výběr zboží).
quatzael
Profil
Alphard:
Je to trochu složitější. Jedná se o vícekrokový formulář, ale to nijak nevadí. Jde o to, že v předposledním kroku se celá objednávka potvrdí a odešle a v posledním kroku je na výběr platba. Tam bude mít uživatel možnost si vybrat jestli chce platit hned pomocí PayU nebo později převodem na účet, údaje k platbě mu přijdou na mail.

Udržuj si třeba v session informaci o aktuálním stavu.
Session není v tomto úplně nejlepší řešení. Pokud bude mít rozpracované zároveň 2 objednávky, tak se mu může ta druhá přepsat..
Taps
Profil
quatzael:
pokud ti nevyhovuje pouziti session, tak muzes pouzit cookie
quatzael
Profil
Taps:
pokud ti nevyhovuje pouziti session, tak muzes pouzit cookie
To ale asi neřeší můj problém. Session ani cookies nerozlišuje dvě záložky s úplně stejnou url..
Alphard
Profil
quatzael:
Pokud bude mít rozpracované zároveň 2 objednávky, tak se mu může ta druhá přepsat..
Já to myslel obecněji jako vhodné uložiště. Stačí v prvním kroku vygenerovat identifikátor, který se bude dále předávat v hidden poli (a v navigačních odkazech zpět/vpřed) je třeba dát ho hned přímo do url, přičemž bude sloužit jako klíč k datům v session.
Taps
Profil
quatzael:
tak jak píše kolega Alphard - vygeneruj objednávce nějaký unikátní token

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