PHP Lekcije - lekcija 1 - Rad sa formama
U svakodnevnom životu informacije dobijamo preko televizije, radija, interneta, kroz direktnu komunikaciju. Sajtovi takođe dobijaju informacije od korisnika, ali to rade na poseban način, kroz forme. Forme možemo uporediti sa anketama ili obrascima koje popunjavamo prilikom podnošenja zahteva u neku službenu instituciju. Iako je broj elemenata u formama ograničen, one omogućavaju da se od korisnika uzmu sve potrebne informacije za rad sajta.
Da bi vam ovaj čas bio korisniji, preporučujem da pročitate lekcije o HTML formama.
Pre nego što započnemo, napravimo kostur naše aplikacije, odnosno klasu koja će upravljati radom sajta.
Napravićemo folder class
i u njega staviti fajl simpleCMS.php
u kome će biti naša klasa za upravljanje sajtom. Takođe ćemo napraviti fajl index.php
koji će pokretati ovo upravljanje. Pored toga, kreiraćemo prazan folder za poruke, kao i fajl stilova style.css
. Struktura će izgledati ovako:
class/simpleCMS.php
messages/
index.php
style.css
Sadržaj fajla simpleCMS.php
je sledeći:
<?php class simpleCMS { // klasa za upravljanje public function display_public() { // metod za prikaz poruka } public function display_admin() { // metod za unos poruke } public function write($p) { // metod za upis poruke } } ?>
Za sada ćemo ostaviti metode prazne, kasnije ćemo dodavati kod.
Fajl style.css
:
*{ margin: 0; padding: 0; } body{ font: 12px "Lucida Grande", Sans-Serif; background: #ccc; } #page-wrap{ width: 500px; margin: 50px auto; padding: 20px; background: white; } h1, h2, h3{ font: 28px Georgia, Serif; border-bottom: 1px dotted #ccc; margin: 0 0 10px 0; } .clear{ clear: both; } input[type="text"], textarea{ padding: 3px; border: 1px solid #666; width: 350px; margin: 0 0 15px 0; } input[type="text"]{ font: 28px Georgia, Serif; } textarea { height: 100px; font: 12px "Lucida Grande", Sans-Serif; } label { background: #666; color: white; padding: 2px 6px; } .post{ margin: 0 0 20px 0; }
Fajl index.php
:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Učimo PHP</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <div id="page-wrap"> <?php include_once('class/simpleCMS.php'); // uključujemo fajl sa klasom $obj = new simpleCMS(); // kreiramo objekat klase za upravljanje ?> </div> </body> </html>
Hajde da objasnimo kako ovo funkcioniše. Kada se sajt učita, učitaće se fajl index.php
. Trenutno će izgledati prazno jer smo samo uključili klasu i napravili objekat. Ovaj objekat ima metode koje ćemo pozivati kada bude potrebno. Taj momenat ćemo određivati uslovima kroz if
naredbe.
Za sada se malo udaljimo od ovih fajlova i upoznajmo se sa globalnim promenljivim $_GET
i $_POST
.
Globalna promenljiva $_GET
HTML forme imaju atribut method
(može biti 'get' ili 'post'), u zavisnosti od toga, podaci iz forme se šalju i zapisuju u globalne promenljive $_GET
ili $_POST
. Evo primera:
<form action="welcome.php" method="get"> Ime: <input type="text" name="fname" /> Godine: <input type="text" name="age" /> <input type="submit" /> </form>
Kada kliknemo na dugme za slanje (submit), prebacujemo se na adresu:
http://sitename/welcome.php?fname=Peter&age=37
Ovako nastaje promenljiva $_GET
, odnosno vrednosti koje se nalaze posle upitnika:
<?php print $_GET['fname']; print $_GET['age']; ?>
$_GET
je niz vrednosti iz URL-a. Tako možemo prenositi podatke sa jedne stranice na drugu i bez korišćenja formi, na primer na adresi:
http://sitename/example.php?number=45
izvršavanjem ovog koda:
<?php print $_GET['number']; ?>
biće prikazan broj iz URL-a.
Globalna promenljiva $_POST
$_POST
se koristi slično kao $_GET
, ali za forme koje šalju podatke metodom POST. Primer:
<form action="welcome.php" method="post"> Ime: <input type="text" name="fname" /> Godine: <input type="text" name="age" /> <input type="submit" /> </form>
Posle slanja, prelazimo na:
http://sitename/welcome.php
Sada možemo da koristimo:
<?php print $_POST['fname']; print $_POST['age']; ?>
Razlika je što se $_POST
podaci ne vide u URL-u i ne mogu se dohvatiti iz URL-a, već samo kroz PHP.
Sada napravimo formu za dodavanje poruke. Dodavanje ćemo raditi sa metodom POST, a upravljanje sajtom sa metodama GET:
public function display_admin() { // metod za unos poruke $content = ''; $content .= '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">'; // $_SERVER['PHP_SELF'] vraća ime fajla koji je pozvao klasu $content .= '<label for="title">Ime:</label><br />'; $content .= '<input name="title" id="title" type="text" maxlength="150" />'; $content .= '<div class="clear"></div>'; $content .= '<label for="bodytext">Poruka:</label><br />'; $content .= '<textarea name="bodytext" id="bodytext"></textarea>'; $content .= '<div class="clear"></div>'; $content .= '<input type="submit" value="Dodaj poruku" />'; $content .= '</form>'; $content .= '<p><a href="/index.php">Nazad na početnu</a></p>'; return $content; }
Zamenite metod display_admin()
ovim kodom. Ovaj kod će se prikazati kada želimo da dodamo unos. Po defaultu treba da se prikazuju unosi. Dogovorimo se da će forma biti prikazana kada u URL postoji promenljiva admin=1
. Dakle URL je:
http://test/index.php?admin=1
Izmenimo sada index.php
:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Učimo PHP</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <div id="page-wrap"> <?php include_once('class/simpleCMS.php'); // uključujemo fajl sa klasom $obj = new simpleCMS(); // kreiramo objekat klase za upravljanje if( $_GET['admin'] == 1 ){ // ako postoji promenljiva admin u URL-u print $obj->display_admin(); // prikazujemo formu }else{ print $obj->display_public(); // ako nema promenljive, prikazujemo poruke } ?> </div> </body> </html>
Izmenimo sada metod display_public()
koji prikazuje poruke kada nema parametra:
public function display_public() { // metod za prikaz poruka $content = ''; $content .= '<p><a href="/index.php?admin=1">Dodaj poruku</a></p>'; return $content; }
Dodali smo link koji vodi na stranicu sa parametrom da bi se prikazala forma.
Ako vam prilikom učitavanja stranice izlaze čudni znakovi, napravite fajl .htaccess
(na Windows-u može biti problem, pa kopirajte postojeći i obrišite sadržaj) i ubacite u njega liniju:
AddDefaultCharset utf-8
Ovim ćete naterati server da koristi UTF-8 kodnu stranicu.
Sada imamo formu koja šalje podatke na drugu stranu. Možete proveriti da li je sve u redu ako promenite metod forme u GET:
$content .= '<form action="' . $_SERVER['PHP_SELF'] . '" method="get">';
Sada će podaci biti poslati kroz URL. Obradu ovih podataka ćemo videti u sledećem času, kada budemo radili sa fajlovima i upisivali podatke u fajlove.