[ Emir_MO @ 17.12.2002. 22:02 ] @
Pozdrav svima!

Posto nisam neki znalac u PHP (sami moji poceci) interesuje me kako da odradim sljedece...

Napravio sam template za svoju stranicu naziva "index.php".
Sada bih htio da se npr. iz neke druge moje podstranice ili linka pozove ovaj template, ali u obliku "index.php?sadrzaj=informacije" i da se unutar tog templatea ucita (vjerovatno nekom include opcijom) file "informacije.html" ili ako se pozove "index.php?sadrzaj=kontakt" da se ucita unutar templatea file "kontakt.html".
Negdje sam nasao na net-u da je to neka "geturl" komanda unutar php-a, ali sam ne znam kako ovo odraditi!

Unparijed zahvalan,

Emir!

[Ovu poruku je menjao Go! X dana 18.12.2002. u 00:12 GMT]
[ Goran Rakić @ 17.12.2002. 22:11 ] @
to sadrzaj=informacije je varijabla sadrzaj prenesena preko HTTP GET zateva. Znaci sve sto ti trebas da uradis jeste da tu varijablu iscitas preko $_GET['sadrzaj'] ako je novi PHP odnosno $HTTP_GET_VARS['sadrzaj'] ako je stari PHP i da podatak iskoristis kao parametar include() f-je.

Evo ti zanimljivo parce koda koje zalepis na vrh stranice i onda uvek koristis $_GET['sadrzaj']

Code:

        if(phpversion()<"4.1.0")
        {
                $_COOKIE = $HTTP_COOKIE_VARS;
                $_POST = $HTTP_POST_VARS;
                $_GET = $HTTP_GET_VARS;
        }


napomena: Molim te da koristiš bolja naslove za teme, ipak su ovo poruke koje će neko sutra čitati i pretraživati, ne mora da baca pasulj šta koja tema krije iza sebe.
[ Emir_MO @ 18.12.2002. 00:41 ] @
Pozdrav!

Pokusavam da napisem kod da ta $_GET['sadrzaj'] funkcija include-a npr. file "informacije.html", al' nikako mi neide.

Mozes li mi molim te napisati taj komplet kod, naravno samo sa neophodnim PHP komponentama, dakle onim kodom u vrhu, $_GET['sadrzaj'] zahtijevom i include tog fajla... znaci najjednostavniji primjer...

Ne trazim valjda puno!
[ CONFIQ @ 18.12.2002. 02:49 ] @
include($_GET['get'].".html");

i da includujesh sadrzaj.html linkuj index.php?get=sadrzaj

mada ovo nije najsigurnije ali evo ti 'hint' kako da uradiš


Mada da sam na tvom mestu uradio bih jedan switch
[ Emir_MO @ 18.12.2002. 08:10 ] @
Da, sada radi...
Samo je problem, kad se GET naredbom "uzme" neki "sadrzaj" koji nepostoji, dakle naziv filea koji nepostoji, tj. kad neko rucno nakuca link!
Jes' na to mislio kad si pisao switch, jer neka ogranicenja ocito moraju postojati, samo ne znam kako ih odraditi. Ako nista, ovo radi... hvala na svemu!

[ darkoPOKLONCIC @ 18.12.2002. 08:31 ] @
e to i meni treba....modularno ucitavanje...

da li include onoga sto je primljeno kao parametar ili se taj parametar prenosi u funkciju koja ucitava/ispisuje (iz baze)ono sto je odredjeno parametrom?

[ Emir_MO @ 18.12.2002. 09:00 ] @

Pa otprilike ideja da postoji neki "conf" file koji ce se nekako sa require pozivati i provjeravati taj $_GET metod i da li se slazu jedni sa drugim!
Ako se slazu - include
Ako se ne slazu - error
Ako je Empty - error

Jedna od ideja npr.
[ CONFIQ @ 18.12.2002. 14:02 ] @
Citat:
Emir_MO:
...
Jes' na to mislio kad si pisao switch,
...

da.. evo ti primer

Code:

$get = $_GET['get'];
switch ($get) {
case "sadrzaj":
include "sadrzaj.html";
break;
case "nesto":
include('neshto.html');
break;
default:
include ('main.html');
break;
}


Ovo što je posle default izvršiće se ako nije uneto get=neshto il get=sadrzaj

[ Jbyn4e @ 18.12.2002. 14:33 ] @
Mozda bi umesto switch i niza stranica (sta ako ih ima 1000, ko ce to navoditi!), moga da posluzi fopen funkcija
http://www.php.net/manual/en/function.fopen.php
tj. da citiram:
Citat:

jamie dot watt at murchison dot com dot au
02-Feb-2000 08:39


To check if a file exists using http or ftp use the following:


$fp = @fopen("http://www.someurl.com/testfile.php3","r");
if ($fp)
{ print"The file exists!"; }
else
{ print"The file does not exist"; }

Note: The "@" in front of fopen suppresses the error output of the function.

I hope this clears up some confusion.

A ako je lokalno.. opet moze da se sredi pomocu ovoga.
Dakle, samo ispitas da li fajl postoji - ako postoji include-as ga, a ako ne, ispises mu poruku o gresci (ili greski?)

Hope that helps.
[ Jbyn4e @ 18.12.2002. 14:35 ] @
Citat:
darkoPOKLONCIC:
da li include onoga sto je primljeno kao parametar ili se taj parametar prenosi u funkciju koja ucitava/ispisuje (iz baze)ono sto je odredjeno parametrom?

Hm, mozes li da pojasnis ovo, nisam skapirao.
[ CONFIQ @ 18.12.2002. 15:34 ] @
Citat:
Jbyn4e:
...ispises mu poruku o gresci (ili greski?)...


Ja mislim da je grešci :P

Elem,ne sviđa mi se tvoja ideja zato što bi posle korisnik mogao da luta sistemom,naprimer da odkuca get=/usr/.password/mail (ne mogu da se setim gde je tačno šifra :P) i da mu PHP pokaže fajl koji on hoće
[ Emir_MO @ 18.12.2002. 21:55 ] @
Evo konacno kod mene ovo radi :)
Mislim da je ovo sada ispravan i potpun kod:


<?php

if(phpversion()<"4.1.0")
{
$_COOKIE = $HTTP_COOKIE_VARS;
$_POST = $HTTP_POST_VARS;
$_GET = $HTTP_GET_VARS;
}

$fp = @fopen("http://www.arhiva.ba/dokumenti/".$_GET['sadrzaj'].".php","r");
if ($fp)
{ include ("dokumenti/".$_GET['sadrzaj'].".php"); }
else
{ include ("dokumenti/greska.php"); }

?>


- - - - - -
Primjer, valjda sam dobro upisao sve...

Hvala jos jednom!
[ Goran Rakić @ 18.12.2002. 22:19 ] @
Ja bih koristio is_file() umesto da otvaram konekciju preko fopen():

Citat:

is_file -- Tells whether the filename is a regular file

bool is_file ( string filename)

Returns TRUE if the filename exists and is a regular file.
[ bOkIcA @ 19.12.2002. 00:47 ] @
Ja to radim malo drugacije.

url je: http://localhost/index.php?page=100 (200, 300, 400...)

Code:
<?php
// ovde definises sve strane koje koristis (to moze da bude i u spoljnom fajlu)
$strana[100] = "neka_strana_prva.php";
$strana[200] = "neka_strana_druga.php";
$strana[300] = "neka_strana_treca.php";
$strana[400] = "neka_strana_cetvrta.php";

// ako "page" nema vrednost postavlja se na 100
if (!isset($_GET[page]) && $_GET[page] < 100){
  $page = 100;
} else {
  $page = $_GET[page];
}

// i konacno prikaz, naravno sa proverom da li fajl postoji
$fajl = @include $strana[$page];
if (!$fajl) {
  echo "Trazena strana ne postoji.";
}
?>
[ -zombie- @ 19.12.2002. 07:32 ] @
da, is_file() je bolje nego fopen(), ali je bitnije prvo "skinuti" sve moguce "zle" karaktere iz imena modula...

Code:

// skida sve "non word karaktere", tj sve osim slova, brojki i _
$sadrzaj=preg_replace('|\W|', '', $_GET['sadrzaj']);

// dodaj putanju i extenziju, recimo 
$sadrzaj="../moduli/modul_$sadrzaj.php"; 

// umesto ovoga, moze i $sadrzaj="../moduli/modul_greska.php";
if (!is_file($sadrzaj)) $sadrzaj="../moduli/modul_index.php";

// i sad ono glavno
include($sadrzaj);


ovako nije potrebno nikakvo proveravanje. samo sve module smestite u ../modules dir (ili koji god, po zelji), i ako su tamo, mogu da se izvrse, ako nisu, ne mogu i tacka...
[ darkoPOKLONCIC @ 19.12.2002. 10:19 ] @
Citat:
Hm, mozes li da pojasnis ovo, nisam skapirao.


dakle, prvi dio sa 'include onoga sto je primljeno kao parametar' je opisao CONFIQ.

i to je ok.


drugi dio je nesto drugaciji:
npr. imamo 5 kategorija /tekstova na portalu, proizvoda u web shopu, necega negdje.../

i sad...

- ako kliknemo na kategoriju i zelimo pogledati nju cijelu - u funkciju prenosimo akciju kao nekakav parametar - npr. index.php?akcija=daj_kat&kategorija=4

- ako pak kliknemo na konkretan item /text, proizvod..../ onda je akcija=daj_item&item=35

- i treci slucaj kada nije nista odredjeno - to znaci ucitavanje samog index.php

u ovom slucaju nema onoliko includeova koliko postoji kategorija vec samo 2 funkcije - ispis kategorije i ispis itema.



moje je pitanje - sta vam zvuci bolje?

[ komsija @ 29.12.2002. 10:32 ] @
Ja imam neko slicno pitanje, (pocetnik)
Da li moze kako da se napravi da mi linkovi budu ovog tipa
index.php?action=download
umjesto www.sajt/download.php
Ja sam pokusavao sa ovim kodom ali nece
pa ako bi neko mogao da napise
evo koda s` kojim sam pokusavao
<?php
if ($HTTP_GET_VARS['action'] == 'download') {
$inc_file = 'download.php';
} else if ($HTTP_GET_VARS['action'] == 'text') {
$inc_file = 'textovi.php';
} else if ($HTTP_GET_VARS['action'] == 'chat') {
$inc_file = 'chat.php';
} else if ($HTTP_GET_VARS['action'] == 'contact') {
$inc_file = 'contact.php';
} else if ($HTTP_GET_VARS['action'] == 'exchange') {
$inc_file = 'exchange.php';
}
?>
[ CONFIQ @ 29.12.2002. 11:08 ] @
Komšija,pogledaj gore post što sam napisao kod sa switch-om
[ CONFIQ @ 03.01.2003. 15:46 ] @
evo zašto bih koristio switch u ovom slučaju....

http://www.nekisajt.co.yu/index1.php?link=/etc/passwd

ee sad ko je ima želje nek izvoli....

PS - Umesto nekisajt je stajala adresa jednog našeg poznatog sajta, prosto sramota za programera tog čuda...
[ -zombie- @ 04.01.2003. 23:44 ] @
(po meni) moje je resenje bar "elegantnije" ako ne i bolje od switcha.

(/etc/passwd se pretvara u modul__etc_passwd.php, sa cime moze da se slika ;)
[ mikis @ 05.01.2003. 18:49 ] @
Citat:
bOkIcA:
Ja to radim malo drugacije.

url je: http://localhost/index.php?page=100 (200, 300, 400...)


I kad korisnik traži neku stranu koju je ranije posetio i address baru browsera, naći će je... Kao što je EUnet u svom novom CMS-u stranu za proveru vremena nazvao "www.eunet.yu/cms/view.php?id=1155". I sad ja treba da gledam u pasulj da li je provera vremena 1155, 1156 ili nešto sedmo. Umesto da se stranicama koje se često posećuju daju logični url-ovi kao što je npr. "www.verat.net/provera_vremena"
[ Goran Rakić @ 05.01.2003. 18:54 ] @
a za šta služi bookmark? Plus što bolji browser-i ;) prikazuju i title pored URL-a, kada prosiris padajucu listu address bar-a
[ bOkIcA @ 06.01.2003. 03:48 ] @
Citat:
mikis:
Citat:
bOkIcA:
Ja to radim malo drugacije.

url je: http://localhost/index.php?page=100 (200, 300, 400...)


I kad korisnik traži neku stranu koju je ranije posetio i address baru browsera, naći će je... Kao što je EUnet u svom novom CMS-u stranu za proveru vremena nazvao "www.eunet.yu/cms/view.php?id=1155". I sad ja treba da gledam u pasulj da li je provera vremena 1155, 1156 ili nešto sedmo. Umesto da se stranicama koje se često posećuju daju logični url-ovi kao što je npr. "www.verat.net/provera_vremena"


Ono sto sam napisao je jednostavan mali primer i ne sluzi za kompleksnije i komercijalne sajtove.
Code:
// $strana[200] = "neka_strana_druga.php";
$strana[provera_vremena] = "neka_strana_druga.php";


A sad zamisli da ti na elitu umesto id-a poruke pise tema&koji_odgovor+jos_po_nesto, tada bi se snasao sigurno!!!

Ja inace koristim daleko komplikovaniji sistem koji necu ovde objasnjavati.
Bio je bitan detalj kod provere da li fajl postoji ili ne:
Code:
$fajl = @include $strana[$page];
if (!$fajl) 
  echo "Trazena strana ne postoji.";


[ mikis @ 06.01.2003. 20:58 ] @
Citat:
Go! X:
a za šta služi bookmark? Plus što bolji browser-i ;) prikazuju i title pored URL-a, kada prosiris padajucu listu address bar-a


Kakav bre bukmark, u njega samo dodajem strane a nikako da se nakanim da ih jednom i sredim -- sad ih ima jedno 1000 u istom ;) Lakše mi je da počnem da kucam u adres baru uz autocomplete, nego da kopam po bukmarkovima. A kad mi nešto baš treba, tu je Google :))

I drugo, džaba ti Title kada dizajner zaboravi da ga turi :(
[ mikis @ 06.01.2003. 21:04 ] @
Citat:
bOkIcA:
A sad zamisli da ti na elitu umesto id-a poruke pise tema&koji_odgovor+jos_po_nesto, tada bi se snasao sigurno!!!

Ja inace koristim daleko komplikovaniji sistem koji necu ovde objasnjavati.


Naravno, nemoj da misliš da tebe lično prozivam, samo navodim primer o čemu generalno treba voditi računa. Sistem je ok za sajtove poput foruma ili news sajtova. A zamisli da su na ES-u linkovi umesto /login, /pomoc.php ili /pretraga.php tipa "/index.php?page=100" ili nešto slično.
[ muconi78 @ 24.10.2006. 21:14 ] @
Stara tema.Pozdrav svima.
Da li bi neko pokazao svoj primjer switch-a, kompletno rjesenje za sajt koje funkcionise, ili je u pitanju kritika, pa se ljudi uglavnom slabo odlucuju da pokazu svoje rjesenje.