Avatar
user
Redaktor
Avatar
user:

Ahoj,
v php jsem si uložil do superglobální proměnné $_SESSION proměnnou $_GET["gal"]. Pokud superglobální proměnnou vypíšu (echem), její hodnota se zobrazí. Ale pokud jí použiji při přesměrování ve scriptu který spracovává formulář její hodnota je prazdný řetězec.

header("Location: index.php?gal=".$_SESSION["presmerovani_parametr_gal"]."&location=".$hlaska);

Nevím si rady :(

 
Odpovědět 25.4.2012 20:32
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na user
Drahomír Hanák:

A vypisuješ ji před obnovením nebo až po něm? Je totiž možné, že nemáš povolené register globals.

 
Nahoru Odpovědět 25.4.2012 20:45
Avatar
Kit
Redaktor
Avatar
Odpovídá na user
Kit:

A v tom volaném skriptu máš nejprve funkci session_start() ?

Nahoru Odpovědět 25.4.2012 20:52
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
user
Redaktor
Avatar
user:

proměnnou vypisuji před obnovením, ale sessions používám taky při přihlašování kde funguje vše v pořádku... Zkusil jsem taky dát proměnnou do podmínky isset($_SESSI­ON["presmerova­ni_parametr_gal"]) výsledek byl že php skočilo do větve else... takže to vypadá že v tom scriptu (který zpacovává formulář) vůbec není.... ale měla by

 
Nahoru Odpovědět 25.4.2012 21:00
Avatar
user
Redaktor
Avatar
 
Nahoru Odpovědět 25.4.2012 21:02
Avatar
user
Redaktor
Avatar
user:

nevíte někdo prosím kde bych mohl dělat chybu??
v index.php kde je umístěn formulář
$_SESSION["pres­merovani_para­metr_gal"] existuje, ale v souboru který formulář zpracuje už proměnná neexistuje... register globals mám povolené...

 
Nahoru Odpovědět 26.4.2012 15:00
Avatar
Kit
Redaktor
Avatar
Odpovídá na user
Kit:

Register globals zase hezky vypni. Je zbytečný a nebezpečný.

Ve skriptu, který formulář zpracovává, musíš také mít session_start(); před použitím $_SESSION.

Nahoru Odpovědět 26.4.2012 15:16
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
user
Redaktor
Avatar
user:

no jo :D .... díky já jsem session_start() spouštěl už v indexu, myslel jsem že když formulář do indexu includuju tak sessions už bude "spuštěný"...

 
Nahoru Odpovědět 26.4.2012 15:26
Avatar
user
Redaktor
Avatar
user:

jo a můžu se zeptat proč je Register globals nebezpečný?

 
Nahoru Odpovědět 26.4.2012 15:27
Avatar
Kit
Redaktor
Avatar
Nahoru Odpovědět 26.4.2012 17:51
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na user
Kit:

Do indexu includuješ i skript, který ten formulář zpracovává? To jsi předtím nepsal. Předpokládal jsem, že to máš nějak takto:

<form action="ulozit.php" ...>

Zřejmě to máš jinak a nezbývá mi nic jiného, než věštit. Takže to máš takto?

<form action="index.php" ...>

Nahoru Odpovědět 26.4.2012 18:00
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
user
Redaktor
Avatar
Odpovídá na Kit
user:

Předtím si to pochopil dobře :)
mám to takhle <form action="ulozit.php" ...>
A tvoje řešení fungovalo, jen jsem předpokládal že když session_start() zavolám v indexu tak že superglobální proměnná je dostupná i v ulozit.php
Uz sem si to srovnal,proměnná by byla dostupná bez volání session_start() v ulozit.php kdyby jak si uváděl jsem formulář includoval do indexu...

 
Nahoru Odpovědět 26.4.2012 18:18
Avatar
Kit
Redaktor
Avatar
Odpovídá na user
Kit:

Jaká superglobální proměnná? Server vše kromě hodnot session po každém odeslání stránky ihned zapomíná. Zapomene dokonce i informaci, kde tu session má uloženu. Klient mu tuto informaci musí pokaždé sdělit přes cookies a to se dělá právě přes session_start();

index.php i ulozit.php jsou zřejmě zcela samostatné skripty, které spolu žádné informace nesdílí.

Rozlišuj pojmy formulář a zpracování formuláře. Jak se v tom pak máme vyznat? Při zpracování formuláře se na výstup nesmí generovat žádné HTML. Pouze se zpracovávají vstupy.

Nahoru Odpovědět 26.4.2012 18:31
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
user
Redaktor
Avatar
Odpovídá na Kit
user:

výrazem superglobální proměnná jsem myslel: $_SESSION["neco"] chtel jsem to odlišit od normální proměnné aby ste mě dobře chápali, myslím že se tomu tak říká :). V té pak mám uložený název parametru před odesláním formuláře. Ve scriptu kde formulář zpracovávám tuto "superglobální proměnnou" použiji k přesměrování zpět na původní stránku. Takže žádný obsah ve scriptu zpracování formuláře negeneruji... Jinak díky za radu 8-)

 
Nahoru Odpovědět 26.4.2012 18:58
Avatar
Kit
Redaktor
Avatar
Odpovídá na user
Kit:

Používej raději vžitý pojem "session". Pokud chceš session používat, musíš v každém skriptu mít session_start(). Nepočítám include().

Proto mívám komplet celý web v index.php . Samozřejmě kromě definic tříd. Nemůže se mi pak stát, že bych někde zapomněl na session_start(), na __autoload() nebo na globální ošetření výjimek či fatálních chyb.

Nahoru Odpovědět 26.4.2012 19:08
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 15 zpráv z 15.