za 14/15. mart
Sada ćemo da pogledamo kako funkcionišu forme:
Forme
Klik da prikažete/sakrijete video ( rad sa formama )
Za prikupljanje podataka od korisnika se najčešće koriste HTML forme. Tu će korisnik da unosi neke podatke u formu i kada se odabere opcija za submit forme, browser će da formatira podatke i da pošalje zahtev ka serveru. Između ostalog u tom zahtevu će da se nalazi i naziv fajla na serveru koji bi trebalo da obradi zahtev.
Ranije ste se upoznali sa HTML formama, a sada ćete se saznati i kako se prihvataju i obrađuju podaci koji su unešeni u formu. To se postiže korišćenjem PHP-a.
Kao što znate od ranije, forma je HTML element pomoću kojeg se grupiše više elemenata za unos podataka. Za formu koristimo HTML tagove (početni i krajnji), kao i atribute.
Primer:
<html>
<head>
<title>Moja forma </title>
</head>
<body>
<h1>Neka moja forma</h1>
<hr>
<p>Popuniti sledece polje: </p>
<form method="post" action="obradi.php" name="forma1">
<input name="submitdugme" type="submit" value="Posalji">
</form>
</body>
</html>
Kratko objašnjenje atributa:
method=”post”- metoda kojom će se podaci iz forme proslediti fajlu koji vrši obradu forme.
action=”obradi.php”- definišemo
fajl na serveru, koji obrađuje zahtev.
name=”forma”- atribut koji omogućava identifikaciju same forme (treba nam ako koristimo JavaScript).
input tag – za unos podataka od strane korisnika. Ako je input element tipa submit, na ekranu će da se
prikaže kao dugme, pa kad se klikne na dugme generiše se događaj onsubmit (submit-ovanje ili slanje forme).
Metode slanja i prihvatanja podataka
Dve osnovne metode prosleđivanja podataka forme nekom fajlu (skripti) su:
POST i GET. Kako da odberete koja vam treba?
Tako što to navedete u okviru <form> taga, kao method=”post” ili method=”get” .
Odabir metode utiče na koji način će se podaci sa forme proslediti. U PHP-u se odabirom metode bira i način na koji će ti podaci biti prihvaćeni.
Ako se odabere metoda GET - podaci forme se šalju kroz komandnu liniju (to se vidi kao query string, tj. iza znaka ? u adress-baru browsera). Podaci se prenose u obliku ključ=vrednost.
Ako se odabere metoda POST podaci nisu vidljivi u komandnoj liniji već se šalju transparentno, kroz telo (body) HTTP zahteva (HTTP request).
*
VEŽBA - 1. deo:
U narednom zadatku ćemo videti kako možemo da proverimo da li je kliknuto na dugme "Registruj se" i kako možemo da pokupimo sve podatke sa forme.
Klik da prikažete/sakrijete prvi video (od vežbe koju radimo)
* Kreirati folder php_forma i u njemu kreirati index.php
* Postavite na vrh naslov: "Registruj se"
* ispod naslova napraviti formu, korišćenjem html tagova: <form> i </form>
* U samoj formi dodati opcije action i method.
*
Za početak ćemo postaviti action="index.php", da nas vrati na isti fajl.
* Za method biramo ili POST ili GET. U ovom primeru ćemo da koristimo POST.
* Kreirati polja za username i password, i dugme za registraciju:
username: <input type="text"> <br>
password: <input type="password"> <br>
<input type="Submit"> ...
Podsetimo se:
- sam php server traži fajl index.php kako bi automatski pokrenuo tu stranicu. Ukoliko ona ne postoji, izlistaće sve podatke koji se nalaze u odabranom folderu na serveru.
- U opciji action za cilj imamo da postavimo lokaciju ili putanju ili fajl na koji želimo da nas forma usmeri prilikom klika na dugme.
(KLIK za prikaz/sakrivanje: upoznajte super globalne promenljive)
PHP poseduje niz globalnih promenljivih u kojima se nalaze razni podaci vezani za server, informacije o korisniku, operativni sistem, cookiji, promenljive iz formi i Query string.
Na primer> ako korisnik u formi popuni polja za korisničko ime i pasword, na serveru neće biti nikakvih promenljivih $name, $password, već se podaci šalju u obliku niza: $_POST[‘name’], $_POST[‘password’] i može im se pristupiti samo preko globalne promenljive $_POST.
Globalne promenlive sa kojima ćemo se sretati:
$_GLOBALS - niz u kojem su reference ka svim globalnim promenljivima koje su dostupne u okviru lokalne skripte. Imena promenljivih predstavljaju ključeve ovog niza.
$_SERVER - Globalna promenljiva sa informacijama o serveru i korisniku.
$_GET i $_POST - Opširnije o ovim globalnim promenljivima kada bidemo radili vežbe sa formama.
$_COOKIE - Sadrži informacije iz HTTP kukija.
$_FILES - Globalna promenljiva sa fajlovima koji su uploadovani na server putem forme.
$_ENV - Sadrži informacije o okruženju u kojem radi PHP paser.
$_SESSION - Asocijativni niz varijabli sa informacijama registrovanim u okviru sesije
$_REQUEST
Upotreba nekih od ovih globalnih promenljivih će biti jasnija u sledećem delu:
* VEŽBA - 2. deo: Submit dugme
Klik da prikažete/sakrijete drugi video (od vežbe koju radimo)
* uvodimo malo php koda:
* ispred forme kreirati početak php koda i zatvoriti ga. Van okvira granica php-a može da se izvršava html. Ako biste html stavili unutar tagova za html, dobićete poruku o grešci jer će php server tražiti komande (ono što
piše kao html tag)
* cilj: uz pomoć php-a da ispitamo da li postoji klik na dugme submit
* našem dugmetu dajemo naziv: reg
* pitanje: Da li postoji klik na dugme pod nazivom reg?
*
U okviru if uslova pitamo: isset($_POST['reg']) { ...
* ako je uslov ispunjen, ispisati: "Kod radi", a ako uslov nije ispunjen ispisati poruku "klik na postoji"
* prikazati uslov nepostojanja: else if(!isset($_POST['reg'])
- ako nije kliknuto da se ispiše nešto
* Na kraju ubaciti našu formu u onom momentu kada ne postoji klik - da se samo tada forma vidi
* - prekinuti php, ubaciti formu, ali da bi de if nastavio, treba da nastavimo php kod, pa ponovo otvoriti
php tag
*
<?php
// ispitivanje klika
if(isset($_POST['reg'])) {
// klik postoji
echo "Klik postoji";
} else if(!isset($_POST['reg'])) {
// klik ne postoji
?>
<form action="index.php" method="POST">
username: <input type="text"> <br>
password: <input type="password"> <br>
<input type="submit" name="reg">
</form>
<?php
}
?>
* VEŽBA - 3. deo: Dodeljivanje unesenih vrednosti nekim promenljivima
Klik da prikažete/sakrijete treći video ( *** )
* cilj: dodeljivanje vrednosti iz polja username i password nekim promenljivama
* koristimo se metodom POST i globalnom promenljivom $_POST
* Pre bilo čega:
* treba dodeliti imena (name)
poljima u kojima se unose vrednosti username i password (user, pass)
* Kreirati promenljivu $username = $_POST['user'];
* između navodnika se unosi naziv polja u koje se unosi username
*
Slično kreirati promenljivu $password
* Šta želimo?
* Nakon klika na dugme da pokupimo podatke i da te podatke dodelimo promenljivoj pa ispisati sve to ako je došlo do klika ...
* Unutar if : ako
postoji klik na dugme submit, tj. ako je postavljena vrednost reg (ako je prisutna, tj ako je došlo do događaja klika na dugme kojem je name="reg"), i tada će se izvršiti ono posle if - treba ispisati username i password.
Deo programskog koda
<?php
if(isset($_POST['reg'])) {
$username = $_POST['user'];
$password = $_POST['pass'];
echo $username," ", $password;
} else if(!isset($_POST['reg'])) {
// klik ne postoji
?>
<form action="index.php" method="POST">
username: <input type="text" name="user"> <br>
password: <input type="password" name="pass"> <br>
<input type="submit" name="reg">
</form>
<?php
}
?>
Pitanje za razmišljanje: Šta se prikazuje ako se ne klikne na dugme?
* VEŽBA - 4. deo: Malo uređivanja forme
Klik da prikažete/sakrijete četvrti video ( *** )
Postaviti naslov na vrhu, i kao drugo, postaviti link za povratak na početnu stranicu ako nije kliknuto na dugme (<a href="index.php">Povratak na početak</a>)
* VEŽBA - 5. deo: Bezbednost u radu sa formom - validacija ...
Klik da prikažete/sakrijete peti video ( *** )
cilj: "hvatanje" potencijalnih grešaka
* kreirati promenljivu greska koja ima vrednost ""
* ako nisu uneseni podaci - kako dalje
* koristimo ugrađenu funkciju empty() koje proverava ako nečega nema:
if(empty("$username"))
$greska .= "morate uneti username <br>";
* isto to uraditi za drugo polje (password)
* nakon toga:
* ako je promenljiva $greska ostala na "" ispisati username i password, a link za povratak prikazati u novom redu
*ali ako postoji grešaka:
* onda ispisati poruku o grešci
echo $greska;
Klik da prikažete/sakrijete video ( Dodatak: REQUEST metoda )
Klik da prikažete/sakrijete video ( Dodatak: Razlika izmedju SET i GET metoda )