PHP - Prosleđivanje podataka preko HTML forme ($_POST)
Uvod
U prethodnom članku upoznali smo se prvo sa opštim principima za razmenu podataka između PHP skripti, nakon čega smo se upoznali sa pravilima za korišćenje superglobalne promenljive $_GET, i na kraju smo se napravili osvrt na razlike između dve najpopularnije metode za razmenu podataka, GET i POST.
Pošto je glavni zaključak bio da metoda GET ne predstavlja praktičan način za prosleđivanje osetljivih informacija (zbog svoje 'otvorenosti'), ovoga puta ćemo se osvrnuti na postupak za prosleđivanje podataka preko HTTP metode POST (i dalju obradu preko superglobalne promenljive $_POST).
Superglobalna promenljiva $_POST
Podaci koji su osetljivi (ili jednostavno ne treba da postanu deo URL-a), prosleđuju se PHP skriptama preko HTTP metode POST. *
U praktičnom smislu (pri izradi sajtova), prenos podataka podrazumeva upotrebu dve stranice:
- jedna stranica sadrži HTML formu preko koje će podaci biti učitani i prosleđeni
- druga stranica (PHP skripta), prima i obrađuje podatke
HTML forma
Za početak, kreiraćemo dokument index.php (tj. stranicu sa formom preko koje će podaci biti prosleđeni). *
<!DOCTYPE html>
<html>
<head>
<title>PHP - Prosleđivanje preko forme</title>
<meta charset='UTF-8'/>
<link rel='stylesheet' type='text/css' href='stil.css'>
</head>
<body>
<form method='post' action='obrada.php'>
<input type='text' id='forma_ime' name='forma_ime'/>
<input type='text' id='forma_prezime' name='forma_prezime'/>
<input type='text' id='forma_email' name='forma_email'/>
<input type='submit' value='Prosleđivanje podataka'/>
</form>
</body>
</html>
Da pojasnimo i detalje sa kojima se do sada nismo susretali:
- atribut
method(unutar taga<form>), definiše način prosleđivanja podataka (GET ili POST) - atribut
actionodređuje kojoj skripti će biti prosleđeni podaci kada se klikne na dugmesubmit** - tagovi
<input>imaju definisane id-ove, međutim, svrha id-ova je povezivanje sa JavaScript-om i CSS-om (a ne sa PHP-om ili nekim drugim backend jezikom) - za definisanje 'budućih indeksa' u okviru superglobalne promenljive
$_POST, koristi se atributname(sa odgovarajućim vrednostima iz različitih<input>tagova)
Prijem i obrada podataka
Za obradu podataka koristićemo skriptu obrada.php (onako kako je navedeno u HTML formi koju smo prethodno kreirali), pri čemu obe skripte koje smo do sada kreirali treba smestiti u isti folder.
Skripta obrada.php ima sledeći sadržaj:
<?php
$ime = $_POST["forma_ime"];
$prezime = $_POST["forma_prezime"];
$email = $_POST["forma_prezime"];
echo "Prosledili ste sledeće podatke:<br><br>";
echo $ime . " " . $prezime . "<br>";
echo $email . "<br>";
?>
Kao što vidimo,osnovni princip prijema i obrade podataka (preko asocijativnih nizova), isti je kao kada smo koristili superglobalnu promenljivu $_GET.
Takođe, budući da i u ovom slučaju mogu nastati problemi ukoliko pokušamo da pristupimo indeksima koji nisu definisani (ili ukoliko se desi da preko HTTP metode POST ne budu uopšte prosleđeni podaci), potrebno je koristiti već poznati mehanizam provere, preko funkcije isset:
<?php
$uslov = isset($_POST["forma_ime"]) &&
isset($_POST["forma_prezime"]) &&
isset($_POST["forma_email"]);
if (!$uslov) {
echo "Greška! Podaci sa forme nisu prosleđeni ";
echo "u odgovarajućem formatu.";
exit();
}
$ime = $_POST["forma_ime"];
$prezime = $_POST["forma_prezime"];
$email = $_POST["forma_email"];
echo "Prosledili ste sledeće podatke:<br><br>";
echo $ime . " " . $prezime . "<br>";
echo $email . "<br>";
?>
Probajte, za vežbu, da sami kreirate skripte i prosledite podatke preko HTML forme.
Kratak rezime ....
Kratak rezime pravila za upotrebu superglobalne promenljive $_POST je sledeći:
- metoda POST koristi se (pre svega) onda kada treba preneti osetljive informacije (ili bilo koje druge podatke koji ne treba da postanu deo URL-a)
- u HTML formi praktično se definišu budući indeksi niza
$_POST(preko atributanameu<input>poljima) - za proveru prisutnosti prosleđenih podataka (prilikom prijema podataka u PHP skripti za obradu), koristi se funkcija
isset
U sledećem nastavku serijala o PHP-u, pisaćemo o povezivanju PHP skripti sa bazama podataka.