Autor Zpráva
David1256
Profil
Dobrý den,

dělal jsem teď jeden web, který jsem chtěl přenést na jiný hosting. Na tom druhém hostingu, ale nefungovalo předávání proměnných pomocí GET. Nějak jsem vysledoval pomocí jiných skriptů na témže hostingu, že funkčnost GET jde zařídit přes následující řádek. @extract($_GET); Jen mi nějak není jasné k čemu přesně daný řádek slouží a proč to bez něj na daném hostingu nefunguje?

Díky.
Radek9
Profil
David1256:
Proměnné pomocí $_GET jdou předat vždy. Pokud ti jde o opačný problém, tedy použití například $name místo $_GET["name"], tak toho bych se být tebou radši vyvaroval.
David1256
Profil
No do dneška jsem si taky myslel, že to pomocí $_GET jde vždycky, ale opak je opravdu pravdou. Pokud na současném webu nepoužiji před $_GET tento "kouzelný" řádek @extract($_GET); tak si GET ani neškrtne.
Radek9
Profil
David1256:
Ale extract naopak všechny prvky $_GET přenese do $GLOBALS. To jakoby simuluje chování direktivy register_globals.
Alphard
Profil
David1256:
Zdá se mi, že problém popisuje zmateně. $_GET pole musí fungovat, asi vám nefungují proměnné bez toho pole. Vysvětlení viz Nejčastější potíže s PHP (FAQ) » Nefungují proměnné z formuláře nebo z URL (vypnuté register globals).
Vysvětlení toho extract() viz manuál a [#4].
David1256
Profil
$_GET pole opravdu nefunguje, ale když se před něj přidá ten řádek s extractem, tak už funguje. Nevím čím to je ale fakticky to tak funguje. Na ten extract jsem přišel díky tomu, že to používal webmaster, který stránky předtím spravoval. Pokusím se ho kontaktovat a zeptám se ho na přesnější vysvětlení a pak, pokud mi odepíše, to sem také napíšu.
Alphard
Profil
David1256:
$_GET pole opravdu nefunguje
Dejte sem ukázku kódu, kde to nefunguje.
David1256
Profil
Toto nefunguje
<?php
$_GET['stranka']=$stranka;
 $soubor = "includy/".$stranka.".php"; 
 if (!file_exists($soubor)) { 
 $soubor = "includy/prostredek.php";
 }
 ?>
Respektive ono to funguje výborně, ale jen né na tom jednom hostingu.
Toto pak už funguje.
<?php
@extract($_GET);
$_GET['stranka']=$stranka;
 $soubor = "includy/".$stranka.".php"; 
 if (!file_exists($soubor)) { 
 $soubor = "includy/prostredek.php";
 }
 ?>
jenikkozak
Profil
David1256:
$_GET['stranka']=$stranka;
Co přiřazuješ k čemu? Vždyť hodnotu z $_GET přepisuješ hodnotou nedefinované proměnné.
David1256
Profil
jenikkozak: Tak už jsem na to přišel. Ono mají totiž na ic.cz uděláno to, že to co je v $stranka se rovná tomu, co je v url za ?stranka=. Proto mi to tam fungovalo i s chybným řádkem (zde číslo 2). Zatímco na novém hostingu to tak nefunguje a musí se ta hodnota proměnné teprve přiřadit přes GET a protože nebyla přiřazována, tak to ani nemohlo fungovat. Když jsem přidal na začátek stránky ten extract, tak to změnilo chování stránky na jiném hostingu na to, jak se to chovalo na ic.cz a proto to šlo. Vlastně to co tu popisuji je zřejmě vypnutí a zapnutí register globals a na ic.cz je jak se zdá mají zapnuté, zatímco na forpsi je mají vypnuté.

Díky už do sebe všecho krásně zapadlo.
Alphard
Profil
David1256:
Doporučuji se v budoucnu řídit zásadou, že $_GET apod. se za žádných okolností uměle neupravuje (s jedinou výjimkou eliminace magic quotes). Pak data v těchto polích vždy odpovídají skutečnému požadavku.

Navíc se zdá, že umožníte načtení čehokoliv, co existuje. Když budete požadovat, aby $stranka obsahovala jen alfanumerické znaky, nelze opustit adresář includy.

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: