traži:  
 php.com.hr > Višenamjenske stranice

Višenamjenske stranice
 


U ovom članku je objašnjenja logika višenamjenskih stranica i u konkretnim primjerima su detaljno objašnjene njihove različite implementacije.

Prije samih primjera potrebno je postaviti i objasniti problem i sam pojam višenamjenskih stranica.

U izradi serverskih aplikacija, nebitno u kojem jeziku su one izvedene, je ponekada praktičnije koristiti jedan fizički dokument za obavljanja različitih logički povezanih operacija. Ovakve situacije se najčešće javljaju u portalskim aplikacija koji se sastoje od više sekcija i servisa. Korištenjem višenamjenskih stranica je moguće fizički separirati svaki odjeljak ili servis cjelokupne aplikacije u posebne datoteke (skripte) koje imaju specijaliziranu namjenu. U konkretnom slučaju, jedna višenamjenska stranica bi se koristila za listanje, pretraživanje i prikazivanje vijesti iz arhive vijesti, a druga recimo za servis e-razglednica ili forum.

Tehnički gledano, višenamjenske stranice nisu ništa drugo nego obavljanje drugog niza instrukcija (operacija) za različite situacije koje se određuju pomoću nekog kontrolnog uvjeta koji može biti kontrolna riječ, koja je za svaku situaciju drugačija, ili kontrolna varijabla koja za svaku situaciju ima drugu vrijednost.

Uobičajena praksa prosljeđivanja kontrolnog uvjeta je putem komandne linije (dijelu URL-a iza znaka ? ).
Višenamjenska stranica izvedena korištenjem kontrolne riječi

Ovo je jedna od metoda implementacije višenamjenskih stranica. Kontrolna riječ je fragment komandne linije (ASP-ovci ovo znaju kao Querry String) kojem nije pridružena nikakva vrijednost (nema niti znak = ) i odvojen je od ostalih parametara komandne linije (uobičajeno razdvajanje za PHP je pomoću znaka & ).

Evo ako bi izgledao primjer:

http://www.webmajstori.net/visenamjenska.php? webmajstori

Znači, u gornjem primjeru kontrolna riječ je 'webmajstori'

Evo i skripte.

 

<?

switch(@$_SERVER["QUERY_STRING"]){

case "kreso":

echo "Pozdrav majstore";

break;

case "webmajstori":

echo "To su isto majstori";

break;

default:

echo "A tko si ti?";

}

 

echo "<hr>";

echo "<p>Sadržaj query stringa<br>";

echo $_SERVER["QUERY_STRING"];

echo "</p>";

echo "<hr>";

echo "<p>Provjera postojanja varijable putem isset funkcije<br>";

if (isset($_GET["kreso"])){

echo "varijabla kreso postoji<br>";

}else{

echo "varijabla kreso ne postoji<br>";

}

if (isset($_GET["webmajstori"])){

echo "varijabla webmajstori postoji<br>";

}else{

echo "varijabla webmajstori ne postoji<br>";

}

echo "</p>";

 

?>

 

Analiza:

Za gore navedeni primjer rezultat bi izgledao ovako :

 

To su isto majstori

Sadržaj query stringa
webmajstori

Provjera postojanja varijable putem isset funkcije
varijabla kreso ne postoji
varijabla webmajstori ne postoji

Idemo sada proletiti kroz sam kod.

Prvi dio skripte obavlja neke radnje na osnovi zadane kontrolne riječi i tu zapravo izvodimo višestruku namjenu ove skripte.

 

switch(@$_SERVER["QUERY_STRING"]){

case "kreso":

echo "Pozdrav majstore";

break;

case "webmajstori":

echo "To su isto majstori";

break;

default:

echo "A tko si ti?";

}


Mislim da nije potrebno objašnjavati ovu switch strukturu, ali da bi bili sigurni idem ju ipak objasniti. Switch provjerava tekst koji se nalazi u komandnoj liniji i uspoređuje ga sa vrijednostima u case granama. Ukoliko je taj string jednak jednoj od ponuđenih vrijednosti ispisuje se odgovarajuća poruka, a ukoliko ne odgovara niti jednoj od tih vrijednosti ili nema vrijednosti vraća se poruka 'A tko si ti?' tj. default grana switch strukture.

Zašto je potrebno pristupati kontrolnoj riječi na gornji način (preko (@$_SERVER["QUERY_STRING"])?
Razlog ovome je zapravo vrlo jednostavan. Prosljeđivanjem kontrolne riječi u komandnoj liniji bez pridružene vrijednosti i znaka = ne definira nikakvu varijablu, pa time nije moguće ispitivati njenu vrijednost ili njeno postojanje.

Umjesto toga pristupamo cijelom tekstu iza znaka ? (tj. query stringu) koji se nalazi u varijabli $_SERVER["QUERY_STRING"]

Da prosljeđivanjem ključne riječi PHP ne definira varijablu dokazujem slijedečim kodom u skripti.

echo "<p>Provjera postojanja varijable putem isset funkcije<br>";

if (isset($_GET["kreso"])){

echo "varijabla kreso postoji<br>";

}else{

echo "varijabla kreso ne postoji<br>";

}

if (isset($_GET["webmajstori"])){

echo "varijabla webmajstori postoji<br>";

}else{

echo "varijabla webmajstori ne postoji<br>";

}

echo "</p>";

Ovaj dio koda vraća za gornji primjer :

varijabla kreso ne postoji
varijabla webmajstori ne postoji

Korištenje kontrolne riječi otvara više novih problema. Naime, ukoliko želimo skripti proslijediti preko komandne linije i neku varijablu koja nosi isto ime kao i jedna od naših kontrolnih riječi, ili samoj kontrolnoj riječi pridružimo neku vrijednost uvijek će se obavljati default grana switch strukture pošto cijela komandna linija u tim slučajevima ( pogledaj dole ) neće odgovarati ponuđenim mogućim stanjima u svakom od case odjeljaka (grana) switch strukture.

http://www.webmajstori.net/visenamjenska.php?
webmajstori=123

http://www.webmajstori.net/visenamjenska.php?
webmajstori&webmajstori=123

http://www.webmajstori.net/visenamjenska.php?
webmajstori&kreso=123

Kako to izbjeći?

Dobro pitanje. Ono što moramo u tom slučaju (za podsjetnik – imati još dodatne argumente u query stringu) napraviti je postaviti neka pravila. Ta su da se kontrolna riječ uvijek mora nalaziti prva iz znaka ? u URL-u. Nakon uvođenja ovog pravila možemo izbjeći gore navedeni problem sa slijedećim kodom :

 

 

/*

Pribavljanje ključne riječi

znakom @ izbjegavamo prikaz greške ukoliko je query string prazan

*/

$arr_komandna_linija=@explode("&", $_SERVER["QUERY_STRING"]);

$str_komandna_rijec=$arr_komandna_linija[0];

echo "<br>Vraćena vrijednost nakon provjere je <br>";

switch(@$str_komandna_rijec){

case "kreso":

echo "Pozdrav majstore";

break;

case "webmajstori":

echo "To su isto majstori";

break;

default:

echo "A tko si ti?";

}

echo '</p>';

 

echo "<hr>";

echo "<p>Sadržaj query stringa<br>";

echo $_SERVER["QUERY_STRING"];

echo "</p>";

echo "<hr>";

echo "<p>Provjera postojanja varijable putem isset funkcije<br>";

if (isset($_GET["kreso"])){

echo "varijabla kreso postoji<br>";

}else{

echo "varijabla kreso ne postoji<br>";

}

if (isset($_GET["webmajstori"])){

echo "varijabla webmajstori postoji<br>";

}else{

echo "varijabla webmajstori ne postoji<br>";

}

echo "</p>";

 

Idemo analizirati ovaj kod.

$arr_komandna_linija=@explode$_SERVER["QUERY_STRING"]);


 



PHP
 © 2004 - 2008 php.com.hr