NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: PHP sessions výpis proměnné

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
user
Tvůrce
Avatar
user:25.4.2012 20:32

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
Odpovídá na user
Drahomír Hanák:25.4.2012 20:45

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
Tvůrce
Avatar
Odpovídá na user
Kit:25.4.2012 20:52

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
Tvůrce
Avatar
user:25.4.2012 21:00

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
Tvůrce
Avatar
Odpovídá na Kit
user:25.4.2012 21:02

jj mám...

 
Nahoru Odpovědět
25.4.2012 21:02
Avatar
user
Tvůrce
Avatar
user:26.4.2012 15:00

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
Tvůrce
Avatar
Odpovídá na user
Kit:26.4.2012 15:16

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
Tvůrce
Avatar
user:26.4.2012 15:26

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
Tvůrce
Avatar
user:26.4.2012 15:27

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

 
Nahoru Odpovědět
26.4.2012 15:27
Avatar
Kit
Tvůrce
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
Tvůrce
Avatar
Odpovídá na user
Kit:26.4.2012 18:00

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
Tvůrce
Avatar
Odpovídá na Kit
user:26.4.2012 18:18

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
Tvůrce
Avatar
Odpovídá na user
Kit:26.4.2012 18:31

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
Tvůrce
Avatar
Odpovídá na Kit
user:26.4.2012 18:58

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
Tvůrce
Avatar
Odpovídá na user
Kit:26.4.2012 19:08

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.