PHP
Izašla knjiga PHP i MySQL
19.05.2012
Knjiga “PHP i MySQL za dinamičke veb sajtove : brzi vizuelni vodič” je nova u izdanju CET-a. Reč je o vodiču kroz svojstva i funkcije jezika PHP i MySQL. Počinje od osnova PHP programskog jezika i programiranja u njemu, a zatim prelazi na projektovanje dinamičkih veb stranica.
U knjizi se iznose osnove MySQL i SQL i prelazi se na osnove projektovanja baza podataka. Obrađuju se i naprednije komande SQL i MySQL-a, kao i obrada u rukovanju greškama. U trećem delu knjige se razmatra korišćenje PHP-a i MySQL kao i tehnike zajedničkog programiranja u cilju razvoja veb aplikacija.
Na samom kraju izlažu se neki primeri projektovanja dinamičkih veb aplikacija, a u dodatku je dat postupak instalacije potrebnog softvera.
Svi koji žele da ovladaju znanjima vezanim za PHP i MySQL i koji žele da uspešno savladaju pravljenje privlačnih i funkcionalnih dinamičkih veb sajtova, kao i da na najlakši način razviju svoje programerske veštine. Knjiga pruža mnogobrojne savete na jednom mestu, a numerisani koraci čitaoca vode kroz svaki zadatak ili problem, uz upotrebu brojnih snimaka ekrana i skriptova kojima se ilustruje svaki korak.
Ova knjiga vam donosi sve što je potrebno da znate kako biste dobili najviše od PHP-a i MySQL-a, vodi vas kroz osnovne zadatke korak po korak, pokazujući vam kako da: napravite čiste i pristupačne dinamičke veb sajtove, sa naprednim izgledom i u skladu sa standardima; razvijete programerske veštine i najbolju potrebnu praksu kako biste izradili privlačne dinamičke veb sajtove uz pomoć HTML oznaka u sprezi sa moćnim funkcijama PHP-a i MySQL-a.
PHP 5.2.3
04.06.2007
PHP/Flash
17.05.2007
Ili kako unaprediti informativnost podataka i ukupni utisak poboljšanjem dinamičkih grafikona putem Flash objekata
Primer možete videti na ovoj stranici, a alatku besplatno možete download-ovati sa ove stranice.
Bakini web kolačići
17.05.2007
Cookies – “Poslastice” koje na korisničkim mašinama čuvaju veoma vredne informacije o njihovim “gazdama”
Bakini web kolačići, tj. poznati cookie-ji predstavljaju odličnu i efikasnu alatku za beleženje i čuvanje podataka o posetiocima vaših sajtova, i to na njihovim čvrstim diskovima. Cookie-ji mogu vrlo uspešno da čuvaju vredne informacije potrebne vašim web aplikacijama, prvenstveno radi identifikacije (i praćenja) posetioca tokom povratnih poseta sajtu.
Pri tome, vrlo lako ih je kreirati i postaviti, a još lakše “iščitati”, jer se radi o običnim plain tekstualnim fajlovima. A evo i nekih preporuka kojih bi se trebalo pridržavati prilikom “eksploatacije” kolačića:
- Programski kôd koji kreira kolačiće, iz razloga efikasnosti, trebao bi biti pozicioniran na početku web stranice pre bilo kog drugog kôda.
- Cookie fajlove potrebno je smestiti u root direktorijum sajta kako bi ga mogli koristiti sa bilo koje pozicije vašeg web sajta.
Sledi programski kôd kojim kreiramo varijablu cookie:
<?
setcookie (“cookie”, “personalmag kolacic”);
//kreiranje varijable $cookie sa vrednošću “personalmag kolacic”
?>
Kreiranjem i postavljanjem ovog kôda, kada posetioc ponovo dođe na tekuću stranicu ili bilo koju drugu PHP stranicu u tekućem folderu (ili bilo kom podfolderu), postavljeni kolačić biće dostupan za “konzumiranje”. Ukoliko bi sada komandom ECHO ispisali vrednost varijable – $_COOKIE["cookie"], dobili bi nazad “personalmag kolacic”.
Nadalje, ukoliko želite da postavite expire vremenski rok kolačića, dodaćete samo još jedno polje sa količinom vremena (u sekundama) koja treba da protekne do “isteka važnosti”:
<?
setcookie (“cookie”, “personalmag kolacic”, time()+3600);
//isti kod kao prethodni, s tim da će kolačić ovaj “trajati”3600 sekundi (1 čas) u odnosu na trenutno vreme
?>
Broj kolačić-varijabli nije ograničen, tako da uvek možete postaviti više od jendog kolačića:
<?
setcookie (“cookie1″, “personalmag kolacic 1 “);
setcookie (“cookie2″, “personalmag kolacic 2 “);
setcookie (“cookie3″, “personalmag kolacic 3 “);
//kolačiće možete isčitati sa:
echo $_COOKIE["cookie1"];
echo $_COOKIE["cookie2"];
echo $_COOKIE["cookie3"];
// a ako želite da prikažete sadržaj svih varijabli
//upotrebite onda sledeću instrukciju:
print_r($_COOKIE);
?>
I konačno, kolačiće je moguće i izbrisati, ukoliko vam više nisu potrebni, upotrebom gorenavedene instrukcije setcookie, samo što ovaj put varijabli nećemo dodeliti nikakvu vrednost. Postavićemo još jednu setcookie funkciju samo sa nazivom varijable:
<?
setcookie (“cookie”);
//brisanje “kolačića”
?>
Ovo je sva osnova koja je potrebna za korišćenje kolačića na vašim web sajtovima. Na vama je kako ćete daljeiskoristiti ovu mogućnost. ![]()
Definisanje konstanti
17.05.2007
PHP u sebi, kao i svi drugi jezici, nosi nekoliko predefinisanih konstanti, a naravno obezbeđuje i mehanizam za definisanje novih konstanti tokom run-time-a
Kao što znate, iz drugih programskih jezika, konstante predstavljaju identifikatore dodeljenih vrednosti koji se ne menjaju tokom izvršavanja programa. I sam naziv konstanti je logičan, jer “promenljive” (varijable) programer može menjati, dok se vrednost konstanti ne može menjati. PHP u sebi nosi nekoliko predefinisanih konstanti, a naravno obezbeđuje i mehanizam za definisanje novih konstanti tokom run-time-a. Inače vrlo su slične varijablama, s tim što se za razliku od njih definišu uz pomoć funkcije “define()” i kasnije im ne može biti dodeljena druga vrednost.
U sledećim redovima predstavićemo vam neke od predefinisanih konstanti, koje možete koristiti u svakom trenutku:
- PHP_VERSION – konstanta koja sadrži vrednost verzije PHP parsera koja se koristi.
- PHP_OS – konstanta koja sadrži string – naziv operativnog sistema na kome se radi PHP parser. Na primer: Linux
- TRUE – vrednost true – 1.
- FALSE – vredniost false – 0.
Da bi isprobali ove konstante, kreiraćemo mali PHP skript koji će “odštampati” vrednost ovih konstanti:
<?php echo PHP_VERSION; echo TRUE; echo PHP_OS; ?>
Rezultat će zavisiti od vaše konfiguracije.
Kao što smo rekli, pored predefinisanih možemo definisati i naše korisničke konstante. Za definisanje konstanti se koristi ugrađena funkcija “define()“, čije je sintaksa sledeća:
int define (naziv_konstante, dodeljena_vrednost [, int mala_slova])
Ovom sintaksom definišemo konstante, koje su vrlo slične varijablama, osim u sledećem:
- Ispred identifikatora konstanti ne ide znak “$”.
- Konstantama možete pristupiti sa bilo kog mesta u skriptu, bez obira na oblast prostiranja.
- Kada se jednom definišu, ne mogu biti redefinisane ili nedefinisane.
Argumenti “naziv_konstante” i “dodeljena_vrednost” predstavljaju, sam naziv konstante i njenu vrednost, a argument “mala_slova” određuje osetljivost na upotrebu malih-velikih slova. Po default-u konstanta je osetljiva na upotrebu malih-velikih slova (nije isto “KONSTANTA” i “Konstanta”), a ako argumentu dodelite vrednost “1″ – onda neće biti. Za primer definisaćemo dve konstante i izvršiti ispis njihovih vrednosti:
<?php
define ("RECENICA", "Recenica koja ce se ispisati.");
echo RECENICA;
?>
Skript će rezultovati ispisom vrednost dodeljenu konstanti “RECENICA”. ![]()
Laka izmena veličine slike
17.05.2007
Po potrebi uz pomoć PHP-a možemo online promeniti veličinu slika i na taj način smanjiti potrebne rasurse za web sajt
R ecimo da imate (vi ili neko drugi) web sajt čija je svrha prodaja robe široke potrošnje. Svakako da bi ste tada morali da formirate online katalog proizvoda, a isti taj katalog bi bio upotpunjen ukoliko bi svakom artiklu pridružili sliku samog proizvoda. Shodno prethodnom, kada korisnik/posetilac lista katalog, uz svaki artikal trebalo bi mu ponuditi mali sličicu (thumbnail) koja bi mu bolje ukazivala o čemu se radi, sa mogućnošću uvećanja iste slike.
Problem nastaje kada imate veliki katalog, od recimo 5.000 artikala. To znači da morate imati 5.000 slika u originalnoj veličini i još 5.000 istih takvih ali umenjenih (tzv. thumnail-ova). Ova solucija ne samo da je donekle komplikovanija , već bi zahtevala i angažovanje mnogo većih resursa, a samim tim i veće troškove (hostinga).
Rešenje je u korišćenju samo 5000 slika u originalnoj veličini koje bi samo za potrebe listanja kataloga (thumbnails) smanjili na odgovarajuću veličinu. Recimo da su nam sve slike u katalogu veličine 500 x 300 piksela, za potrebe funkcije listanja kataloga iste te slike smanjićemo na 50 x 30 piksela.
<?php
function promena_velicine($sirina, $visina, $target) {
//uzima se širina i visina slike, pa se za utvrđivanje procenta uzima veća vrednost
if ($sirina > $visina) {
$percentage = ($target / $sirina);
} else {
$percentage = ($target / $visina);
}
//utvrđuje se nova vrednost množenjem sa procentom, i zatim se zaokružuje
$sirina = round($sirina * $percentage);
$visina = round($visina * $percentage);
//u HTML-u, unutar image taga, ispisujemo novi umanjeni format slike
return “width=\”$sirina\” height=\”$visina\”";
}
?>
Naravno, ovu funkciju možemo iskoristiti i ukoliko imamo bazu slika različitih veličina, pošto koristimo procentualno umanjenje, s tim što će nam tada i thumbnail-ovi biti različite umanjene veličine. Sve što je potrebno je da ugrađenom funkcijom getimagesize() očitamo dimenzije slike:
$slika = getimagesize(“slike/artikal001.jpg”);
Ovim smo dobili promenljivu $slika, koja je u stvari niz tačnih informacija o određenoj slici koju želimo da prikažemo. Indeks 0 (nula) – ($slika[0]) predstavlja širinu slike, a iza indeksa 1 ($slika[1]) stoji visina slike. Na kraju cela funkcija za promenu veličine izgledala bi ovako:
<?php
//preuzivanje veličine slike i “punjenje” niza
$slika = getimagesize(“slike/artikal001.jpg”);
?>
<!- standardni html image tag –>
<img src=”slike/artikal001.jpg” <?php promena_velicine($slika[0],
$slika[1], 100); ?> >
Parametar 100 određuje maksimalnu moguću veličinu visine ili širine slike koja se umanjuje. ![]()
Klase i objekti
17.05.2007

Klase su opisni elementi koji predstavljaju grupu posebnih elemenata – objekata, koji se nalaze unutar iste grupe
K lase predstavljaju opštu kategoriju u objektno-orijentisanom programiranju, koja opisuje grupu posebnih elemenata koji se nazivaju objekti i nalaze se unutar grupe. Klasa je opisni element, i u programiranju služi za definisanje skupa atributa ili skupa akcija (funkcija) koje su dostupne drugim delovima programa, a karakteristicne su za sve clanove jedne klase. Definisanje klasa u objektno-orijentisanom programiranju je vrlo slicno definisanju tipova podataka u strukturnom programiranju.
U PHP-u jedna klasa je, najjednostavnije receno, kolekcija varijabli i funkcija koje manipulišu ovim varijablama. U sledecim redovima videcemo nacin definisanja jedne klase:
<?php
class Racun {
var $stavke;
// Stavke koje se kupuju
// Dodavanje odredj. br $kom artikala na racun br. $ser_br
function dodaj_stavku ($ser_br, $kom) {
$this->stavke[$ser_br] += $kom;
}
// Skidanje odredj. br $kom artikala sa racuna br. $ser_br
function ukloni_stavku ($ser_br, $kom) {
if ($this->stavke[$ser_br] > $kom) {
$this->stavke[$ser_br] -= $kom;
return true;
} else {
return false;
}
}
}
?>
Kao što možete videti, definisali smo klasu “Racun” (kupovni racun) koja sadrži odredeni broj artikala – stavki (niz $stavke) i dve funkcije:
- dodaj_stavku() – funkcija za dodavanje odredeneog broja (kom) artikala (ser_br) na racun
- ukloni_stavku()- funkcija za skidanje, takode, odredenog broja (korisnik ne mora poništiti kupovinu svih) stavki sa racuna.
Pošto smo rekli da su klase kao tipovi podataka, da bi ih upotrebili u programiranju, potrebno je da deklarišemo varijable na osnovu klase:
$racun = new Racun;
$racun->dodaj_stavku("10", 1);
Ovaj kod ce kreirati objekat $racun koji pripada klasi Racun. Zatim smo funkcijom “dodaj_stavku()”, na racun dodali 1 komad artikla sa serijskim brojem 10.
Klase inace mogu biti proširenja drugih klasa. Pri tome, proširena klasa ima sve varijable i funkcije osnovne klase (kroz tzv. nasledivanje) i može da ima dodatne sopstvene varijable i funkcije. Da naglasimo i to da višestruko nasledivanje nije podržano. Evo primera proširivanja prethodno definisane klase Racun:
class Kupovni_Racun extends Racun {
var $kupac;
function unos_kupca ($ime) {
$this->kupac = $ime;
}
}
Ovim smo definisali novu klasu – Kupovni_Racun, koja ima sve varijable i funkcije kao i klasa Racun, kao i dodatnu varijablu $kupaci funkciju unos_kupca(). ![]()
Unos podataka u MySQL bazu
17.05.2007
U ovom prilogu predstavljamo vam kako iskoristiti baze podataka, ali ovaj put za upis postojeće tabele i čuvanje podataka bitnih za web aplikacije
N akon upoznavanja sa načinima pristupa bazama podataka koje se nalaze na MySQL serveru, i iščitavanja i prikazivanja tih podataka u browser-u, predstavićemo vam kako iskoristiti iste baze podataka, ali ovaj put za upis postojeće tabele.
Za potrebe primera, pretpostavićemo da imamo bazu podataka “mojaBaza” i tabelu “Proizvod” u njoj, sa poljima [id], [naziv], [tip] i [količina].
Za početak, da bi uopšte nešto upisali u bazu podataka mora prethodno te podatke preuzeti od korisnika i zatim ih proslediti odgovarajućoj PHP skripti. Zato je potrebno da prvo kreiramo HTML formular koji će služiti za unos traženih podataka. Formular može da izgleda npr. ovako:
<HTML>
<HEAD>
<TITLE> Formular unosa u magacin</TITLE>
</HEAD>
<BODY BGCOLOR=”#FFFFFF”>
<center>
<FORM METHOD=POST ACTION=”dodaj.php“>
<input type=”hidden” name=”id” value=”NULL“>
<TABLE border=”0″ cellpadding=”0″ cellspacing=”0″>
<TR height=”20″>
<TD colspan=”3″>Unos u magacin</TD>
</TR>
<TR>
<TD>Naziv proizvoda</td>
<TD> <input name=”naziv” type=”text“> </TD>
</TR>
<TR>
<TD >Tip proizvoda</td>
<td> <input name=”tip” type=”text” > </TD>
</TR>
<TR >
<TD >Količina</td>
<td> <INPUT NAME=”kolicina” TYPE=”text“> </TD>
</TR>
<tr>
<td><center>
<input name=”submit” type=”submit” value=”Unesi“>
</td>
</tr>
</TABLE>
</FORM></BODY></HTML>
Kao što možete videti na slici, imamo tri ulazna INPUT polja koja služe za unos jednog novog sloga u tabelu [Proizvod]. Pritiskom na dugme [Unesi], metodom POST podaci se šalju skripti “dodaj.php” na obradu. Stranica “dodaj.php” će imati sledeći kod:
<?
$DBhost = “naziv_servera”;
$DBuser = “kor_ime”;
$DBpass = “lozinka”;
$DBName = “mojaBaza”;
$table = “Proizvodi”;
$connection = mysql_connect (“naziv_servera”, “kor_ime”, “lozinka”)
or die(“Povezivanje nije moguce.”);
$sqlquery = “INSERT INTO $table
VALUES(‘$id’, ‘$tip’, ‘$naziv’,'$kolicina’)”;
$results = mysql_query($sqlquery);
mysql_close();
print ” <HTML> <TITLE> Unos u bazu podataka </TITLE> <BODYBGCOLOR=\”#FFFFFF\”> <center>
<table border=\”0\”width=\”500\”><tr><td>”;
print “<p> <center>Upravo ste u bazu uneli sledeće podatke <p><blockquote>”;
print ” Naziv proizvoda: $naziv
<p>Tip proizvoda: $tip
<p>Količina: $kolicina
</blockquote></td></tr>
</table>
</center></BODY></HTML>”;
?>
Na početki koda inicijalizujemo varijable koje se koriste u skripti, a zatim se konecionom varijablom $connection spajamo na bazu i odgovarajuću tabelu. Jednostavno, umesto ovih gore navedenih (naziv_servera, kor_ime, lozinka…), unesite sostvene vrednosti varijabli. Zatim dolazi ona ljučna linija PHP koda, a to je SQL naredba kojom u tabelu [Proizvodi] unosimo novi slog sa vrednostima prenetim iz formulara.
Prvo kreiramo sam SQL upit koji smeštamo u $sqlquery varijablu i zatim tu varijablu prosleđujemo ugrađenoj funkciji mysql_query. Zapazite još i polje [id], odnosno varijablu. Ovo polje u tabeli je AUTO_INCREMENT polje, tako da tu ne moramo imati nikakav ulaz, tj. za njega se brine sam MySQL sistem (uvećava vrednost u svakom novom slogu za korak 1). I to je to, ostaje na vama da isprobate ovaj primera, i da ga kasnije primenite u sopstvene aplikacije. ![]()
Kontrolna struktura “switch”
17.05.2007
Instrukciju “Switch” ćemo upotrebiti u situacijama kada imamo kaskadnu serijeu “If” naredbi
Instrukcija “switch” je slična seriji “IF” naredbi koje se nalaze u istom izrazu. U mnogo situacija, trebaćete da npr. upoređujete istu varijablu (ili ceo izraz) sa više različitih vrednosti, i pri tome da u zavisnosti od jednakosti ove dve vrednosti izvršite određeni (različit) programski kod. Ova naredba je ekvivalentna naredbi “Select … Case”, Visual Basic-a. U naredna dva primera videćete dva načina za rešavanje istog problema, prvi način koristi seriju “If” instrukcija, a drugi način naredbu “Switch”:
<?php
if ($a == 0) {
print "a je jednako 0";
}
if ($a == 1) {
print "a je jednako 1";
}
if ($a == 2) {
print "a je jednako 2";
}
switch ($a) {
case 0:
print "a je jednako 0";
break;
case 1:
print "a je jednako 1";
break;
case 2:
print "a je jednako 2";
break;
}
?>
Jako je bitno da razumete način na koji se ova naredba izvršava, jer ćete inače načiniti greške. Naredba “switch” se izvršava liniju po liniju (zapravo, naredbu po naredbu). U prvom trenutku ne izvršava se nijedna naredba. Tek kada PHP parser utvrdi koja PHP vrednost u CASE izrazu odgovara vrednosti SWITCH izraza, tada počinje da se izvršava programski kod. PHP izvršava instrukcije do kraja “switch” bloka, ili do “brake” naredbe. Pazite, ukoliko ne napišete naredbu “Brake” na kraju svakog “Case” bloka, PHP će nastavljati da izvršava sve naredne “Case” blokove. Pogledajte sledeći primer:
<?php
switch ($a) {
case 0:
case 1:
case 2:
print "a je manje od 3, ali nije negativno";
break;
case 3:
print "a je 3";
}
?>
Ukoliko je varijabla $a jednaka nuli (0), PHP će izvršiti sve naredbe za ispis (print)! Ako je vrednost varijable jedan (1), PHP će izvršiti obe, donje naredbe za ispis. Tek ako je vrednost varijable dva (2), imaćemo “očekivano” ponašanje ove strukture i ispisaće se samo “a je manje od 3, ali nije negativno“, jer iza ove naredbe sledi naredba prekida – “brake”. Ovo znači da obavezno morate koristiti naredbu prekida.
Kod naredbe “switch” uslov se proverava samo jedanput, a rezultat se upoređuje sa svakom “Case” instancom. Naredba “switch” je bolje rešenje od višestrukih “If … else if” naredbi, jer se brže izvršava (zato što se uslov višestruko proverava). Specijalan slučaj Case izraza predstavlja “podrazumevana” Case naredba, čiji se programski kod izvršava ukoliko nije zadovoljena nijedna prethodna Case instanca. Evo i primera:
<?php
switch ($a) {
case 0:
print "a je 0";
break;
case 1:
print "a je 1";
break;
case 2:
print "a je 2";
break;
default:
print "a nije ni 0, ni 1, ni 2";
}
?>
![]()
Validacija e-mail adresa i verifikacija domena
17.05.2007
Pre nego što prihvatite neku e-mail adresu i prosledite je nekoj web aplikaciji ili bazi podataka, bilo bi dobro da proverite da li je uneta adresa uopšte smislena
Predstavljamo vam laku, brzu i nadasve efikasnu funkciju za validaciju (proveru) e-mail adresa koje se inače prihvataju sa raznih formulara. Preporučljivo je da, ako je moguće, izvršite validaciju svih polja formulara, jer će te na taj način smanjiti zagušenje na serveru i ubrzati komunikaciju sa korisnicima.
Evo i kako bi mogla da izgleda osnovna funkcija koja će proveriti validnost e-mail adrese, odnosno da li je sintaksno pravilno uneta:
<?
function provera_emaila($adresa) {
$uslov1 = (ereg(‘^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+’.
‘@’.
‘[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.’.
‘[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$’,
$adresa));
$uslov2 = (preg_match(‘/.+\.\w\w+$/’,$adresa));
return ($uslov1 && $uslov2);
}
?>
Kao što možete videti, prvo korišćenjem sistemske funkcije ereg() proveravamo da li specijalni karakteri nalaze unutar unete string-varijable. Ova funkcija vraća True ili False u zavisnosti rezultata pretrage. Nakon toga proveravamo ispravnost unetog domena e-mail adrese, na taj način što se proverava sadržavanje najmanje 1 tačke “.” unutar naziva domena. Upotrebljene sistemske funkcije su sastavni deo PHP 3 i 4. Takođe, važno je napomenuti da unutar naziva domena može biti i više tačaka, npr. ‘ftn.ns.ac.yu‘, [to proveravamo drugom funkcijom preg_match().
I na kraju, ukoliko su zadovoljena oba uslova ($r1 && $r2), funkcija provera_emaila vraća istinosnu vrednost – True, i e-mail adresa može dalje da se procesira. ![]()


