Autor | Zpráva | ||
---|---|---|---|
xlifer Profil |
#1 · Zasláno: 9. 9. 2011, 16:37:48 · Upravil/a: xlifer
Odkazuji zpracování formuláře na jiný skript a chci po vrácení při špatném uvedení hodnot, aby se předalo vše zadané uživatelem do formuláře. Problém je v tom, že předám parametry jinému skriptu zpracuj.php a z něho se vracím přes header location na formulář bez předaných hodnot z formuláře. Odesílat formulář na stejný skript ve kterém je umístěn nechci, protože jsou s tím problémy při obnovení stránky. To by šlo určitě ošetřit taky přes SESSION, ale nepřijde mi to dobré řešení.
Je zde řešení si pole uložit do $_SESSION, u názvu a kratších polí to asi není problém, ale při odeslání delšího textu přes textarea nevím zda je vůbec vhodné ukládat dlouhé texty o délce třeba 3000 znaků, apod. Určite jsou nějaké omezení nebo doporučení pro SESSION, aby neměl každy uživatel v SESSION uložené 5MB dat proměných, to by asi server výkonově moc nestíhal? Lze nějak přes skript na zpracování formuláře v header vrátit zpátky hodnoty do POST? Do GET určite ne, protože si nedokážu představit délku URL např. s hodnotou text=(3000 znaků). formular.php <form action="zpracuj.php" method="post" name="formular"> <input type="text" name="nazev" value="<?echo stripslashes(htmlspecialchars($_POST['nazev'], ENT_QUOTES));?>"> <textarea name="text" rows="5" cols="50"><?echo stripslashes(htmlspecialchars($_POST['text'], ENT_QUOTES));?></textarea> <input type="submit" name="odeslat" value="odeslat"> </form> zpracuj.php <?php /* kontrola a zpracování údajů z formuláře */ ... /* vrácení zpět na formular.php v případě potřeby předat zpět do formuláře odeslané hodnoty */ ... header("location: http://www.nejakaDomena.cz/formular.php"); ?> |
||
Str4wberry Profil |
#2 · Zasláno: 9. 9. 2011, 16:57:01
K čemu je potřeba to přesměrování při nevalidních datech?
Nevidím problém odesílat formulář sám na sebe, nejde-li to, není se třeba bát, že bude problém s pár set kilobajtovou zprávou v session, bojíš-li se, můžeš si data uložit do DB nebo souboru a do session jen odkaz na ně. |
||
xlifer Profil |
#3 · Zasláno: 9. 9. 2011, 22:25:32 · Upravil/a: xlifer
Str4wberry:
„K čemu je potřeba to přesměrování při nevalidních datech?“ A jak mám dopředu zajistit, že uživatelé vyplní formulář validně? Přes JS to moc pohodlné a 100% není, takže jediná záruka jak ověřit vstupní data z formuláře je přímo ve skriptu. Pokud není problém s pár set kilobajtovou zprávou v SESSION jak píšeš, tak pak je to vpohodě na normálním webu s normální návštěvností, protože např. na FB by server asi hodně rychle dýchal :-) To už pak přes DB je asi lepší řešení při velké návštěvnosti. „Nevidím problém odesílat formulář sám na sebe“ Tohle není vhodné vzhledem k případné aktualizaci stránky. Pak se musí zajistit, aby se záznam např. neuložil do DB vícekrát, apod. Lze to určitě ošetřit jak jsem psal přes SESSION, apod. ale raději tento způsob z mého pohledu nebrat... |
||
ShiraNai7 Profil |
#4 · Zasláno: 9. 9. 2011, 22:51:59
xlifer:
„Tohle není vhodné vzhledem k případné aktualizaci stránky. Pak se musí zajistit, aby se záznam např. neuložil do DB vícekrát,“ Stačí po úspěšném zpracování přesměrovat stránku samu na sebe (na stejnou adresu) a problém je vyřešen. |
||
Str4wberry Profil |
#5 · Zasláno: 9. 9. 2011, 23:25:28
Jak psal můj předřečník, přesměrování hlavičkou Location, provedeš pouze při validních datech a úspěšném odeslání (klidně pořád na stejnou stránku).
Jinak v případě, že chceš formulář odesílat na jinou stránku, tak se dá pochopit i pouze JS kontrola a úprava dat na serveru do podoby, aby nepoškodila aplikace. |
||
motik Profil |
#6 · Zasláno: 10. 9. 2011, 01:24:00
xlifer:
mrkni na kontrolu formulářových polí od Jakuba V., je to moc pěkný příklad na pochopení problematiky |
||
xlifer Profil |
#7 · Zasláno: 10. 9. 2011, 18:32:21 · Upravil/a: xlifer
ShiraNai7:
„Stačí po úspěšném zpracování přesměrovat stránku samu na sebe (na stejnou adresu) a problém je vyřešen.“ A když je celý web průchozí přes index ve kterém se includuje obsah podle parametrů, tak by se vše muselo tedy odehrát na začátku indexu před jakýmkoliv výstupem což by něměl být problém nebo tam můžou vzniknout nějaké úskalí? Příklad - index.php: <?php if (isset($_POST["zpracuj-formular"])) { /* zpracovani formulare s naslednym smerovanim zpet na index */ header("location: index.php"); } ?> <html> .... web ... <?php include "xxx.php"; ?> ... </html> |
||
ShiraNai7 Profil |
#8 · Zasláno: 11. 9. 2011, 10:33:50
xlifer:
Nemělo by, pokud nemá stránka s formulářem nějaké další podmínky pro její zobrazení (přihlášení atd). |
||
xlifer Profil |
#9 · Zasláno: 11. 9. 2011, 18:00:51
ShiraNai7:
Přihlášení chci zavést přes SESSION, ale i to by neměl být problém umístit jako první řádek session_start() což není považováno ješte za výstup vůči header location ? |
||
ShiraNai7 Profil |
#10 · Zasláno: 12. 9. 2011, 21:34:01
xlifer:
session_start maximálně odešle další headery, a to není ještě samotný výstup |
||
Časová prodleva: 13 let
|
0