Pouze tento týden sleva až 80 % na e-learning týkající se Javy
Avatar
Preedy
Člen
Avatar
Preedy:15.3.2013 17:57

ahoj, mám web který se skládá z hlavičky, menu, obsahu, patičky atd. Mám vytvořeno pár souborů *.php a tam měním obsah a includuju patičku, hlavičku a menu. Má se to takhle vůbec dělat nebo se má includovat pouze obsah stránky a to co je pro všechny stránky stejný se nechává?? A popřípadě jak se to dělá? Kde mám zjistit na co uživatel z menu kliknul abych mu podle toho includnul správný obsah? díky

 
Odpovědět
15.3.2013 17:57
Avatar
Pavel Vybíral:17.3.2013 19:27

Ahoj, špatně to určitě není, je to jedna z možností. Další možností tedy je, že budeš mít index.php a potom např. složku stranky. Pomocí proměnné GET, která bude vlastně vstupovat do adresy můžeš zjistit název souboru, uloženého ve složce stranky. Tím pádem to můžeš udělat tak, že si v indexu tedy nejdeš místo, kam chceš obsah includovat. Tam to můžeš udělat nějak takhle:

include($_GET["stranka"].".php");

To vlastně includuje soubor, který uživatel zadal do adresy. Ta bude vypadat nějak takhle: http://tvojedomena.cz/index.php?…

Script se potom změní na:
include("./stranky/clanky.php");

Doufám, že jsi to pochopil :D

 
Nahoru Odpovědět
17.3.2013 19:27
Avatar
Kit
Redaktor
Avatar
Odpovídá na Pavel Vybíral
Kit:18.3.2013 8:55

Ten první include je hodně nebezpečný. Varuji před jeho používáním.

Nahoru Odpovědět
18.3.2013 8:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Preedy
Člen
Avatar
Preedy:18.3.2013 17:51

nakonec to mám tak jsem to měl

 
Nahoru Odpovědět
18.3.2013 17:51
Avatar
Odpovídá na Pavel Vybíral
Neaktivní uživatel:18.3.2013 17:53

To je docela blbost, když se bude někdo nudit a napíše tvojedomena.cz/in­dex.php?brazzer­s.com tak to asi nebude úplně ideální, co myslíš :D

Editováno 18.3.2013 17:53
Nahoru Odpovědět
18.3.2013 17:53
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Michal Žůrek - misaz:18.3.2013 18:26

Ne ale vyšel by si z toho tak to může být:
tvojedomena.cz/in­dex.php?mojeS­trankaNaDomene
příponu k tomu doplníš na serveru

 
Nahoru Odpovědět
18.3.2013 18:26
Avatar
Pavel Vybíral:18.3.2013 18:26

FunebrakCZ, z toho se stane:

include("./stranky/brazzers.com.php");

Což si dotyčný moc nepomůže. No ale tak nějak jsem předpokládal, že se to zabezpečí funkcí file_exists() ;)
Principem ale je, že se do URL napíše pouze název souboru a příponu .php si server doplní sám. :)

Editováno 18.3.2013 18:27
 
Nahoru Odpovědět
18.3.2013 18:26
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Pavel Vybíral
David Čápka:18.3.2013 18:28

IMHO to stejně půjde nějak napadnout, např. v Linuxu jdou vložit znaky co mažou atd., měl bys jsi to ošetřit. Je jedno, jeslti soubor existuje, může ti takhle zobrazit třeba soubor s hesly atd.

Nahoru Odpovědět
18.3.2013 18:28
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Odpovídá na David Čápka
Pavel Vybíral:18.3.2013 19:24

Já si nemyslím, jelikož všechny includy směřují do šložky /stranky. Tato složka je pevně stanovená, a pokud budeš mít config třeba ve složce includes (prostě jinde, než stránky :D ), tak to uživatel nebude mít jak includnout (Pokud teda neumíš přepisovat pevně stanovený PHP :D )

 
Nahoru Odpovědět
18.3.2013 19:24
Avatar
Odpovídá na Pavel Vybíral
Neaktivní uživatel:18.3.2013 19:49

Je vidět že jsi si někde něco přečet a o praxi nemáš vůbec žádný a nebo hodně malý potuchy :)

Nahoru Odpovědět
18.3.2013 19:49
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Pavel Vybíral:18.3.2013 19:56

S PHP programuji již dlouho. Chtěl bych tě tedy požádat o vysvětlení. :D Já to vždy dělám tak, že pomocí .htaccess nastavím při pokusu o vnější příchod na soubor config.php chybovou hlášku 403 (resp. stránka se dá includovat, ale nedá se klasicky zobrazit přes tvojedomena.cz/con­fig.php). Dám config např. do složky /nastaveni a klasické stránky, které se includují do indexu pomocí $_GET dávám např. do složky pages. V PHP nastavím !NATVRDO!, že všechny stránky se mají brát POUZE ZE SLOŽKY PAGES. Pokud neumíš přepisovat samotný zdrojový dokument, nenapadá mě žádný způsob, jak to obejít. Používá to spousta lidí po celém světě. Kdyby to bylo nebezpečný, nikdo by to nedělal. Nebo jsi snad jiného názoru? :)

Editováno 18.3.2013 19:58
 
Nahoru Odpovědět
18.3.2013 19:56
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
vajkuba1234
Člen
Avatar
vajkuba1234:18.3.2013 19:59

Ahoj, šlo by to vyřešit i způsobem, že by se z URL, pomocí GET, zjistila hodnota parametru, porovnala se s databází a následně by proběhl include požadovaného obsahu? V případě neexistující hodnoty by vyskočila chybová hláška.

Nahoru Odpovědět
18.3.2013 19:59
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Odpovídá na vajkuba1234
Pavel Vybíral:18.3.2013 20:07

Máš-li na mysli, že by v databázi byl uložen seznam stránek a při pokusu o příchod na stránku by se zkontrolovalo, jestli tam ta stránka opravdu je, tak by to samozřejmě šlo nějak takhle:

$query = mysql_query("SELECT id FROM pages WHERE name='".mysql_real_escape_string(htmlspecialchars($_GET["page"]))."';"); //MySQL Dotaz
if(mysql_num_rows($query) > 0){ //Je-li počet stránek v databázi větší než 0 (existuje-li daná stránka)
include("./pages/".$_GET["page"].".php"); //Includuj
}

...nebo aspoň tak nějak :D

 
Nahoru Odpovědět
18.3.2013 20:07
Avatar
Neaktivní uživatel:18.3.2013 20:15

hele kluci ten komentář beru zpátky, mělo to být někam úplně jinam :D jsem mimo, moulapavovi se omlouvám ;)

Nahoru Odpovědět
18.3.2013 20:15
Neaktivní uživatelský účet
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Pavel Vybíral
vajkuba1234:18.3.2013 20:40

Ne, celý obsah by byl uložen v databázi a web by tím byl více dynamický.

Nahoru Odpovědět
18.3.2013 20:40
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Odpovídá na vajkuba1234
Pavel Vybíral:18.3.2013 20:53

Tak podle proměnné GET zvolíš název stránky, a pak pomocí názvu vybereš z databáze příslušný text. Což by mohlo vypadat takhle:

$query = mysql_query("SELECT text FROM pages WHERE name='".mysql_real_escape_string(htmlspecialchars($_GET["page"]))."';"); //Výběr obsahu stránky
$vypis = mysql_fetch_array($query); //Převedení do pole

echo $vypis["text"]; //Vypsání obsahu

Šlo by to teoreticky udělat i kratším zápisem, ale setkal jsem se s tím, že jsem psal web v EasyPHP, kde vše šlo, a jak jsem to dal na hosting, tak to psalo chyby. Tohle je zápis, který ti bude většinou fungovat. ;)

Editováno 18.3.2013 20:54
 
Nahoru Odpovědět
18.3.2013 20:53
Avatar
Kit
Redaktor
Avatar
Odpovídá na Pavel Vybíral
Kit:19.3.2013 10:05

Když do URL natvrdo strčím "..", tak ti to tvoje "natvrdo" může i změknout.

Nahoru Odpovědět
19.3.2013 10:05
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Preedy
Kit:19.3.2013 10:13

Ono se to dá ošetřit i jednoduše. Stačí jen přidat funkci basename().

include("stranky/".basename($_GET["stranka"]).".php");

Jenom to už nepoužívám, protože jsem si zvykl na funkci __autoload(), která řeší veškeré includování za mne.

Nahoru Odpovědět
19.3.2013 10:13
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Pavel Vybíral:19.3.2013 16:45

S tím ".." jsem trošku experimentoval na svém webu a nic to neudělalo (kromě chyby 404). Jak jsi to přesně myslel?

 
Nahoru Odpovědět
19.3.2013 16:45
Avatar
Kit
Redaktor
Avatar
Odpovídá na Pavel Vybíral
Kit:19.3.2013 16:49

Musíš za to dát ještě lomítko a trochu fantazie.

Nahoru Odpovědět
19.3.2013 16:49
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Pavel Vybíral:19.3.2013 16:52

Ano, omlouvám se. Již se mi tam ten config opravdu podařilo includovat. Mnohokrát ti děkuji za upozornění před touto chybou a i za návod na ošetření. :D

Editováno 19.3.2013 16:53
 
Nahoru Odpovědět
19.3.2013 16:52
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 21 zpráv z 21.