Autor Zpráva
xlifer
Profil
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
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
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
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
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
xlifer:
mrkni na kontrolu formulářových polí od Jakuba V., je to moc pěkný příklad na pochopení problematiky
xlifer
Profil
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
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
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
xlifer:
session_start maximálně odešle další headery, a to není ještě samotný výstup

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