Autor Zpráva
Petr G
Profil *
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
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 *
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 *
to presmerovani mam v kodu napsane dobre, 'this' jsem tam dal pro to ze se presmerovava na ten samy script...
xmark
Profil
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
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 *
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 *
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
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í
Podle tebe by se soubor uložit neměl. Můžeš si však zkusit, že se uloží.
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
Keeehi:
Aha, tak to je trochu jinak, než jak jsem myslel. Dík.

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