Autor | Zpráva | ||
---|---|---|---|
okolojdouci Profil * |
#1 · Zasláno: 6. 10. 2011, 15:42:01
Předělávám jeden větší projekt a chtěl bych nějak slušně ošetřit odesílání formulářů. Mám to ošetřeno javascriptem, ale chtěl bych prodiskutovat "druhou obrannou linii" - php.
Když v odeslaných datech zjistím chybu, chci samozřejmě všechna správně vložená data ve formuláři obnovit. Řeším to tak, že se do formuláře vracím pomocí header("Location: soubor.php?err=1&a=1&b=2"). Na tom se mi ale nelíbí, že data jsou vidět v adrese (čistě z estetických důvodů) a hlavně je s tím dost práce - detekovat všechny chyby (s tím asi nenadělám nic), pak je (nebo přinejmenším jednu z nich) spolu se všemi hodnotami z formuláře předat a formulářem zase načíst. Navíc jsem si nějak neosvojil používání ob_start, takže pendluju mezi dvěma soubory, kde ten jeden (zpracovávaný před výstupem do prohlížeče) je společný pro celý web. To všechno funguje ke spokojenosti a nemám problém se v tom orientovat ani ve velkých projektech. Ale stojí to nemálo času. Poradíte úspornější řešení? |
||
Zadar Profil * |
#2 · Zasláno: 6. 10. 2011, 23:29:55
Zdravím. Já to mám třeba ošetřené tak, že je soubor s formulářem a soubor se zpracováním + soubor s erorrem. Ve zpracování to jednoduše ošetříš (vymažeš mezery, zkontroluješ zda to není prázdné atd.) a pokud ano, přesměruj ho na stránku error.php, kde budou chyby a tlačítko ZPĚT .. Pokud tam nemáš textareu, ale čistě formulářové prvky, zůstane to vyplněné. Snad jsem aspoň trochu pomohl, když ty už jsi mi pomohl tolikrát :) ..
|
||
Medvídek Profil |
#3 · Zasláno: 6. 10. 2011, 23:41:55 · Upravil/a: Medvídek
okolojdouci:
Chyby zpracovávám na stejné stránce, kde je formulář. před samotným fomulářem mam různé funkce, malý příklad: include "fce.php"; //OBSAH fce.php . . $jmeno=htmlspecialchars($_POST["jmeno"]); //atd if(strlen($jmeno)<4) $chyba[]="Jméno musí být delší x znaků."; if(!isset($chyba)){ //odeslu email } //formular.php if(isset($chyba)) echo '<div id="chyba">'.implode("<br />",$chyba).'</div>'; <form action"form.php" method="post"> <label for="jmeno">jmeno</label><input type="text" name="jmeno" id="jmeno" value="<?php if(isset($chyba)) {echo htmlspecialchars($_POST["jmeno"]);} ?>" /> </form> |
||
okolojdouci Profil * |
#4 · Zasláno: 7. 10. 2011, 06:34:46
Medvídek:
Takže po odeslání v adrese vidíš obsah všech polí a když dáš F5, provedeš akci podruhé. Je to tak? Zadar: To vypadá dobře, ale vadí mi tam, že když se vrátím do toho formuláře, nemám nijak zvýrazněny chyby. |
||
Medvídek Profil |
#5 · Zasláno: 7. 10. 2011, 08:14:18
okolojdouci:
Pokud se nepletu, tak odesílám pomocí POST. Pokud je chyba a dáš F5, vypíše se opět jen seznam chybových hlášení. Po úspěšném provedení samozřejmě přesměrovávám přes header. |
||
Časová prodleva: 13 let
|
0