Avatar
Preedy
Člen
Avatar
Preedy:

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:

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:

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

Nahoru Odpovědět  +1 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:

nakonec to mám tak jsem to měl

 
Nahoru Odpovědět 18.3.2013 17:51
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Pavel Vybíral
Jiří Gracík:

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  +1 18.3.2013 17:53
Creating websites is awesome till you see the result in another browser ...
Avatar
Odpovídá na Jiří Gracík
Michal Žůrek (misaz):

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
Nesnáším {}, proto se jim vyhýbám.
Avatar
Pavel Vybíral:

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:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Pavel Vybíral:

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
Jiří Gracík
Redaktor
Avatar
Odpovídá na Pavel Vybíral
Jiří Gracík:

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
Creating websites is awesome till you see the result in another browser ...
Avatar
Odpovídá na Jiří Gracík
Pavel Vybíral:

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
Avatar
vajkuba1234
Člen
Avatar
vajkuba1234:

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:

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
Jiří Gracík
Redaktor
Avatar
Jiří Gracík:

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
Creating websites is awesome till you see the result in another browser ...
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Pavel Vybíral
vajkuba1234:

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:

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:

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

Nahoru Odpovědět  +1 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:

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  +1 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:

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:

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:

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.