Home   FORUM   Toplista   HTML   CSS   JavaScript   PHP   DIZAJN   SEO   Mapa
KONTAKT
izuzetan[at]gmail.com






TOP LISTA SAJTOVA

Kombinovanje POST i GET metoda kroz jednu formu

U slučaju kada se unutar jednog PHP dokumenta nalazi više "delova" sitea, tu govorim o tzv. višenamenskim stranicama, koncept takvih dokumenata je da se na osnovu jedne (ili više) promenjljive iz query stringa surferu prikazuju potpuno različiti delovi sitea. Recimo, ako surfer otvori link tipa http://www.moj-site.com/indeks.php?nav=novosti prikazuje mu se lista svih novosti, a ako otvori link http://www.moj-site.com/indeks.php?nav=kontakt otvara mu se kontakt forma. Očito je da u ovom slučaju moramo nekako proslediti $_GET["nav"] varijablu kroz query string tako da sve radi kako treba. Ovo je moguće ukoliko se radi o formi sa POST metodom slanja podataka. Idemo pogledati primer pa će stvari biti jasnije.

<html><head>
<title>Kombinovanje POST i GET metode prosljeđivanja podataka</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head><body>
<h2>Kombinovanje POST i GET metode prosljeđivanja podataka</h2>
<p>Dobrodošli na višenamensku stranicu:</p>
Delovi stranice:<br>
<ul>
<li><a href="<?=$PHP_SELF?>">Početna stranica</a></li>
<li><a href="<?=$PHP_SELF?>?nav=tekst">Stranica sa tesktom</a></li>
<li><a href="<?=$PHP_SELF?>?nav=forma">Forma</a></li>
</ul><br><br>
<?
switch (@$_GET["nav"]){
   case "forma":
   if (!$_POST["SBgumb"]){
?>
<form method="post" action="<?=$PHP_SELF?>?nav=forma">
Unesi svoje ime:<br>
<input name="ime" type="text"><br>
<input name="SBgumb" type="submit" value="Pošalji">
</form>
<?
   }else{
      echo "Polje ime sadrži vrednost: ".$_POST["ime"];
   }
   break;
   case "tekst":
?>
<p>Ovo je deo stranice sa nekim većim tekstom koji služi samo za ilustraciju </p>
<?
   break;
   default: echo "Nalazite se na početnoj stranici";
}
?>
</body></html>

Već smo napisali da se ovde radi o višenamenskoj stranici koja je realizovana pomoću kontrolne varijable $_GET["nav"]. Zavisno od njene vrednosti naš dokument surferu vraća drugačiji ispis.

if (! $_POST["SBgumb"]){
?>
<form method="post" action="<?=$PHP_SELF?>?nav=forma">
Unesi svoje ime:<br>
<input name="ime" type="text"><br>
<input name="SBgumb" type="submit" value="Pošalji">
</form>
<?
}else {
   echo "Polje ime sadrži vrednost: ".$_POST["ime"];
}

Kao što znamo action argument <form> taga služi za određivanje URL-a do dokumenta koji očekuje podatke iz te forme te ih obrađuje. Pošto je u ovom slučaju dokument koji prihvata podatke isti kao i onaj koji prikazuje formu kao prvi deo linka koristimo $PHP_SELF varijablu radi osiguravanja da će se opet otvoriti isti dokument. Ali, u ovom slučaju je problematika dodatno zakomplikovana time što se forma nalazi unutar višenamenske stranice i ukoliko nekako ne prosledimo vrednost i za $_GET["nav"] promenjljive nakon submitanja forme će se umesto koda za obradu forme pokrenuti default grana switch strukture. Iz tog razloga smo ručno "zalepili" na kraj action argumenta i query string sa vrednosti za $_GET["nav"] varijablu, tako da osiguramo da će se nakon submitanja forme opet pokrenuti pravilna grana switch-a (ona u kojoj se nalazi cod za prikaz i obradu forme). Pošto smo prosledili tu vrednost naša skripta će nakon submitanja pravilno obaviti obradu forme. Prva stvar je da moramo proslediti tačnu vrednost za $_GET["nav"]. Ali druga, ne toliko očita stvar je da ovaj koncept ne radi ukoliko se radi o formi sa GET metodom. Problem leži u samom HTML-u, tj HTTP protokolu. Naime, kada se formi daje GET metoda i u action argument te forme ručno upišemo link zajedno sa query stringom, taj query string će biti automatski zamenjen sa imenima i vrednostima elemenata iz forme. Ilustracije radi, pokušajte pokrenuti gornji primjer, samo promenite metodu slanja forme iz POST u GET.

Ali, stvari ipak nisu toliko crne. Postoji način kako "naterati" formu da ipak pravilno prosledi i $_GET["nav"] varijabli nakon submitanja forme ukoliko se forma šalje GET metodom. Jedan od načina je da u formu dodamo, nevidljivo, polje imena "nav" te u njega spremimo pravilnu vrijednost, pa će mo imati sledeću formu:

if (!$_GET["SBgumb"]){
?>
<form method="post" action="<?=$PHP_SELF?>">
<input name="nav" type="hidden" value="forma">
Unesi svoje ime:<br>
<input name="ime" type="text"><br>
<input name="SBgumb" type="submit" value="Pošalji">
</form>
<?
}else{
   echo "Polje ime sadrži vrednost: ".$_GET["ime"];
}

Copyright © 2010 BUbaj. Powered By bubaj.com
PHP    PHP sintaksa    Fajl    Niz    String    Funkcija    Objektno programiranje    MySQL    Unos fajla    Datum    Forme    Sesija    Registracija