| Autor | Zpráva | ||
|---|---|---|---|
| Petr G Profil * |
#1 · Zasláno: 28. 12. 2010, 12:24:12
Zdravím, hodinku se snazim prijit na to proc kdyz jsi nastavim promennou v SESSION se mi po presmerovani vytrati.
Kod je nasledujici (je to vysoka abstrakce, takze momentalne nedava smysl):
if (potvrzeni formulare) {
$_SESSION['a'] = 1;
header("Location: "this", true, 303);
$_SESSION['a'] = 2;
}
echo($_SESSION['a']);
pokud se potvrdí formulář bude v proměnné $a = 1, poté se provede přesměrování. Příkaz $a = 2; se provede? Měl jsem za to, že jelikož před přesměrováním nesmí být žádný výstup, server jakmile zpracuje toto přesměrování okamžitě přestane vykonávat kód a zpracovává cíl přesměrování. Ovšem bohužel v $a mám i po přesměrování číslo 2. |
||
| xmark Profil |
#2 · Zasláno: 28. 12. 2010, 12:29:40
Nevím co si slibuješ od toho "this", ale každopádně máš na třetím řádku troje uvozovky, což je chyba.
Pokud přesměrování funguje, tak funguje okamžitě. |
||
| Petr G Profil * |
#3 · Zasláno: 28. 12. 2010, 12:32:49
pisu ze je to VYSOKA abstrakce....
zajimave je ze pokud kod upravim takto:
if (potvrzeni formulare) {
$_SESSION['a'] = 1;
$_SESSION['presmerovani'] = true;
header("Location: "this", true, 303);
if (!$_SESSION['presmerovani']) $_SESSION['a'] = 2;
}
echo($_SESSION['a']);
kod funguje spravne a v SESSION(a) je 1. po presmerovani. |
||
| Petr G Profil * |
#4 · Zasláno: 28. 12. 2010, 12:37:01
to presmerovani mam v kodu napsane dobre, 'this' jsem tam dal pro to ze se presmerovava na ten samy script...
|
||
| xmark Profil |
#5 · Zasláno: 28. 12. 2010, 12:40:21
v druhém kódu ti k abstrakci přibyly ještě dva vyložené nesmysly:
- zadáváš natvrdo $_SESSION['presmerovani'] a o dva řádky níž to vyhodnocuješ v ifu. Proč? - po header location nemá smysl cokoliv psát, protože to prostě neproběhne. „to presmerovani mam v kodu napsane dobre“ Nemáš. Troje uvozovky jsou nesmysl, i kdyby byly seskládané jakkoliv. |
||
| xmark Profil |
#6 · Zasláno: 28. 12. 2010, 12:46:50
Jestli se chceš něčeho dobrat, přestaň abstraktně naznačovat a dej sem konkrétní kód. Jak funguje přesměrování a podmínka, to asi víš, takže chyba bude právě v tom, co jen naznačuješ.
|
||
| Petr G Profil * |
#7 · Zasláno: 28. 12. 2010, 12:50:23
To je jako u blbych rikam ze je to VELICE SILNA ABSTRAKCE, PSEUDOKOD. Jasne ze to nedava smysl, presmerovani am dobre v 'kodu', je pravda ze todle jsem akorat spatne napsal, tedy > v 'kodu' u me todle je jen pseudokod. Slo mi o to jestli se po header(... neco provadi nebo ne. Protoze muj kod se po header(... provede takze jelikoz mi100% funguje header( a rikas ze po header( nic neprobehne uz vim ze mam chybu nekde jinde a asi nekde volam funkci ktera mi zmeni hodnoty. Tady nejde o ten 4 radkovy kod ale o 1000-ci radkovy kod a nekde v nem mam chybu.
Ale diky, to co jsem potreboval vim. |
||
| Petr G Profil * |
#8 · Zasláno: 28. 12. 2010, 14:42:58
Vyreseno. Bohuzel jsem nebyl plne obeznamen s technickym provedenim a proto skript pokracoval, provedl se cely a az pote se provedlo presmerovani a zpracovaval se skript cile.
Reseni: header(); die(); !!! nezapomenout na ukonceni skriptu |
||
| Keeehi Profil |
#9 · Zasláno: 28. 12. 2010, 15:58:04 · Upravil/a: Keeehi
xmark:
„po header location nemá smysl cokoliv psát, protože to prostě neproběhne“ Tak to není vůbec pravda. Příkladem by mohl být tento kód: <?php
header("Location: http://seznam.cz");
file_put_contents("pokus.txt","Uložený text.");
?>
Obsah stránky bez přesměrováníOno totiž to přesměrování neprobíhá na straně servru, ale u klienta. Server odešle stránku s hlavičkou HTTP/1.1 302 Found a Location: http://seznam.cz. To že se provede přesměrování, za to může prohlížeč. Kdyby přesměrování neprovedl, tak by v tomto případě zobrazil "Obsah stránky bez přesměrování". |
||
| xmark Profil |
#10 · Zasláno: 28. 12. 2010, 19:29:43
Keeehi:
Aha, tak to je trochu jinak, než jak jsem myslel. Dík. |
||
|
Časová prodleva: 15 let
|
|||
0