Autor | Zpráva | ||
---|---|---|---|
dis Profil |
Dobrý den,
snažím se pochopit cizí kód a narazila jsem na situaci, kdy se v případě odeslání formuláře, což testuje pomocí isset($_POST['odeslano']), má stránka přesměrovat jinam odesláním hlavičky příkazem header("location:stranka.php"). Přesměrování proběhne správně, ale zároveň se ještě "stihne" provést akce, dejme tomu zápis do databáze, která je v témže skriptu za touto podmínkou (nikoli v části else, prostě jen chronologicky dále). Příkaz header() je použit bez exit, break či die(). Sama jsem to takhle nikdy nepoužila a trochu mě to nejdřív zaskočilo. Čekala bych, že po přesměrování se automaticky provádění skriptu ukončí a na žádnou z dalších akcí nemůže dojít. Takhle se to ovšem samozřejmě chová, pokud do podmínky za header přidám exit. Stávající skript vypadá zhruba takto: <?php if (isset($_POST['odeslano'])) { header("location:stranka.php"); } ... // tady je potřebné připojení k databázi - mysql_connect(), mysql_select_db()... atd. $sql = mysql_query("INSERT INTO table (pole1, pole2) VALUES (value1, value2);"); ?> Můj dotaz zní, jestli je tohle standardní chování, na které se dá spolehnout a používat ho tak vždy, nebo jestli to je jen shoda okolností, třeba nastavení PHP na serveru atd. Děkuju za odpovědi. |
||
Nox Profil |
http://php.net/function.header
Záleží na aktuálním stavu output bufferingu, který lze nastavit i pro server. Každopádně pokud chceš v daném místě hned přesměrovat, tak určitě použij i exit/die a nespoléhej na to, jestli zrovna na tomhle serveru a na tomhle místě se bufferuje nebo ne. Ono taky v header() nemusí být jen přesměrování, ale třeba jen přenastavení cachování, content-typu apod. |
||
dis Profil |
#3 · Zasláno: 2. 12. 2012, 10:39:02
Nox:
Moc díky za reakci, to jsem potřebovala vědět :-) |
||
Časová prodleva: 11 let
|
0