Autor Zpráva
okolojdouci
Profil *
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 *
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
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 *
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
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.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0