Starší komentáře ke článku: Superglobální proměnné v PHP

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: Adam

Datum vložení: 26.4.2003 1:02:21

K te spetce nostalgie bych jen dodal ze pouziti fce eval je ve vetsine pripadu brano jako pouziti bezpecne funkce, coz se nevyplaci :)

pokud by nekdo zadal na stranku, ktera priklad
foreach($_REQUEST as $ind => $val)
{
$val=addslashes($val);
eval("$".$ind."=\"".$val."\";");
}
pouziva toto
stranka.php?neco%61;phpinfo();$f
videl by krasnou stranku , doplnit se da prakticky cokoli

jinak peknej clanek, sam jsem se jeste neodhodlal prejit na _GET a _POST

Avatar

Autor komentáře: Michal Kubeček

Datum vložení: 26.4.2003 1:07:17

Možná mi něco uniklo, ale proč je vlastně to tělo cyklu tak komplikované? IMHO by stačilo

foreach($_REQUEST as $ind => $val) $$ind = $val;

Avatar

Autor komentáře: pepak

Datum vložení: 26.4.2003 6:36:44

A proc to neudelat jeste jednodusejc?

extract($_REQUEST);

Avatar

Autor komentáře: Jan Brašna

Datum vložení: 26.4.2003 13:56:23

^^^^ Presne tohle jsem chtel napsat. Proc to delat jednoduse kdyz to jde slozite.

Avatar

Autor komentáře: Michal Kubeček

Datum vložení: 26.4.2003 1:04:59

Jenom bych podotkl, že to, co je v článku označeno jako definice superglobální proměnné (na začátku sekce "superglobální proměnné") není pravda. Skutečná definice je naznačena v sekci "jen tak na okraj".

Avatar

Autor komentáře: Vita

Datum vložení: 26.4.2003 1:50:01

Nevim kdo to rekl (ze by Kubecek?), nicmene faktem je jedna vec. Prestoze pole $_GET, $_POST, $_SESSION, $_REQUEST, $_COOKIE, $_FILES a $_SERVER (a pripadne jsem neco vynechal) jsou superglobalni, s tim co se popisuje to nema prilis souvislost.

Superglobalnim je totiz dela to ze je odevsad pristupne, nikoli to ze do nej jdou promenne posilane napr. z formulare. Zrejme by stalo za to se nad tim trosku zamyslet, chapu sice ze podobny nazev k dispozici neni ale...

Avatar

Autor komentáře: Jan Dudek

Datum vložení: 26.4.2003 12:15:51

Rozumim. Cele zneni me definice superglobalni promenne je <I>"Jde o předdefinovaná pole, obsahující hodnoty proměnných, získané ze serveru nebo od uživatele. Tato pole jsou automaticky globální, tedy automaticky "viditelná" odevšad. Proto se jim také říká automatické proměnné.</I>. Vim, ze ta cast <I>předdefinovaná pole, obsahující hodnoty proměnných, získané ze serveru nebo od uživatele</I> mozna neni uplne presna, ale pokud se podivate na vsechna superglobalni pole, ktera PHP definuje, tak zjistite, ze tuto funkci vicemene plni. Ale uznavam, ze ta ma definice neni mozna stoprocentne presna.

Jinak co se tyce toho extract($_REQUEST); Proc delat veci jednoduse, kdyz to jde i slozite... :-))) Dekuji za upozorneni, priznam se, ze o funkci extract() jsem nemel ani poneti. Kdyz jsem vymyslel ten nestastny priklad s registrovanim polozek pole _REQUEST, tak to bylo asi poprve, co jsem potreboval registrovat polozky nejakeho pole.

autor

Avatar

Autor komentáře: Petr

Datum vložení: 26.4.2003 14:56:52

Na žádost jednoho z redaktorů Intervalu přispěji ještě "troškou" do mlýna superglobálních proměnných. Není to sice žádný zázrak, ale pokud používáte více různých PHP instalací, tak se Vám možná bude hodit detekce jednotlivých způsobů - de-facto jde o to, že jsou stále servery, kde není REQUEST definován, takže pokud chcete získat hodnotu a nevíte předem, v jakém prostředí script pojede, lze použít tohle:

<B>$P = ( isset($P) ? $P : ( isset($_REQUEST["P"]) ? $_REQUEST["P"] : ( isset($_GET["P"]) ? $_GET["P"] : ( isset($_POST["P"]) ? $_POST["P"] : "" ) ) ) ); //-- Param or NONE</B>

Samozřejmě tohle je ta nejdelší varianta (snad leště doplnit o detekci z COOKIES :-) a musíte si zvolit pořadí vnoření podle priority. Jinak zkráceně získáte obsah parametru <B>P</B> a to v pořadí priorit - již existující proměnná/request/get/post a když selže všechno, doplní se "default" prázdný řetězec...

Avatar

Autor komentáře: Michal Kubeček

Datum vložení: 26.4.2003 20:43:47

Pokud není k dispozici $_REQUEST, pak pravděpodobně není k dispozici ani $_GET a $_POST (tato tři pole byla přidána současně). Takže místo $_GET a $_POST by bylo vhodnější jako alternativu použít $HTTP_GET_VARS a $HTTP_POST_VARS. Místo prázdného řetězce by asi bylo vhodnější použít NULL. Rozliší se tak situace "parametr je prázdný řetězec" a "parametr není definován".

Avatar

Autor komentáře: -pot@pnik-

Datum vložení: 27.4.2003 11:13:19

Ja automaticky vkladam na zacatek svych PHP skriptu toto:

$_GET = $HTTP_GET_VARS;
$_POST = $HTTP_POST_VARS;
...

Je na tom neco spatne? Myslim z pohledu superglobalnosti.

Avatar

Autor komentáře: Michal Kubeček

Datum vložení: 27.4.2003 11:28:33

Snad jen to, že pole $HTTP_*_VARS jsou označena jako <I>deprecated</I>, takže vám to v některé budoucí verzi PHP může přestat fungovat. Proto by asi bylo lepší psát

if (!isset($_GET) && isset($HTTP_GET_VARS)) $_GET = $HTTP_GET_VARS;
if (!isset($_POST) && isset($HTTP_POST_VARS)) $_POST = $HTTP_POST_VARS;

Avatar

Autor komentáře: Jméno a příjmení

Datum vložení: 28.4.2003 19:34:44

Jasne, diky.

Avatar

Autor komentáře: spaze

Datum vložení: 29.11.2004 23:27:28

<a href='http://interval.cz/__redirect/redirect.asp?what=interval_discussion&url=http://php.net/function.import_request_variables' target='_blank'>http://php.net/function.import_request_variables</a>

to (krom $_SERVER) resi vcelku elegantne ;)

Avatar

Autor komentáře: trimmm

Datum vložení: 29.4.2003 8:15:28

Takze konecne jeden uceleny clanocek na tuto temu... co ja som sa nahladal... na vsetkych konferach ma odkazovali na manual, ale ja mam pocit, ze ten manual nie je pisany pre normalneho cloveka, imho zaciatocnika ako som ja... Myslim, ze na tuto temu by sa toho dalo este co to popisat a privital by som to. Takisto by som privital clanocek o sessions - ale nie prosim o tom, ako zaheslovat pristup na stranku, kazdy kto pise o sessions napise tento navod, opisany z manualu a nic viac. Co mi to dalo roboty, kym som prisiel na to, ako odosielat session premenne z formulara, a pod. Slo by to?

Avatar

Autor komentáře: Tomas Prochazka

Datum vložení: 29.4.2003 15:15:50

Co je zapotrebi psat o session? Zjednodusene receno, vse, co se ulozi do $_SESSIONS["nazev"], zustane v teto promenne ulozeno, zpravidla dokud navstevnik stranek nezavre okno prohlizece (je omezeno i casem necinnosti). K cemu je to dobre je snad zrejme.Napriklad mate stranky s vtipy a navstevnikovi date moznost napriklad odfiltrovat neslusne vtipy...
Ale neni mi jasne, jak se daji odesilat session promenne s formulare, lze samozrejme tohle $_SESSIONS["a"] = $_POST["a"]. Session promenne se uchovavaji na strane serveru a nelze je primo menit zvenci, to muze bezne jen vas skript..

Avatar

Autor komentáře: Tomáš Procházka

Datum vložení: 1.5.2003 23:50:18

Nechal jsem se splést článkem a napsal jsem $_SESSIONS["nazev"], v originální dokumentaci k PHP však uvadějí $_SESSION["nazev"], stejně jako například $_COOKIE, takže v článku je buďto chyba nebo PHP podporuje obojí,což jsem nikdy neověřoval,protože v dokumentaci to není uvedeno.

Avatar

Autor komentáře: Eddi

Datum vložení: 29.4.2003 16:53:59

Pokud nastavm register-globals na off je nepristupna i promenna $PHP_SELF. Jak tedy získat jmeno prave provadeneho skriptu?

Avatar

Autor komentáře: Bohumil Kazda

Datum vložení: 29.4.2003 18:54:45

$_SERVER['PHP_SELF']

Avatar

Autor komentáře: Martin M.

Datum vložení: 14.5.2003 0:22:22

No, $PHP_SELF myslím není jediná důležitá proměnná, která se po vypnutí register_globals ztratí. $SERVER_NAME mi již ztrpčilo život, ... nevíte někdo o nějaké tabulce, která by změny vypsala systematicky? Víte-li, napište, prosím, odkaz! Dík.

Avatar

Autor komentáře: Jméno a příjmení

Datum vložení: 3.7.2003 14:57:03

Udělejte si informační stránku s jediným příkazem <? phpinfo(); ?> a on Vám vypíše všechny dostupné proměnné. Například místo $SERVER_NAME je $_SERVER["SERVER_NAME"].

Avatar

Autor komentáře: Tomas

Datum vložení: 3.6.2005 10:02:15

getenv('PHP_SELF');

Avatar

Autor komentáře: Miloslav Ponkrác

Datum vložení: 2.5.2003 13:41:51

Osobně si myslím, že dnes každý hosting nastaví PHP do starého kompatibilního režimu. A pokud si server dělám sám, tak si to nastavím stejně.

Stejně nechápu, proč se musí za každou cenu přejmenovávat i názvy polí. Pokud někdo chtěl být dříve bezpečný, tak použil $HTTP_GET_VATS a spol., ale i to už se snaží zakázat.

Někdy mám pocit, že se autoři PHP vsadili, kolik zpětných nekompabilit PHP snese, a není to zdaleka jen toto.

Avatar

Autor komentáře: cortez

Datum vložení: 27.7.2004 14:06:00

No vůbec nesouhasím!
Tak jako se objevují nove viry a nacházejí spousty a spousty bezpečnostních chyb, tak se i PHP stává lepším a proto se mění i způsob přístupu a vůbec zacházení s proměnnými btw. $HTTP_neco_VARS podporuje stále i nová verze PHP 5! Ale nechápu "programátory", kteří píšou skripty, se kterými se nedá už nic udělat ... vždyť změna je, ve většině případů, tak jednoduchá ... stačí jen hormadná funkce REPLACE!

Avatar

Autor komentáře: Janocolo

Datum vložení: 6.5.2003 22:39:16

Mam dotaz jen kdo by mi mohl pomoci se naucit php. Je mi 13 a moc tomu nerozumím pomozte mi!!!!!!!
Díky moc
kdyztak piste na email janocolo@seznam.cz

Avatar

Autor komentáře: Tratos

Datum vložení: 9.5.2003 14:49:36

To je jednouché. Buď navštívíš nějaké kamenné odborné knihkupectví nebo si najdeš internetové knihkupectví. Tam navštívíš sekci věnovanou PHP a koupíš si knížku "Jiří Kosek - PHP, tvorba interaktivních internetových aplikací" ta je sice už postarší ale podle mě nejlepší kniha v češtině o PHP. Dále si kup třeba knihu "Jiří Bráza -  PHP 4, učebnice základů jazyka" nebo jinou. Pak už jenom dostatek času a zkoušet ukázkové příklady a pochopit jak to funguje (nějaká kniha o mySQL by se ti taky určitě hodila).
Nebo taky můžeš jít tady na Intervalu do sekce PHP na první (13.) stránku a přičíst si všechny články. Je to psané od úplného začátku pro začátečníky.
Tratos

Avatar

Autor komentáře: Tomáš Procházka

Datum vložení: 19.5.2003 21:57:36

Já se PHP i MySQL naučil, aniž bych investoval korunu do knih. Když jsem si jimi listoval, tak mě většinou přešla chuť. PHP je opravdu jednoduchý jazyk. A dokud člověk nezačne psát rozdáhlé projekty z tisíců řádek kódů, tak toho moc nepotřebuje. Hlavně potřebuješ mít na čem zkoušet apikace. Takže třeba Apache server s PHP, MySQL server a nějaký editor. Nejlépe nějaký lepší, třeba PHPed, ale zastánci NotePadu pomou použit i jej. Pak si stáhni českou dokumentaci k PHP (je skoro česká) a projdi si na úvod nějaký kurz (je jich na Internetu moře). Tam najdeš ty základy.Zbytek už je pak jen znát funkce v PHP a těch je tam opravdu moře. To najdeš v dokumentaci. Hotových projektů je navíc také moře...

Avatar

Autor komentáře: @Yetti@

Datum vložení: 7.7.2003 21:01:01

Nejlepší jsou dobře okomentované zdrojové kódy. A právě ve článcích je i nějaký popis.

Já jsem se učil PHP taky od 13. Teď mám v plánu RS v.2.0.0 (na <a href='http://aplikace.yettihoweb.net' target='_blank'>http://aplikace.yettihoweb.net</a> je asi měsíc stará ukázka), Diskusní forum, WeblogMan, katalog ... prostě to co mě napadne. Hlavně že se nenudím :)

Avatar

Autor komentáře: Max

Datum vložení: 10.11.2003 13:03:04

Jen drobný detajl, ten odkaz neni funkční!!!!!!!!!!!

Avatar

Autor komentáře: Jméno a příjmení

Datum vložení: 12.11.2003 20:20:19

Uz dlouho delam na <I>novym</I> RS, na svoje stranky se nedivam a voni mi je asi <B>smazali</B> :-(

Avatar

Autor komentáře: Kyrre

Datum vložení: 18.11.2003 13:08:46

Presne tohle jsem potreboval.Ted me uz nikdo nezadrzi <h1>*:)</h1>

Avatar

Autor komentáře: m

Datum vložení: 25.3.2004 17:36:21

fakt pekny clanok \74h1\76*:)\74/h1\76

Avatar

Autor komentáře: Mintaka

Datum vložení: 13.11.2004 21:07:09

Díky za přínosný článek k php.

Avatar

Autor komentáře: luk

Datum vložení: 24.2.2005 8:13:27

a taky by asi zacatecnici ocenili, kdybyste zminili nutnost velkych pismen v nazvu, cili case sensitivitu... i kdyz uznavam, ze to s timto primo nesouvisi, tak ja na to narazil prave tady, protoze jsem zvykly psat vsude mala...

Avatar

Autor komentáře: luk

Datum vložení: 24.2.2005 8:20:29

nemelo by byt nahodou $_COOKIE misto $_COOKIES? Hezky clanek, ale tohle mi pridelalo hodinu prace...

Avatar

Autor komentáře: m.

Datum vložení: 12.1.2006 21:08:35

Dobrý den, možná trochu hloupý dotaz začátečníka, ale můžete mi někdo vysvětlit, jak je to s uvozovkami v proměné $_GET["var"]) V manuálu jsem se dočetl tento zápis $_GET['var']) (jsou tam apostrofy). A když jsem to zkoušel, tak mě to vlastně všude funguje i takto: $_GET[var]) - tedy bez uvozovek. Když použiji proměnou v příkazu select, tak tento zápis SELECT * FROM něco WHERE id=$_GET["var"]) háže chybu syntaxe. Proč? děkuji za vysvětlení. m.

Avatar

Autor komentáře: Milf

Datum vložení: 1.2.2006 22:29:33

Jednoduché (single) (') vs. dvojité (double) (") uvozovky (quotes) a jejich význam/užití jsou dostatečně popsány v manuálu ( http://www.php.net/string/ ), netřeba propírat dokola. ;-) Co se týče $_GET[var], vyzkoušej si následující: <?php ini_set('display_errors', 1); error_reporting(E_ALL); echo $_GET['var']; echo $_GET[var]; ?> Vnímáš ten rozdíl? A vo tom to je ... 8-)

Avatar

Autor komentáře: MK

Datum vložení: 29.5.2008 22:44:01

Jsem zacatecnik a muj server presel na PHP5 a mam s tim trosku problemy :) nechapu proc mi se mi do databaze zapisou vzdy data a pul jeden prazdny radek (pokud je to z firefox) a nebo dva stejné (pokud je to z IE). Formular: [i] <form action="?mode=keywords-_edit" method="POST"> <span class="stitle">Klíčové slovo:</span><br /> <input type="text" name="word" value="'.$DATA["word"].'" maxlenght="100" /><br /><br /> <br /><input class="button" type="image" src="button_add.gif" /></form> [/i] Kod pro vlozeni zaznamu: [i] $word = $_POST[word]; $timeupdate = Time(); //NASTAVENI $set = array(); $set["ip_add"] = "'$IPM' , "; $set["ip_edit"] = "'' , "; $set["word"] = "'$word' , "; $set["time"] = "'$timeupdate'"; //ZAPIS $query = mysql_query("INSERT INTO keywords (" . implode(", ", array_keys($set)) . ") VALUES (" . implode($set) . ")"); if (!$query):echo $FAIL_WRITE; echo mysql_error(); echo '</span>'; else:echo $SUCCESS_WR; endif; [/i] Muze mi nekdo prosim pomoct? doufam ze to patri k tematu..

Zpět na článek | Úvodní stránka Interval.cz