traži:  
 php.com.hr > Prikaz i obrada unutar jednog dokumenta

Prikaz i obrada unutar jednog dokumenta
 


Ovo je dio teme logike prikaza i obrade formi, koja će biti detaljno pokrivena pri kraju ovog članka. Iz tog razloga ću zaobići veći dio objašnjenja prednosti i mana ove metode prikaza i obrade formi. Za sada je bitno samo da shvatite princip po kojem će se forma prikazivati i obrađivati, jer ćemo kasnije u članku malo razviti ovaj princip i učiniti ga puno 'pametnijim'.

Idemo vidjeti o čemu se radi.

U srednjim i većim aplikacijama je vrlo nepraktično imati odvojene dokumente za prikaz i obradu forme iz očitog razloga što bi se broj dokumenata nekog sitea popeo do tako velikog broja da bi postao problem praćenja što se gdje odvija unutar strukture dokumenata sitea, te si takvom praksom samo bespotrebno kompliciramo izradu sitea tj. aplikacije.

Iz tog razloga je poželjno stvari koje su usko povezane, poput prikaza i obrada forme držati unutar istog dokumenta u najmanju ruku. O ponešto naprednijim metodama logike prikaza i obrade forme će biti govora pri kraju ovog članka.

Idemo pogledati konkretan primjer pa ćemo ga prokomentirati.

U primjeru ćemo koristiti istu formu i obradu iz b slučaja Primjera 2.

Primjer 3 : Prikaz i obrada forme unutar jednog dokumenta

<html>

<head>

<title>Primjer 3 :Prikaz i obrada forme unutar jednog dokumenta</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">

</head>

<body>

<h2>Primjer 3 :Prikaz i obrada forme unutar jednog dokumenta</h2>

<hr>

<?

if ( ! $_POST["submitaj"] ){

?>

<form name="primjer3" method="post" action="<?=$PHP_SELF?>">

Unesi svoje ime :

<input name="ime" type="text" >

<br>

<input name="submitaj" type="submit" value="Pošalji">

</form>

<?

} else {

echo "Pozdrav " . $_POST["ime"];

}

?>

</body>

</html>

Objašnjenje :

Ovaj primjer je ništa više nego malo presložen Primjer 2, i to njegov b slučaj.

Zapravo smo eliminirali potrebu za dva odvojena dokumenta i sve se obavlja unutar istog dokumenta. Ovo bi se usudio nazvati prvim stupnjem strukturiranja koda formi. Prvi zato što je ovo zapravo tek prvi od više koraka u izradi naprednih i pametnih form sistema, o kojima će biti više govora kasnije u članku.

Idemo sada proći kroz novine u ovom primjeru.

Prva stvar koju odmah uočavate je

if ( ! $_POST["submitaj"] ){

Ova linija provjerava da li postoji neka vrijednost u varijabli $_POST["submitaj"]. Ako se sjećate, već smo radili ponešto sličnu provjeru. Mislim na provjeru kojom metodom je prestupljena stranica pomoću provjere $REQUEST_METHOD varijable.

Ta provjera i nije najbolja za našu situaciju. Razlog tome je štou toj varijabli uvijek postoji neka vrijednost, po defaultu GET, iako ne postoji query string , tako da njena vrijednost ne garantira da je netko stvarno ispunio formu i došao na stranicu.

U našem primjeru provjeravamo postojanje vrijednosti unutar superglobalne $_POST varijable, a ukoliko se u njoj nalazi neka vrijednost podrazumijeva i da je $REQUEST_METHOD == POST.

Ono što treba primijetiti u primjeru je da se provjerava postojanje vrijednosti za submit gumb unutar forme. To radimo zato što je ta vrijednost obavezno prisutna ukoliko se forma ispunila i submitala, zato što smo joj u samom HTML-u dali vrijednost pomoću value argumenta u kodu submit gumba.

Želio bih napomenuti da u ovoj logici ima smisla provjeravati samo vrijednosti za submit gumbe jer je jedino njima garantirano postojanje vrijednosti. Recimo, u primjeru nema smisla provjeravati postojanje vrijednosti u $_POST["ime"] kao uvijet prikaza ili obrade forme, jer surfer možda ne ispuni to polje, te bi mu se nakon submitanja forme nanovo prikazala forma ukoliko bi ostavio polje ime prazno.

Postoji još jedna vrlo zanimljiva i korisna stvar oko submit gumba, no na nju ću se vratiti malo kasnije, u Primjeru 4.

Vratimo se mi na naš primjer.

Logika primjera je poprilično jednostavna. Ukoliko ne postoji vrijednost u $_POST["submitaj"] znači da forma nije još ispunjena i trebaju prikazati, a ukoliko ta vrijednost postoji znači da je forma ispunjena i submitana, te želimo obraditi te podatke.

U samoj formi je dodana još jedna novina(boldano u liniji ispod)

<form name="primjer3" method="post" action="<?=$PHP_SELF?>">

$PHP_SELF je varijabla koju definira sam PHP i u njoj se nalazi ime trenutno aktivnog dokumenta. Pošto mi želimo da se forma prikaže i obradi unutar istog dokumenta, to je točno ono što nama treba. Iako smo tu mogli ručno upisati ime našeg dokumenta, korištenje $PHP_SELF je preporučljivo, zato što ovako možemo promijeniti ime našeg dokumenta, a u njemu će sve i dalje raditi kako je zamišljeno, zato što PHP sam namješta njenu vrijednost.

Kao što sam rekao, ovo je vrlo jednostavan model prikaza i obrade formi, i on je idealan za login forme, forme za unos i izmjenu podataka. Postoje neki problemi za koje ovo nije idelano rješenje, posebno u administracijskim alatima, no o tim problemima ću više govoriti kada bude bilo govora o logikama prikaza formi.

Sada ću se vratiti na onu zanimljivu stvar oko submit gubma. Radi se o slučaju kada želimo imati u jednoj formi više submit gumba, te ovisno o tome koji je kliknuti želimo u obradi forme obaviti različite operacije.

Razlozi za ovako nečim su vrlo česti, pogotovo kada se radi neki administracijski alatima, gdje je potrebno moći napraviti više različitih operacija nad istim podacima (recimo želimo omogućiti brisanje većeg broja novosti u našoj news skripti, ali želimo imati i gumb koji bi obrisao sve poruke odjednom).

Idemo ovo promotriti na konkretnom primjeru. Primjer se sastoji od forme sa dva submit gumba, te od obrade te forme unutar istog dokumenta. U obradi forme ćemo ispisati poruku koji je gumb stisnut.

Primjer 4: Forme sa više gumba

<html>

<head>

<title>Primjer 4 : Forma sa više submit gumba</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">

</head>

<body>

<h2>Primjer 4 :Forma sa više submit gumba</h2>

<hr>

<?

if ( $REQUEST_METHOD != "POST"){

?>

<form name="primjer4" method="post" action="<?=$PHP_SELF?>">

<input type="submit" name="gumb1" value="Gumb 1">

<br>

<input type="submit" name="gumb2" value="Gumb 2">

</form>

<?

} else {

// obrada forme

if ($_POST["gumb1"])

echo "Pritisnuli ste gumb 1";

if ($_POST["gumb2"])

echo "Pritisnuli ste gumb 2";

}

?>

</body>

</html>

 



PHP i forme
 © 2004 - 2008 php.com.hr