PHP

Internet programiranje
PHP
Uvod



HTML i JavaScript se izvršavaju na
klijentskoj strani, odnosno na korisničkom
računaru
PHP je jedan od programskih jezika za
izradu dinamičkih veb strana koji se
izvršava na serverskoj strani
PHP može da memoriše podatke i koristi
ih u kasnijem trenutku
Istorija




1995 - PHP (Personal Home Page) jezik
je započeo Rasmus Lerdorf za potrebe
lične veb strane 1995.
1999 - Zeev Suraski i Andi Gutmans su
dalje razvili PHP 3 (PHP Hypertext
Preprocessor) i Zend kompajler kao
osnovu za PHP 4.
2004 - PHP 5 uključuje i objektno
programiranje.
Trenutno se radi na PHP 7
Alternative PHP-u

Alternative







Python
Perl
ASP – Active Server Pages
JSP – Java Server Pages
LAMP – Linux Apache MySQL PHP (Python,
Perl)
WAMP – Windows Apache MySQL PHP
(Python, Perl)
XAMPP – Cross-Platform Apache MySQL
PHP Perl
Popularnost




Na tržištu više od 50% veb servera su
tipa Apache
Najpopularniji programski jezik za
dinamičko programiranje veb strana na
serverima Apache je PHP
PHP je uopšte jedan od najpopularnijih
programskih jezika
PHP koriste wikipedia.org, yahoo.com,
facebook.com itd.
Popularnost (github.com)
Reference





Nije standard
www.php.net
Jason Gilmore, Beginning PHP and
MySQL: From Novice to Professional,
Third Edition (Beginning from Novice to
Professional), Apress, March 2008.
Luke Welling, and Laura Thomson
PHP and MySQL Web Development (4th
Edition) (Developer's Library), AddisonWesley Professional, October 2008.
www uopšte
Instalacija WAMP servera
WAMP server se može naći na:
http://www.wampserver.com/en/
 Instalacija je jednostavna.
 Pre instalacije idite na skype > tools >
options > advanced > connection i
isključite port 80. Zatim zatvorite
Skype.
 Kada je WAMP instaliran, možete
otvoriti Skype.

Konfiguracija servera
Konfiguracija Apache servera se
obavlja u okviru fajla:
wamp\bin\apache\apache2.2.22\conf\
httpd.conf
 Konfiguracija PHP kompajlera se
obavlja u okviru fajla
wamp\bin\php\php5.4.3\php.ini
 Kada se promeni konfiguracija, klikne
se na Wamp ikonicu, pa na Restart

Konfiguracija servera
Osobine
Platformski neutralan
 Sličan C-u od koga je nastao
 Integrisanost sa (X)HTML-om
 Nestruktuiran i nekonzistentan

Generalije
Komande se završavaju ;
 Ključne reči (komande), imena
funkcija i klasa nisu osetljiva na
veličinu slova (case insensitive), dok
imena promenljivih jesu. Npr.
promenljiva $txt se razlikuje od
promenljive $TXT, dok su funkcije
sort i SORT iste.

Za šta se koristi PHP?
Omogućava dinamički HTML sadržaj
 Vrši obrade na serveru, npr.
prikuplja statistike o posećenosti
 Obrađuje podatke iz formulara
 Povezuje korisnike sa bazama
podataka na serveru
 Implementira autentifikaciju i zaštitu
komunikacije

1. Osnove PHP-a
Tag
 Komentari
 Prikaz
 Promenljive i njihovi tipovi
 Operatori
 Funkcije
 Objekti

Izvršavanje koda
U okviru HTML koda:
<script type=“php">
...PHP kod…
</script>
 Ili u eksternom fajlu:
<script type=“php" src="phpkod.php">
</script>
 Ali češće se koristi uprošćena sintaksa
<?php ...PHP kod…?>
 odnosno
<?php include(“phpkod.php”) ?>

Direktorijum php fajlova
U konfiguracionom fajlu Apache servera,
httpd.conf, se određuje glavni direktorijum u
kome su php fajlovi.
 Kada je instaliran WAMP, onda je defolt
direktorijum sledeći
DocumentRoot "C:/wamp/www“
 To znači da su fajlovi u direktorijumu:
C:\wamp\www
 Drugi direktorijumi mogu da se odrede ili
relativno u odnosu na defolt direktorijum ili
pomoću aliasa, npr:
Alias /slike /ftp/pub/slike

Direktorijum php fajlova
U konfiguracionom fajlu Apache servera,
httpd.conf, se određuje glavni direktorijum u
kome su php fajlovi.
 Kada su Apache, php, i MySQL baza posebno
konfigurisani: U fajlu httpd Apache servera je
određen defolt direktorijum za dokumente
sledećom naredbom:
DocumentRoot "C:/Program Files/Apache Software
Foundation/Apache2.2/htdocs“
 To znači da su fajlovi u direktorijumu:
C:\Program Files\Apache Software
Foundation\Apache2.2\htdocs

XHTML fajlovi sa php
kodom
Ako želimo da koristimo php kod u fajlu sa
.html ekstenzijom, u httpd fajlu Apache
servera treba ubaciti liniju
(wamp\bin\apache\apache2.2.22\conf\
httpd.conf)
AddType application/x-httpd-php .html
Pozivanje php ili html
fajlova
Pomoću URL adrese
localhost/proba/proba.php
 Fajl proba.php je u direktorijumu
wamp\www\proba

Komentari
Za komentar jedne linije - oznaka // ili
#:
// komentar u jednoj liniji ...

Za komentar više redova - /* za
početak bloka pod komentarom i */ za
kraj bloka pod komentarom:
/*
Komentar u više redova...
Drugi red komentara…
*/

Prikaz – echo, print
Primer:
<?php
echo “<b>Prvi red</b><br /><i>Drugi red</i>”;
?>
 Ili:
<?php
echo “<b>Prvi red</b><br />”,”<i>Drugi
red</i>”; ?>
 Rezultat oba primera:
Prvi red
Drugi red

Mogućnosti umetanja PHP
koda
Može:
<?php
if ($expression) {
?>
<strong>This is true.</strong>
<?php
} else {
?>
<strong>This is false.</strong>
<?php
}?>
 Preporučivo:
<?php
if ($expression) {
echo “<strong>This is true.</strong>”;}
else {
echo “<strong>This is false.</strong>”;
} ?>

Promenljive

Sadrže vrednosti koje program smešta u
okviru memorije računara

Promenljivoj se dodeljuje:


željeno ime

vrednost
Tip promenljive ne mora da se specificira,
određuje ga vrednost promenljive
Imena promenljivih

Sve promenljive počinju sa $

Drugi znak je slovo ili _
Tipovi podataka

Skalarni





Složeni



boolean – logički tip
integer – celobrojni tip
float – racionalni tip
string – znakovni niz
array - niz
object - objekat
Specijalni


resource - resurs
Null - ništa
Skalarni tipovi podataka
Logički tip uzima vrednosti TRUE ili FALSE
 Celobrojni tip može biti decimalni, oktalni
(počinje sa 0) ili heksadecimalni (počinje
sa 0x). Max vrednost zavisi od sistema a
može da se odredi konstantnom
PHP_INT_MAX
 Racionalni tip ima razne oblike, npr.
<?php
$a = 1.234; $b = 1.2e3; $c = 7E-10;
?>

Znakovni niz - string
Mogu biti pod apostrofima (‘ab’) ili navodnicima (“ab”)
 Kada se koriste apostrofi navodnici se koriste za navodnike u
tekstu i obrnuto. Apostrof unutar apostrofa \’, slično za navodnike.
 Za duži tekst pod navodnicima, može se koristiti <<< sa nekom
promenljivom koja razgraničava tekst (nema razmaka posle EOT):
$s=<<<EOT
Text
EOT;
 Za duži tekst pod apostrofima
$s=<<<‘EOD’
Text
EOD;
 Primer:
echo <<<EOT
Primer “dužeg” znakovnog niza koji može zauzimati i “veliki broj
redova” i ‘puno’ navodnika itd.
EOT;

String - primeri
Primer:
<?php $foo = "foobar";$a=2;
echo ‘foo je $foo <br />’;
echo “foo je $foo <br />”;
echo ‘a je $a <br />’;
echo “a je $a <br />”; ?>
 Rezultat:
foo je $foo
foo je foobar
a je $a
a je 2

Niz - array
Sintaksa definisanja niza
ImeNiza=array([indeks1=>]vrednost1, …)
 Indeksi mogu biti celi brojevi ili stringovi. Indeksi koji nisu
specificirani uzimaju vrednosti redom 0,1,2,...
 Primer
<?php
$niz=array("Aleks" => "9", "Sanja" =>8 , "Mirko"
=>6);
echo $niz['Aleks'], "<br />";
echo “{$niz['Aleks']} <br />";
echo $niz["Sanja"];
?>
 Rezultat:
9
9
8

Multidimenzionalni nizovi
Primer:
$familije=array
(“Simić”=>
array(“Branka”,”Dejan”),
”Brusin”=>
array(“Mića”,”Maja”,”Marija”));

Objekat - object
Objekti su slični kao kod JavaScripta, ali se sintaksa razlikuje
 Objekti se definišu klasama kojima
pripadaju
 Klase imaju definisane atribute i
metode
 Promenljive objekti se dobijaju
instanciranjem klase

Resurs - resource




Promenljive tipa resurs su pokazivači na
složene eksterne promenljive
Primer su pokazivač na otvoren fajl ili na
vezu sa bazom podataka
Promenljive tipa resurs se generišu
različitim funkcijama u zavisnosti od
primene
Kompajler automatski briše promenljive
tipa resurs koje ne pokazuju na neki
resurs
NULL vrednost

Vrednost NULL je




tip podataka/vrednost koja se može dodeliti
promenljivoj
Pokazuje da promenljiva ne sadrži nikakvu
korisnu vrednost
Promenljiva sa vrednošću NULL ima takvu
dodeljenu vrednost
Vrednost “null” se dodeljuje promenljivoj kada
se želi definisati da promenljiva ne sadrži
nikakav podatak
Operatori
Aritmetički
 Na nivou bita
 Relacioni
 Logički

Aritmetički operatori
Operator
Opis
Operator
Opis
+
sabiranje
+=
sabiranje
dodela
-
oduzimanje
-=
oduzimanje
dodela
*
množenje
*=
množenje
dodela
/
deljenje
/=
deljenje
dodela
%
moduo
%=
Moduo
dodela
++
inkrement
--
dekrement
Aritmetički operatori
$a = 1 + 1;
$b = $a * 3;
$c = $b / 4;
$d = $b – $a;
$e = -$d;
$f = ($g = 4) + 5;
echo “a, b, c, d, e, f, g su” , “ ”,$a,
“ ” ,$b, “ ”,$c, “ ”,$d, “ ”,$e, “ ”, $f, “ ”,$g;
 Nakon izvršavanja prethodnog primera dobija
se sledeći tekst na ekranu:
a, b, c, d, e, su 2 6 1.5 4 -4 9 4
Na nivou bita
Operator
Upotreba
Opis
Logičko I (&)
$a & $b
Rezultatni bit je 1, jedino ako su oba bita 1 u ostalim
slučajevima rezultat je 0.
Logičko ILI (|)
$a | $b
Rezultatni bit je 0, jedino ako su oba bita 0 u ostalim
slučajevima rezultat je 1.
Logičko eksluzivno
ILI (^)
$a ^ $b
Rezultatni bit je 1, ako biti imaju različite vrednosti, u
suprotnom je 0.
Logičko NE (~)
~ $a
Komplementira bitove operanda a.
Pomeranje ulevo
$a << $b
Pomera binarni sadržaj operanda za $b mesta ulevo. Prazna
mesta popunjava sa vrednošću 0.
Pomeranje udesno
sa znakom
$a >> $b
Pomera binarni sadržaj operanda za $b mesta udesno. Prazna
mesta popunjava sa vrednošću najstarijeg bita.
Na nivou bita
 15
& 9 rezultat 9 (1111 & 1001
= 1001)
 15 | 9 rezultat 15 (1111 | 1001
= 1111)
 15 ^ 9 rezultat 6 (1111 ^ 1001
= 0110)
Logički operatori
Operato
r
Upotreba
Opis
I (&& ili
and)
expr1 && expr2
Rezultat je true, jedino ako su oba operanda true, u
ostalim slučajevima rezultat je false.
ILI (|| ili
or)
expr1 || expr2
Rezultat se dobija false, jedino ako su oba operanda
false, u ostalim slučajevima rezultat je true.
NE (!)
!expr
Rezultat se dobija komplement od vrednosti
operanada. Ako je operand true, rezultat je false,
ako je operand false, rezultat je true
ILI (xor)
expr1 xor expr2
Rezultat je true, ako su operandi različiti, i obrnuto,
rezultat je false, ako su operandi isti
Logički
$a = true;
$b = false;
$c = $a || $b;
$d = $a && $b;
$f = (!$a && $b) || ($a && !$b);
$g = !$a;
echo " a = ", $a, " <br /> " ;
echo " b = ", $b , "<br />" ;
echo " c = ", $c , "<br />" ;
echo " d = " , $d , "<br />" ;
echo " f = " , $f , "<br />" ;
echo " g = " , $g;

Rezultat izvršavanja prethodnog primera je:
a=1
b=
c=1
d=
f=1
g=
Operatori poređenja
Operator
Upotreba
Opis
Jednakost (==)
Rezultat je true ako su operandi
jednaki
$x == $y rezultat je true ako su $x i
$y jednaki.
Nejednakost (!= ili
<>)
Rezultat je true ako su operandi
različiti.
$x ! = $y rezultat je true ako su $x i
$y različiti.
Veće (>)
Rezultat je true ako je levi operand
veći od desnog operanda.
$x > $y ako je $x veće od $y.
Veće ili jednako
(>=)
Rezultat je true ako je levi operand
veći ili jednak desnom operandu
$x >= $y ako je $x veće ili jednako
$y.
Manje (<)
Rezultat je true ako je levi operand
manji od desnog operanda
$x < $y rezultat je true ako je $x
manje od $y.
Manje ili jednako
(<=)
Rezultat je true ako je levi operand
manji ili jednak desnom
operandu
$x <= $y rezultat je true ako je $x
manje ili jednako $y.
Jednako bez
konverzije
tipova (===)
Rezultat je true ako su operandi
jednaki bez konverzije podataka
$x === $y rezultat je true ako su
$x i $y jednaki bez konverzije
podataka
Različito bez
konverzije
tipova (!==)
Rezultat je true ako su operandi
različiti bez konverzije podataka
$x !== $y rezultat je true ako su $x
i $y različiti bez konverzije
podataka
Operatori poređenja
$a = 4;
$b = 1;
$c = $a < $b;
$d = $a == $b;
echo “ c = “, $c, “<br />“ ;
echo “ d = “, $d ;
 Rezultat izvršavanja prethodnog primera
je
c=
d=
String operator .
Pomoću string operatora . spajaju se
dva stringa
 Primer
$a=‘Aleksandra’; $b=‘Smiljanić’;
$c=$a. ‘ ‘ . $b;
$a.=‘ S’;
echo $a, ‘<br />’, $c;
 Rezultat
Aleksandra S
Aleksandra Smiljanić

Operator nizova +
Pomoću string operatora + spajaju se
dva niza
 Primer
$a=array(0=>1,1=>2,2=>3);
$b=array(3=>4,4=>5);
$c=$a+$b;
echo $c[0],$c[1],$c[3],$c[4];
 Rezultat
1245

Operator greške @
Pre izraza (funkcija,promenljivih
itd.) može se postaviti operator
greške @
 Uloga ovog operatora je da ignoriše
greške koje mogu da nastanu pri
izračunavanju izraza (uključujući i
izvršavanje funkcije itd.)

Operator za izvršni kod



Naredba između dva akcenta `` izvršava
naredbe operativnog sistema (npr.
kreiranje direktorijuma, listanje
direktorijuma itd.)
Funkcioniše kada Apache nije u “Safe
mode” i kada funkcija shell_exec nije
isključena
“Safe mode” se uključuje a shell_exec
isključuje u fajlu php.ini, zatim se
Apache restartuje.
Operator za izvršni kod:
primer
Primer
<?php
$output = `dir`;
echo "<pre>$output</pre>";
?>

Rezultat
Volume in drive C has no label.
Volume Serial Number is E82B-743B

Directory of C:\Program Files\Apache Software Foundation\Apache2.2\htdocs
04/24/2009 00:36
.
04/24/2009 00:36
..
11/20/2004 14:16 44 index.html
04/19/2009 22:51 21 phpinfo.php
04/24/2009 13:28 58 phpproba.php
3 File(s) 123 bytes
2 Dir(s) 78.881.165.312 bytes free
Operator za izvršni kod:
primer
Primer
<?php
$new_dir = "Bob";
`mkdir $new_dir`
?>
 Rezultat: otvoren je novi folder u
okviru foldera gde je PHP fajl koji ga
kreira

Funkcije




Funkcije predstavljaju grupu naredbi
koja se može izvršiti kao pojedinačna
jedinica
Funkcije su korisne jer čine program
preglednijim i lakšim za ažuriranje
Kao i bilo koji drugi PHP kod, funkcije
se moraju definisati u okviru <?php
… ?> elementa
Funkcija se sastoji iz deklaracije
funkcije i njenog poziva
Deklaracija funkcija
Sintaksa za definisanje funkcije je :
function imeFunkcije(parametri) {
naredbe;
}

Pozivanje funkcije

Da bi se izvršila funkcija potrebno ju je
pozvati sa određenog mesta u okviru
programa

Funkcija se poziva njenim imenom i
specifikacijom argumenata u okviru
zagrada

Vrednosti argumenata se prosleđuju
odgovarajućim parametrima funkcije u
skladu sa deklaracijom funkcije
Mogućnosti
Funkcija može biti pozvana
rekurzivno
 Funkcija može biti definisana
uslovno ili unutar druge funkcije, i
onda je deklarisana samo ako je
uslov ispunjen odnosno kada je ta
druga funkcija pozvana

Naredba return



Služi da bi se vratio rezultat funkcije
pozvanoj naredbi
Dodeljuje pozvanoj naredbi vrednost
određenog izraza
Tip može biti proizvoljan
return 8;
return $p*$m;
Opseg važenja promenljive

Prema opsegu važenja promenljive se dele na
superglobalne, globalne ili lokalne

Superglobalne promenljive su ugrađene u PHP i
važe u bilo kom programu i funkciji

Globalne promenljive se deklarišu izvan
funkcije, i može im se pristupiti iz bilo kog dela
programa

Lokalne promenljive se deklarišu u okviru
funkcije i jedino su dostupne u okviru funkcije
u kojoj su deklarisane

Parametri su takođe lokalne promenljive
Primer lokalne promenljive
<!DOCTYPE html>
<html>
<body>
<?php
$x=5; // globalna
function mojTest()
{
$x=1;
echo $x; // lokalna
}
mojTest();
?>
</body>
</html>
Primer globalne promenljive
<?php
$x=5; // globalna
$y=10; // globalna
function mojTest()
{
global $x,$y;
$y=$x+$y;
}
mojTest();
echo $y; // izbacuje 15
?>
Argumenti funkcije
Argumenti funkcije su izrazi koji su razdvojeni
zarezom
 Promenljiva, argument, može biti prosleđena
direktno $a ili preko reference &$a. U drugom
slučaju može da se menja vrednost argumenta.
 Promenljivim, argumentima, se može dodeliti
defolt vrednost. Primer:
function birajKafu($tip = “kapućino")
{
return “Izabran je $tip.";
}
birajKafu(“espreso”);birajKafu();

Ugrađene funkcije



Postoji veliki broj funkcija koje su ili ugrađene
po defoltu ili se uključuju kroz ekstenzije i
dodatne biblioteke u PHP
Kategorizacija funkcija i potrebne ekstenzije se
mogu naći na veb strani
http://www.php.net/manual/en/funcref.php
Spisak svih funkcija se mogu naći na veb
strani:
http://www.php.net/manual/en/indexes.php
Promenljive funkcije
Primer
<?php
function fu() {
echo “Ovo je fu()<br />";}
function bar($arg = ''){
echo “Ovo je bar();
argument je bio '$arg'.<br />";}
$funk = 'fu';
$funk();
$funk = 'bar';
$funk('test'); ?>
 Rezultat
Ovo je fu()
Ovo je bar(); argument je bio 'test'.

Primer
Primer deklaracije funkcije:
function calculate($a,$b,$c) {
$d = ($a+$b) * $c;
return $d;
}
 Primer poziva funkcije:
$x = calculate(4,5,9);
echo "x je ", $x, "<br />“;
$y = calculate(($x/3),3,5);
echo "y je ", $y;
 Rezultat primera:
x je 81
y je 150

Objekti





PHP podržava objekte kao strukturu
podataka
Objekti se definišu pomoću funkcija
Za svaki objekat su vezane osobine i
metode
Osobine su promenljive kojima se dodaju
određene vrednosti
Metode su funkcije u okviru objekata
kojima mogu da se menjaju njihove
osobine
Kreiranje klase i instance
objekta
Klasa objekta ili prototip se definiše klasom čija
je sintaksa
class mojObjekat {
[[deklaracijaOsobine1] osobina1;]
[[deklaracijaOsobine2] osobina2;…]
[[deklaracijaMetode1] metoda1;]
[[deklaracijaMetode2] metoda2;…]}
 Instanca objekta se definiše pomoću naredbe
new
mojaInstanca=new mojObjekat
 Osobine klase mogu biti naknadno definisane

Deklaracije osobine

Deklaracija osobine može biti
public – može se menjati sa bilo kog
mesta direktno
 private – može se menjati samo
pomoću metode objekta
 protected – nepoznata je van objekta
 final – ne može se menjati u klasama
naslednicima

Deklaracije metode

Deklaracija metode može biti





public – može se koristiti van klase
pozivanjem metode instance
private – rezultati metoda se koriste samo u
okviru objekta
protected – rezultati metoda se koriste samo
u okviru objekta ili nekog naslednika
abstract – samo deklarisana u roditeljskoj
klasi
final – ne može se menjati u klasama
naslednicima
Rad sa osobinama objekata
Vrednost osobine instance objekta
se može koristiti na sledeći način:
imePromenljive=mojaInstanca->
Osobina1;
 Vrednost osobine instance objekta
se može promeniti ili naknadno
definisati ukoliko nije bila ranije:
mojaInstanca->Osobina1=vrednost1;

Kreiranje objekta sa
metodom
Primer metoda objekta:
class mojKrug
{public $xkord;
public $ykord;
public $poluprecnik;
public function _construct ($a,$b,$c){
$this->xkord=$a;$this->ykord=$b;$this->poluprecnik=$c;}
public function izrPovrsinu() {
return ( M_PI * $this->poluprecnik * $this->poluprecnik);}
public function izrObim() {
return ( M_PI * $this->poluprecnik * 2 ); }
public function pomeriZa($xDis,$yDis) {
$this->xkord += $xDis; $this->ykord += $yDis; }

Korišćenje metoda
Primer korišćenja metoda iz prethodnog primera:
var $primerKruga = new mojKrug(3,4,5);
$primerKruga->pomeriZa(2,3);
echo “Površina kruga je ”,
$primerKruga->izrPovrsinu();
echo “<br />Obim kruga je ”,
$primerKruga->izrObim();
 Rezultat prethodnih komandi je:
Površina kruga je 78.5398163397
Obim kruga je 31.4159265359

Pozivanje konstanti
Ne mora se instancirati objekat da bi se
pozvala konstanta njegove klase
 Primer
<?php
class Math {
const pi = 3.14159;
}
echo " Math::pi =”, Math::pi;
?>

Pozivanje statičkih osobina i
metoda
Statičke osobine i metode se takođe mogu zvati bez instanciranja objekta

Primer
<?php
class Poseta{
private static $posetioci = 0;
function __construct(){
self::$posetioci++;}
static function izbrojPosetioce(){
return self::$posetioci;}}
$posete = new Poseta();
echo Poseta::izbrojPosetioce()."<br />";
$posete2 = new Poseta();
echo Poseta::izbrojPosetioce()."<br />";
echo $posete -> izbrojPosetioce();
?>

Rezultat primera:
1
2
2

Nasleđivanje između klasa
Primer:
<?php
class SimpleClass
{ public $var = 'a default value';
public function displayVar() {
echo $this->var;}
}
class ExtendClass extends SimpleClass
{
public function displayVar()
{echo "Extending class <br />";
parent::displayVar();
}
}
$extended = new ExtendClass();
$extended->displayVar();
?>

Rezultat:
Extending class
a default value

2. Kontrola toka




Ternarni operator
Naredba if-else
Naredba switch
Petlje



Izlazi iz blokova




for petlja
while petlja
break
continue
goto
Naredbe include, require
Ternarni operator
Sintaksa:
logIzraz ? izraz1 : izraz2
 gde je izraz log_izraz bilo koji izraz čiji
rezultat je vrednost logičkog tipa. Ako je
rezultat izraza true, onda se izvršava
izraz1, u suprotnom izraz2.
 Primer:
$kolicnik = $imenioc ==0 ? 0 :
$brojioc/$imenioc

Kontrole toka - if
Sintaksa:
if (logIzraz) {naredbe1;}
[else {naredbe2;}]

Primer:
if ($x == 8) {

else {
}
}
$y=$x;
$z=$x;
$y=$y*$x;
Kontrola toka - if
Još jedan primer:
if ($mesec == 1)
$ime_meseca = “Januar”;
else if ($mesec == 2)
$ime_meseca = “Februar”;
else if ($mesec == 3)
$ime_meseca = “Mart”;
else if ($mesec == 4)
$ime_meseca = “Maj”;
else
....
else if ($mesec == 12)
$ime_meseca = “Decembar”;

Kontrola toka - switch
Sintaksa
switch (izraz) {
case vr1: naredbe1; [break;]
...
case vrN: naredbeN; [break;]
[default: naredbeDef;]
}

Kontrola toka - switch
Primer:
switch($mesec) {
case 1: $ime_meseca = “Januar”; break;
case 3: $ime_meseca = “ Mart”; break;
case 5: $ime_meseca = “Maj”; break;
case 7: $ime_meseca = “Jul”; break;
case 8: $ime_meseca = “Avgust”; break;
case 10: $ime_meseca = “Oktobar”; break;
case 12: $ime_meseca = “Decembar”; break;
case 4: $ime_meseca = “ April ”; break;
case 6: $ime_meseca = “Jun”; break;
case 9: $ime_meseca = “Septembar”; break;
case 11: $ime_meseca = “Novembar”; break;
case 2: $ime_meseca = “ Februar ”;
}

Petlje - while
Sintaksa:
[inicijalizacija;]
while(logIzraz){
naredbe;
}


Primer:
$i=1;
while($i<=10){
echo $i, "<br />";
$i=$i+1;
}
Petlje - do-while
Sintaksa:
[inicijalizacija;]
do {
naredbe;
} while (logIzraz);

Primer:
$i=1;
do {

echo $i, "<br />";
$i=$i+1;
} while($i<=10)
Petlje - for
Sintaksa:
for(inicijalizacija; logIzraz; iteracija){
naredbe;
}

Primer:
for($i=1; $i<=10; $i++){
echo $i, "<br />";
}

Petlje - foreach
Sintaksa:
foreach (izrazNiza as [index=>] vrednost) {
naredbe;
}
 Primer:
$a = array(1, 2); $b= array(2=>4);
foreach (($a+$b) as $v) {
echo “Vrednost \$a je $v. ";}
 Rezultat:
Vrednost $a je 1. Vrednost $a je 2. Vrednost
$a je 4.

Kontrola toka - break

Primer:
1:{
2: {
3: {
echo “pre break-a”;
break 2;
}
echo “ovo neće biti prikazano”;
}
echo “posle break-a”;
}

Rezultat:
pre break-a posle break-a
Kontrola toka - break

Primer:
1:{
2: {
3:
{
echo “pre break-a”;
break 3;
}
echo “ovo neće biti prikazano”;
}
echo “posle break-a”;
}

Rezultat:
pre break-a ovo neće biti prikazano posle break-a
Kontrola toka - continue
Takođe može koristiti numerički argument
 Primer:
for($i=0; $i<10; $i++){
echo $i+ “ “;
if ($i%2 ==0)
continue;
echo “<br />“;
}


Rezultat:
01
23
45
67
89
Komanda toka goto

Primer:
<?php
goto a;
echo 'Fu';
a:
echo 'Bar';
?>
Komanda include
Primer
poziv.php
<?php
$boja = ‘zelena';
$voce = ‘jabuka';
?>
test.php
<?php
echo “Jedna $boja $voce";
include ‘poziv.php';
echo “Jedna $boja $voce";
?>
 Rezultat skripta test.php
Jedna
Jedna zelena jabuka
 Naredba include_once uključuje fajl samo ako nije bio prethodno
uključen.

Komanda require
Komanda require je ista kao
komanda include samo u njenom
slučaju ukoliko se fajl ne nađe
obustavlja se dalje izvršenje
programa.
 Komanda require_once uključuje
fajl samo ako nije prethodno
uključen.

2. PHP funkcije
Funkcije nizova
 Funkcije sa uzorcima za
pretraživanje
 Funkcije sa stringovima
 Matematičke funkcije
 Funkcije sa datumom i vremenom

Funkcija nizova print_r
Služi za ispisivanje nizova
 Primer:
$glavniGradovi
=array(“Srbija”=>”Beograd”,
“Francuska”=> “Pariz”, “Belgija”=>
“Brisel”);
print_r($glavniGradovi);
 Rezultat:
Array ( [Srbija] => Beograd [Francuska]
=> Pariz [Belgija] => Brisel )

Funkcija nizova list
Primer:
$glavniGradovi = "Beograd|Pariz|Brisel";
list($a[0],$a[1],$a[2])=explode("|",$glavni
Gradovi);
print_r($a);
 Rezultat:
Array ([0] => Beograd [1] => Pariz [2] =>
Brisel)

Brojanje elemenata
count(niz[,mod]) – daje broj
elemenata niza, a ako je mod=1
onda broji i elemente podnizova
rekurzivno
 array_count_values(niz) – za
svaku vrednost daje broj
pojavljivanja

Dodavanje i oduzimanje
elemenata niza

Funkcije su
array_push(imeNiza, element) –
dodaje vrednost elementa na kraj
niza
 array_pop(imeNiza) - daje vrednost
poslednjeg elementa niza
 array_shift(imeNiza) – daje prvi
element dok se svi elementi niza
pomere za jedan ulevo

Dodavanje i oduzimanje
elemenata niza

Funkcije su dalje:
array_unshift(imeNiza, element1,
[element2…]) – dodaje vrednost
elementa na početak niza a ostale
elemente pomera za jedan udesno
 array_pad(imeNiza, duzinaNiza,
element1) – dopunjava niz do zadate
dužine zadatim elementima

Lociranje elementa u nizu

Funkcije su:



in_array(element,imeNiza) – daje TRUE ako je
vrednost datog elementa u datom nizu i FALSE
u obrnutom slučaju
array_keys(imeNiza[,element]) – daje niz svih
indeksa elemenata, odnosno niz indeksa
zadate vrednosti
array_search(element,imeNiza) – daje
vrednost prvog indeksa zadate vrednosti
Funkcije kretanja po nizu

Funkcije:
key(imeNiza) – daje trenutni indeks
 current(imeNiza) – daje trenutnu
vrednost
 each(imeNiza) – daje trenutni indeksvrednost par i pomera pokazivač za
jedan

Funkcije kretanja po nizu

Funkcije:




reset(imeNiza) – vraća pokazivač na početak
niza
next(imeNiza) – vraća vrednost sledećeg
elementa u nizu i pomera ga za jedno mesto
unapred
prev(imeNiza) – vraća vrednost prethodnog
elementa u nizu i pomera ga za jedno mesto
unazad
end(imeNiza) – pomera pokazivač na kraj niza
i vraća vrednost elementa
Sortiranje niza

Funkcije:



sort(imeNiza[,sortFleg]) – sortira niz.
sortFleg može biti SORT_NUMERIC,
SORT_REGULAR (zavisi od tipa
elemenata), SORT_STRING
rsort(imeNiza[,sortFleg]) – sortira niz u
opadajućem redosledu
asort(imeNiza[,sortFleg]) – sortira niz
zadržavajući index-vrednost parove
Sortiranje niza

Funkcije:
usort(imeNiza[,imeFunkcije]) – sortira
niz na osnovu zadate funkcije
 array_reverse(imeNiza[,fixIndekse]) –
obrne redosled elemenata, ako su pravi
indeksi numerički i fixIndekse=TRUE
čuvaju se kao indeksi
 array_flip (imeNiza) – obrne mesta
indeksima i vrednostima

Kombinovanje nizova

Funkcije:




array_combine(niz1,niz2) – daje nov niz u
kome vrednosti prvog niza postaju indeksi
drugog niza
array_merge(niz1,niz2) – daje novi niz
spajanjem dva niza. Ukoliko su dva indeksa
ista, uzima se indeks drugog niza, kod
operatora + je suprotno.
array_slice(niz1,ofset[,duzina]) – daje novi
niz kao deo niza date dužine počev od indeksa
sa rednim brojem ofset
array_splice(niz1,ofset[,duzina][,niz2]) – daje
niz u kome je obrisan deo niza date dužine
počev od ofseta, i eventualno ga zamenjuje
drugim nizom
Kombinovanje nizova

Funkcije:



array_intersect(niz1,niz2) – daje niz svih
vrednosti koje su zajedničke za dva niza
array_intersect_assoc(niz1,niz2) – daje niz
svih parova indeks-vrednost koje su
zajedničke za dva niza
array_diff(niz1,niz2[,niz3…]) – daje vrednosti
prvog niza koje se ne nalaze u narednim
nizovima koji su argumenti funkcije
Pretraživanje pomoću
uzoraka

Postoji dve vrste uzoraka
POSIX
 PCRE – Perl Compatible Regular
Expression


Perl uzorci su najpopularniji, i isti
kao i kod Javascript-a
Uzorak
Uzorak je niz znakova i specijalnih
znakova
 Sintaksa:
imeUzorka = /mustra/atributi;
 Gde je mustra niz znakova i specijalnih
znakova, a atributi su znakovi koji
specificiraju način apliciranja mustre.
 Sintaksa mustri:
http://www.php.net/manual/en/regexp.re
ference.php

Specijalni znaci u uzorcima
Karakter
Slovo ili broj
\cx
Predstavlja
Istu vrednost
control-x
\t
Tab znak
\n
Nova linija
\v
Vertikalni tab znak
\f
Form feed (nova strana)
\r
Carriage return (početak strane)
\xhh
Heksadecimalni kod unicode znak
Specijalni znaci u uzorcima
Karakter
[...]
[^...]
.
Predstavlja pojavljivanje
Bilo kog karaktera od onih koji su navedeni između [ i ].
Bilo kog karaktera koji nije naveden između [ i ].
Bilo kog karaktera osim nove linije
\w
Bilo kog ASCII definisanog slova, cifre ili _.
\W
Bilo kog karaktera koji nije \w.
\d
Bilo koje ASCII definisane cifre
\D
Bilo kog karaktera koji nije ASCII definisana cifra
\s
Blanko znak
\S
Nije blanko znak
Primeri uzoraka
/[abc]/
 predstavlja jedno pojavljivanje simbola a ili
jedno pojavljivanje simbola b ili jedno
pojavljivanje simbola c.
/[^abc]/
 predstavlja karakter koji nije simbol a ili b ili c.
/\d\d\d\d\d/
 Pomoću ovog uzorka se definiše broj koji se
sastoji od 5 cifara
Specijalni znaci u uzorcima
Oznaka
Značenje
{n,m}
Ponavljanje prethodne grupe najmanje n puta, ali najviše
m puta.
{n,}
Ponavljanje prethodne grupe n ili više puta.
{n}
Ponavljanje prethodne grupe tačno n puta.
?
Ponavljanje prethodne grupe jednom ili nijednom. Isto
dejstvo kao i {0,1}.
+
Ponavljanje prethodne grupe jednom ili više puta. Isto
dejstvo kao i {1,}.
*
Ponavljanje prethodne grupe nijednom ili više puta. Isto
dejstvo kao i {0,}.
|
Alternative. Pojavljivanje dela izraza sa desne ili
pojavljivanje izraza sa leve strane.
(...)
Grupisanje simbola u jedan objekat nad kojim se mogu
koristiti oznake *, +, ?, |, itd.
^
Pretraga uzorka se obavlja na početku stringa
$
Pretraga uzorka se obavlja na kraju stringa
Primeri uzoraka




/\d{2,4}/
// uzorak koji označava
pojavljivanje 2, 3 ili 4 cifre
/\w{3}\d?/ // uzorak koji označava
pojavljivljavanje tačno tri znaka i opciono
jedne cifre, npr. string koji odgovara ovom
uzorku je „abc8” ili „qoq”.
/\s+java\s+/ // uzorak koji označava string
“ java " sa jednim ili više prostora pre ili
posle stringa
/["]*/
// uzorak koji označava nula ili
više pojavljivanje karaktera navoda
Primeri uzoraka




/ab|cd|ef/ // uzorak koji označava
pojavljivanje ab ili pojavljivanje cd ili
pojavljivanje ef
/\d{3}|[a-z]{4}/ // uzorak koji označava
pojavljivanje tri cifre ili 4 mala slova, npr
“123” ili “abcd”
/((ab|cd)+|ef)/ // uzorak koji označava
pojavljivanje stringa „ef” ili pojavljivanje
jednom ili više puta stringa „ab” ili
pojavljivanje jednom ili više puta stringa
„cd”, npr. “abab”, “ef”
Kada tražimo neki od komandnih znakova
onda koristimo \*, a kada tražimo \’, onda
koristimo \\\’
Atributi uzoraka
Atribut
Značenje
i
Izvršavanje case-insensitive
ispitivanja.
g
Izvršava globalno ispitivanje,
znači pronači će se sva
pojavljivanja definisanog
uzorka, a neće se ispitivanje
zaustaviti posle prvog
pronalaska uzorka.
m
Rad sa više linija.
Korisni uzorci
DNS
"^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9_\-]
{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z09][a-zA-Z0-9_\-]{0,61}[a-zA-Z0-9]))*$"
 E-mail
“^[a-zA-Z0-9_\.\+\-]+@([a-zA-Z0-9]|[a-zAZ0-9][a-zA-Z0-9_\-]
{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z09][a-zA-Z0-9_\-]{0,61}[a-zA-Z0-9]))*$”

Funkcije uzorka





Funkcije:
preg_grep(imeUzorka,imeNiza) – daje niz sa svim
elementima niza koji u sebi sadrže uzorak
preg_match(imeUzorka,imeStringa[,nizUzoraka])
– daje listu poduzoraka datog uzorka u zadatom
stringu koji se čuva u zadatom nizu
preg_replace(imeUzorka,imeStringa,imeNiza) –
zadati uzorak se zamenjuje stringom u datom nizu
stringova (ili nizu)
preg_split(imeUzorka,imeStringa) – stvara niz
delova teksta koji su razdvojeni zadatim uzorkom
Funkcije uzorka - primer
Primer:
<?php
$delimitedText=“+Jason++++++++++++Colu
mbus+++OH”;
$fields=preg_split(“/\+{1,}/”,$delimitedText);
foreach($fields as $field) echo $field.”<br />”;?>
 Rezultat:
Jason
Columbus
OH

Funkcije uzorka – primer 2
Primer:
<?php
preg_match(“/^[0-9a-zAZ\.]+\.(gif|jpg|png|jpeg)$/”, “slika.jpg”,$niz);
print_r($niz); ?>
 Rezultat:
Array([0]=>slika.jpg [1]=>jpg)
 Kada bi bila slika.jpge rezultat bi bio prazan niz

Funkcije upoređenja
stringova

Funkcije:
strlen(string) – dužina stringa
 strspn(string1,string2) – daje dužinu
segmenta u kome se nalaze samo znaci
iz drugog stringa

Manipulacija stringovima

Funkcije:
strtolower(string) – sva slova se
menjaju u mala
 strtoupper(string) – sva slova se
menjaju u velika
 ucfirst(string) – prvo slovo se menja u
veliko

Dodavanje i oduzimanje od
stringova

Funkcije:




ltrim(string1,string2) – oduzimaju se znaci sa
leva prvog stringa koji pripadaju drugom
stringu
rtrim(string1,string2) – oduzimaju se znaci sa
desna prvog stringa koji pripadaju drugom
stringu
trim(string1,string2) – oduzimaju se znaci s
krajeva prvog stringa koji pripadaju drugom
stringu
str_pad(string1,duzina,string2[,tip]) – dodaje
se drugi string prvom stringu dok se ne
dopuni do dužine, tip može biti
STR_PAD_LEFT, STR_PAD_RIGHT,
STR_PAD_BOTH
Još neke funkcije stringova

Funkcije:





explode(separator,string) – daje niz delova
stringa koji su razgraničeni znakom koji je
separator
implode (separator,niz) – obrnuto od explode
strpos(string,podstring) – nalazi prvu poziciju
podstringa u stringu
strrpos(string,podstring) – nalazi poslednju
poziciju podstringa u stringu
substr_count(string,podstring) - broji broj
nepreklapajućih podstringova u stringu
Sortiranje niza - primer
Primer:
<? php
function sortirajDatume($a,$b){
If ($a==$b) return 0;
list($adan,$amesec,$agodina)=explode(‘-’,$a);
list($bdan,$bmesec,$bgodina)=explode(‘-’,$b);
$amesec=str_pad($amesec,2,’0’,STR_PAD_LEFT);
$bmesec=str_pad($bmesec,2,’0’,STR_PAD_LEFT);
$adan=str_pad($adan,2,’0’,STR_PAD_LEFT);
$bdan=str_pad($bdan,2,’0’,STR_PAD_LEFT);
$a=$agodina.$amesec.$adan;
$b=$bgodina.$bmesec.$bdan;
return ($a > $b ? 1 : -1);}

Sortiranje niza - primer
$datumi = array(“7-10-2007”,”6-2-2008”,”30-122008”);
sort($datumi);
print_r($datumi);
echo “<br />”;
usort($datumi,”sortirajDatume”);
print_r($datumi);}
 Rezultat:
Array ( [0] => 30-12-2008 [1] => 6-2-2008 [2] => 7-10-2007)
Array ( [0] => 7-10-2007 [1] => 6-2-2008 [2] => 30-12-2008)
Matematičke funkcije
Veliki broj matematičkih funkcija je
na raspolaganju, mogu se naći na:
http://www.php.net/manual/en/book.
math.php

Datum i vreme

Funkcije koje se tiču datuma i
vremena mogu se naći na:
http://www.php.net/manual/en/refs
.calendar.php
3. PHP u praksi
PHP interfejsi preko superglobalnih
promenljivih
 Obrada podataka iz formulara
 Aploudovanje fajlova
 Rad sa fajlovima
 PHP sesije i kolačići
 PHP e-mail
 PHP autentifikacija

Superglobalne promenljive



Superglobalne promenljive su interfejsi
PHP programa sa spoljnom okolinom
preko kojih razmenjuju informacije
Neke važne superglobalne su sledeće:
$_SERVER, $_GET, $_POST, $_FILES,
$GLOBALS, $_COOKIE, $_SESSION
Superglobalne promenljive (superglobals)
se mogu naći na:
http://us2.php.net/manual/en/reserved.v
ariables.php
Superglobalna $_SERVER


$_SERVER je niz sa informacijama o hostu i
serveru
Neki elementi niza $_SERVER





$_SERVER[‘HTTP_REFERER’] – URL veb adrese sa koje
se došlo na datu stranu
$_SERVER[‘REMOTE_ADDR’] – klijentova IP adresa
$_SERVER[‘REQUEST_URI’] – relativna putanja do
zadatog fajla, uključujući i upite pomoću get metode
$_SERVER[‘HTTP_USER_AGENT’] – operativni sistem i
brauzer klijenta
$_SERVER[‘PHP_SELF’] – skript koji se izvršava, ime
fajla uključujući relativnu putanju bez upita. Konstanta
__FILE__ jeste magična (magic) konstantna i daje
kompletno ime fajla uključujući i absolutnu adresu
Superglobalna $_GET
$_GET je niz koji sadrži parametre koji su
prosleđeni metodom get
 HTTP metoda get se koristi kada se preuzima
sadržaj sa servera, i njeni parametri se
prosleđuju kroz URL
 Stranice dobijene get metodom mogu da se
memorišu, i čuvaju se u kešu
 Primer, ukucajmo proba u polje za
pretraživanje na www.naslovi.net:
http://www.naslovi.net/search.php?q=proba
 Tada je $_GET[‘q’] jednak ‘proba’

Superglobalna $_POST
$_POST je niz parametara koji se prosleđuju kroz metod
post, koristeći atribute name
 Primer:
<html>
<form action=“http://localhost/upis.php” method=“post”>
<p> e-meil: <br /> <input type=“text” name=“emeil” />
</p>
<p> Šifra: <br /> <input type=“password” name=“šifra” />
</p>
<input type=“submit” name=“upis” value=“Upiši se!” />
</ form>
</html>
U fajlu upis.php
<?php echo $_POST[‘emeil’]; ?>

Supeglobalna $_POST
Pomoću HTTP metode post se šalju podaci odvojeno kroz
formular
 Podaci poslati post metodom se ne mogu memorisati
(bookmark) niti keširati. Zbog toga pružaju veću
bezbednost prenosa. Podaci nisu ograničene dužine kao
kod get metode.
 Klijent šalje serveru
POST /formulari/upis.php HTTP/1.1
Host: primer.rs
Content-Type: application/x-www-form-urlencoded
ime=Pera&telefon=063-330-754
 Server odgovara
HTTP/1.1 201 Created
Date: …
Content-Length: 0
Location:http://primer.rs/formulari/upis.php

Superglobalna $_FILE


$_FILE je matrica koja se koristi kod
aploudovanja fajlova.
Elementi ove matrice opisuju zadati fajl:




$_FILE[nameAtribut][‘name’] – ime fajla koji
je aploudovan kroz input tag čiji je name
atribut jednak nameAtribut
$_FILE[nameAtribut][‘type’] – tip fajla
$_FILE[nameAtribut][‘size’] – veličina fajla
$_FILE[nameAtribut][‘tmp_file’] – privremeno
ime fajla
Superglobalna $_FILE

Još jedan element ove matrice:

$_FILE[nameAtribut][‘error’] – opisuje grešku
do koje je došlo pri aploudovanju fajla, može
imati sledeće vrednosti:
• UPLOAD_ERR_OK: fajl je uspešno aploudovan
• UPLOAD_ERR_INI_SIZE: fajl prelazi maksimalnu
veličinu dozvoljenu parametrom upload_max_filesize
specificiranu u php.ini
• UPLOAD_ERR_FORM_SIZE: fajl prelazi max veličinu
specificiranu u formularu parametrom
MAX_FILE_SIZE (ne koristi se)
• UPLOAD_ERR_PARTIAL: fajl je samo delimično
aploudovan
• UPLOAD_ERR_NO_FILE: fajl nije bio specificiran
Superglobalna $_COOKIE
$_COOKIE je niz koji nosi informacije o
kolačićima. Definisan u RFC 6265.
 Indeksi ovog niza su imena kolačića, a
vrednosti su vrednosti kolačića.
 Kolačići se setuju funkcijom:
setcookie ( ime [, vrednost [, rok [, putanja [,
domen [, zaštita [, httponly ]]]]]] )
 U php.ini se definiše veličina bafera u kojem
se čuva html strana pre slanja, da ne bi
zaglavlje bilo poslato pre setovanja kolačića,
npr:
output_buffering=1024

Superglobalna $_SESSION
$_SESSION je niz indeksa (ključeva)
i vrednosti koji se vezuje za
korisnika.
 Sesija se generiše pomoću funkcije
start_session() kojom se kolačić čija
je vrednost jednaka SID (ID sesije)
šalje korisniku.

Rad sa formularima
Primer formulara u jednom fajlu upis2.php:
<?php
if (isset($_POST["upis"])){

echo $_POST[“emeil"], '<br />', $_POST['sifra'];}
else {
echo <<<EOT
<form action="http://localhost/upis2.php" method="post">
<p> E-meil: <br /> <input type="text" name=“emeil" /> </p>
<p> Šifra: <br /> <input type="password" name="sifra"/> </p>
<input type="submit" name="upis" value="Upiši se!" />
</form>
EOT;
}?>
Rad sa formularima
Primer formulara u dva fajla:
upis.php
<?php
echo <<<EOT
<form action="http://localhost/upis2.php" method="post">
<p> E-meil: <br /> <input type="text" name=“emeil" /> </p>
<p> Šifra: <br /> <input type="password" name="sifra"/> </p>
<input type="submit" name="upis" value="Upiši se!" />
</form>
EOT;
}?>
upis2.php
<?php
if (isset($_POST["upis"])){
echo $_POST[“emeil"], '<br />', $_POST['sifra'];} ?>

Rad sa formularima
Prosleđivanje promenljivih
od PHP ka JavaScript-u

Primer:
<?php
$user_id = $_GET["uid"]; ?>
<script type=“text/javascript">
var user_id = <?php echo($user_id);?>;
alert("Your user ID is:" + user_id);
</script>
Rad sa formularima:
PHP i JavaScript
Primer fajla upis3.php:
<html>
<form action="http://localhost/upis3.php" method=“post”>
<p> e-meil: <br /> <input type="text" name="emeil" ></p>
<p> Šifra: <br /> <input type="password" name="sifra"/>
</p>
<input type="submit" name="upis" value="Upiši se!" />
</form>
<?php if (isset($_POST["upis"])){
$x='emeil‘;?>
<script type="text/javascript">
alert ("Emeil je: <?php echo $_POST[$x]; ?>");
</script>
<?php } ?>
</html>

Rad sa formularima:
PHP i JavaScript
Rad sa formularima:
izbor opcija
Primer formulara sa listom u fajlu checkbox.php, daje niz sa value
atributiima izabranih polja:
<?php
echo <<<EOT
Izaberite omiljene programske jezike? <br />
<form action="checkbox.php" method=“post”>
<input type="checkbox" name="jezici[]" value="csharp"/> C# <br />
<input type="checkbox" name="jezici[]" value="jscript"/> JavaScript <br />
<input type="checkbox" name="jezici[]" value="perl"/> Perl <br />
<input type="checkbox" name="jezici[]" value="php"/> PHP <br />
<input type="submit" name="upis" value="Pošalji!" />
</form>
EOT;
if (isset($_POST['upis']))
{echo "Izabrali ste jezike: <br />";
foreach($_POST['jezici'] AS $jezik) echo "$jezik <br />";}
?>

Rad sa formularima:
izbor opcija
Konfiguracija za
aploudovanje fajlova

U php.ini fajlu se mogu
konfigurisati:






file_uploads On|Off
max_execution_time brojSekundi
memory_limit brojMegaBajtaM (za dati
skript)
upload_max_filesize brojMegaBajtaM
upload_tmp_dir imeStringa
post_max_size brojMegaBajtaM
(količina podataka po jednoj post
metodi veći od upload_max_filesize)
Aploudovanje fajla
Primer fajla aploudFajla.php :
<form action="aploudFajla.php"
enctype="multipart/form-data"
method=“post”>
Broj indeksa: <br /> <input type="text"
name=“brojIndeksa" /> <br />
Domaći: <br /> <input type="file"
name="domaci" /> <br />
<input type="submit" name="posalji"
value="Pošalji!" />
</form>

Aploudovanje fajla
<?php
define ("fajloviDomaci","C:\Program
Files\wamp\www\domaci\\");
if (isset($_FILES['domaci'])){
if (is_uploaded_file($_FILES['domaci']['tmp_name'])){
if ($_FILES['domaci']['type'] != 'application/pdf'){
echo "<p> Domaći može biti aploudovan samo u *.pdf
formatu </p>";}
else {
$brojIndeksa=$_POST[‘brojIndeksa'];
$rezultat=move_uploaded_file($_FILES['domaci']['tmp
_name'],fajloviDomaci.“_$brojIndeksa.pdf");
if ($rezultat==1) echo "<p> Fajl je uspešno aploudovan.
</p>";
else echo "<p> Fajl nije aploudovan, pokušajte ponovo.
</p>";}}}
?>
Aploudovanje fajla

Fajl _05-132.pdf je u folderu domaci
Mime tipovi
Tip fajla se može biti bilo koji
mime tip, koji se mogu naći npr.
na:
http://www.iana.org/assignments/
media-types/media-types.xhtml

Aploudovanje fajlova –
sa vremenskim oznakama
Primer aploudFajla2.php:
<form action="aploudFajla2.php" enctype="multipart/form-data"
accept-charset="utf-8" method=“post”>
Broj indeksa: <br /> <input type="text" name="brojIndeksa" /> <br
/>
Domaći: <br /> <input type="file" name="domaci" /> <br />
<input type="submit" name="posalji" value="Pošalji!" />
</form>

<?php
define ("fajloviDomaci","C:\Program Files\Apache Software
Foundation\Apache2.2\htdocs\domaci\\");
if (isset($_FILES['domaci'])){
if (is_uploaded_file($_FILES['domaci']['tmp_name'])){
if ($_FILES['domaci']['type'] != 'application/msword'){
echo "<p> Domaći može biti aploudovan samo u *.doc formatu
</p>";}
else {
Aploudovanje fajlova –
sa vremenskim oznakama
Nastavak primera:
$datum=date("d-m-y");
if (!is_dir(fajloviDomaci.$datum)) {
mkdir(fajloviDomaci.$datum);}
$brojIndeksa=$_POST['brojIndeksa'];
$rezultat=move_uploaded_file($_FILES['domaci']['tmp_name'],
fajloviDomaci.$datum."\\"."_$brojIndeksa.doc");

if ($rezultat==1) echo "<p> Fajl je uspešno aploudovan.
</p>";
else echo "<p> Fajl nije aploudovan, pokušajte ponovo.
</p>";}}}
?>
 Rezultat: poslat fajl se nalazi u folderu \domaci\03-05-2009
pod imenom _05-132.doc gde je 05-132 broj indeksa
studenta koji je poslao fajl
Rad sa fajlovima
Postoji veliki broj funkcija za rad sa
fajlovima, mogu se naći na
http://www.php.net/manual/en/ref.filesys
tem.php
 Najvažnije funkcije:





fopen (imeFajla, mod [,uključiPutanju]) –
tipa je resurs na koji se kasnije referiše,
mod može biti “w”, “w+”, “r”… Može se
koristiti putanja specificirana u httpd fajlu sa
komandom include_path
fwrite (refFajla, string)
fread (refFajla, brojBajtova)
fclose (refFajla)
Funkcije za rad sa fajlovima

Primeri:
feof(refFajla) – kraj fajla
 filesize(imeFajla)
 rename(imeFajla1,imeFajla2)
 is_readable(imeFajla)
 file(imeFajla [,flag]) – pretvara fajl u
niz redova, flag može biti
FILE_IGNORE_NEW_LINES, ili
FILE_SKIP_EMPTY_LINES

Rad sa kolačićima
Sintaksa:
setcookie ( ime [, vrednost [, rok [, putanja
[, domen [, zaštita [, httponly ]]]]]] )







ime, vrednost su stringovi
rok je rok trajanja kolačića u sekundama
putanja je direktorijum odakle se može pristupiti
kolačiću
domen je domen odakle se može pristupiti
kolačiću
zaštita je TRUE ako se za setovanje kolačića traži
sigurna HTTPS konekcija
httponly je TRUE ako se kolačić može menjati
samo kroz HTTP konekciju
Rad sa kolačićima: setovanje
U folderu domaci se nalazi fajl kuki.php:
<?php
$vrednost = ‘Neka vrednost kolačića!';
setcookie("testKolačić", $vrednost,
time()+3600, "/domaci/");
/* ističe za sat */
if (isset($_COOKIE["testKolačić”])) {
echo $_COOKIE["testKolačić"];}
?>

Rad sa kolačićima: čitanje
Primer: U koren (root) direktorijumu
(C:\Program Files\wamp\www) se nalazi
kuki2.php:
<?php
echo $_COOKIE["testKolačić"];?>
 Rezultat: Kada se pokrene kuki.php, a
zatim kuki2.php, na ekranu ništa nije
ispisano, jer kuki2.php nije u
dozvoljenom direktorijumu (folderu)

Rad sa kolačićima: čitanje
Primer: U direktorijumu \domaci
(C:\Program Files\wamp\www\domaci) se
sada nalazi kuki2.php:
<?php
echo $_COOKIE["testKolačić"];?>
 Rezultat: Kada se pokrene kuki.php, a
zatim kuki2.php, na ekranu se pojavi:
Neka vrednost kolačića!

Rad sa kolačićima: brisanje
Za rok važnosti kolačića se setuje prošli
trenutak:
<?php
$vrednost = ‘Neka vrednost kolačića!';
setcookie("testKolačić", $vrednost, time()3600, "/domaci/");
/* isteklo trajanje kolačića */
echo $_COOKIE["testKolačić"];
?>

Setovanje kolačića:
Napomena
Kolačić se setuje u zaglavlju koje se
šalje. Ukoliko se zaglavlje pošalje pre
nego što je kolačić setovan, kolačić neće
biti poslat.
 Zato postavljanje polja u zaglavlju mora
ići pre komande sa izlazom (npr. echo).
 Alternativno se u fajlu php.ini uključi
opcija output_buffering da bi HTTP
zaglavlje čekalo i sadržaj
output_buffering=x

Kolačić niz
Primer:
<?php
setcookie(“kuki[tri]", “kukitri");
setcookie(“kuki[dva]", “kukidva");
setcookie(“kuki[jedan]", “kukijedan");
if (isset($_COOKIE[‘kuki'])) {
foreach ($_COOKIE[‘kuki'] as
$indeks => $vrednost) {
echo "$indeks : $vrednost <br />\n”};}
?>
 Rezultat:
tri : kukitri
dva : kukitri
jedan : kukijedan

Konfiguracija sesija

Parametri koji mogu da se konfigurišu u
php.ini







session.save_handler files|mm|user
(određuje gde će biti sačuvane informacije o
sesiji, na disku, u RAM-u ili u bazi podataka)
session.save_path putanja – putanja do
direktorijuma sa fajlovima sesije
session.use_cookies 0|1
session.use_only_cookies 0|1
session.cookie_httponly 0|1
session.cookie_secure 0|1
session.name string – po defoltu je
PHPSESSID (ime kolačića)
Konfiguracija sesija

Parametri koji mogu da se
konfigurišu u php.ini
session.auto_start 0|1
 session.cookie_lifetime brojSekundi –
po defoltu 0
 session.cookie_path string
 session.cookie_domain string

Konfiguracija sesija

Parametri koji mogu da se konfigurišu
u php.ini
session.gc_maxlifetime brojSekundi
 session.use_trans_sid = 0|1
(omogućava automatsko dodavanje SID-a
URL-ovima)
 url_rewriter_tags string – po defoltu
a=href, area=href, frame=src,
input=src, form=fakeentry
(ako je prethodni parametar 1, onda se svi
linkovi ažuriraju da uključe SID)

Komande sesija

Komande
session_start() – startovanje sesije
 session_unset() – oslobađanje svih
promenljivih pridružene sesiji
 session_destroy() – uništavanje sesije,
vraća TRUE ako je sesija uspešno
uništena

Komande sesija

Komande
session_id([string]) – setovanje ili čitanje
ID sesije, SID-a:
 session_name([string]) – setovanje ili
čitanje imena sesije, po defoltu
PHPSESSID, koji je ime kolačića čija je
vrednost SID
 session_get_cookie_params()
 session_set_cookie_params( rok [, putanja
[, domen [, zaštita [, httponly ]]]]]] ) – ime
kolačića je ime sesije, a vrednost je SID

Dodeljivanje i brisanje
vrednosti sesija
Dodeljivanje i brisanje vrednosti, primer:
<?php
session_start();
$_SESSION[‘username’]=“Jovan”;
echo “Vaš username je: ” .$_SESSION[‘username’].
“. <br />”;
unset($_SESSION[‘username’]);
echo “Vaš username je sada: ” .$_SESSION[‘username’].
“.”;
?>
 Rezultat:
Vaš username je: Jovan.
Vaš username je sada: .

Primer sesije prosleđene
preko URL-a
U fajlu sesija.php:
<?php
session_start();
$_SESSION["username"]="Jovan";
echo "Vaš username je:"
.$_SESSION["username"].
". <br />";
echo session_name(), "<br />";
echo session_id(), "<br />";
?>
<a href="http://localhost/sesija2.php?<?php
echo SID; ?>"> Link ka drugoj stranici </a>

Primer sesije prosleđene
preko URL-a
U fajlu sesija2.php:
<?php
session_start();
echo "Vaš username
je:“.$_SESSION["username"].". <br
/>";
echo session_name(), "<br />";
echo session_id(), "<br />";
?>

Primer sesije prosleđene
preko URL-a
Primer sesije prosleđene
preko kolačića
U fajlu sesija3.php:
<?php
session_name('NovoIme');
session_id('jlkfjs624628');
session_start();
$_SESSION["username"]=“Pera";
echo "Vaš username je:" .$_SESSION["username"].
". <br />";
echo session_name(), "<br />";
echo session_id(), "<br />";
?>

Primer sesije prosleđene
preko kolačića
U fajlu sesija4.php:
<?php
session_name('NovoIme');
session_start();
echo "Vaš username
je:“.$_SESSION["username"].". <br />";
echo session_name(), "<br />";
echo session_id(), "<br />";
?>

Primer sesije prosleđene
preko kolačića
Trajanje sesije prosleđene
kolačićima
Ukoliko u prethodnom slučaju ukucamo
u brauzer URL fajla
http://localhost/sesija4.php, dobićemo
isti rezultat u brauzeru. Ukoliko
zatvorimo brauzer, i ukucamo isti URL
izgubiće se podaci o sesiji, tj. vrednost
polja username.
 Trajanje kolačića se može produžiti ili
konfiguracijom u php.ini fajlu, ili
komandom pre session_start():
session_set_cookie_params(rok);

XHTML e-meil podsetnik
Primer slanja e-meila:
<a href="mailto:[email protected]?subject=Primer
poruke&body=Napišite vaš komentar"> Pošaljite email poruku! </a>

Slanje formulara e-meilom
Primer:
<html>
<form method="post" action="mailto: [email protected]?
subject=primer">
Ime i prezime: <input type="text" name="ime_prez"
value="Unesite ime i prezime" size="30" /> <br />
Proizvod: <input type="text" name="proizvod"
value="Unesite proizvod" size="30" /> <br />
Adresa: <br />
<textarea name="adresa" rows="6" cols="30" >
</textarea>
<input type="submit" value="Pošalji">
</form>
</html>

Slanje formulara e-meilom
Konfiguracija i-meil servisa

U fajlu php.ini
SMTP string – definiše SMTP server,
po defoltu localhost
 sendmail_from string– definiše e-meil
pošaljioca
 smtp_port ceoBroj – po defoltu 25
 sendmail_path string – definiše
putanju do sendmail klijenta, koji se
povezuje sa serverom

e-mail pomoću PHP
Najvažnija funkcija je mail, čija je
sintaksa
mail (to, subject, poruka [,
dodatnaZaglavlja [,
dodatniParametri]])
 Jednostavan primer:
mail(“[email protected]” , “Kratko”,
“Prvi PHP e-meil”);

e-mail pomoću PHP
Primer:
$zagl=“From:[email protected]\r\n”;
$zagl.=“Bcc:[email protected]\r\n”;
$zagl.=“Reply-To:[email protected]\r\n”;
$zagl.=“Content-Type:text/plain;\r\n
charset=iso-8859-1\r\n”;
$primaoci=“[email protected],[email protected]”;
mail($primaoci, “Kratko”, “Drugi PHP emeil”,$zagl);

Formular za slanje e-meila
Primer formulara za slanje e-meila, u fajlu
emeilform.php
<?php
if (isset($_POST['upis'])){
$zagl="From:".$_POST['emeilPosh‘]."\r\n";
$zagl.="Content-Type:text/plain;\r\n charset=iso8859-2\r\n";
$primaoc=$_POST['emeilPrim'];
$tema=$_POST['imePrez'];
mail($primaoc, $tema, $_POST['poruka'],$zagl);}
?>

Formular za slanje e-meila
Fajl sa formularom emeilform.html:
<html>
<head><meta http-equiv="content-type" content="text/html;
charset=UTF-8"></head>
<form method="post" action="emeilForm.php">
Ime i prezime: <input type="text" name="imePrez" value="Unesite ime i
prezime"
size="30" /> <br />
Od: <input type="text" name="emeilPosh" value="Unesite svoj e-meil"
size="30"
/> <br />
Za: <input type="text" name="emeilPrim" value="Unesite e-meil primaoca"
size="30" /> <br />
Adresa: <br />
<textarea name="poruka" rows="6" cols="30" > Unesite tekst </textarea>
<input type="submit" name='upis' value="Pošalji">
</form>
</html>

Formular za e-meil
Konfiguracija i-meil servisa
Da bi se pokrenuo meil servis
potrebno je implementirati meil
aplikaciju i povezati je sa wamp
serverom.
 PHPMailer implementira siguran
prenos i-meila uz upotrebu SSL/TLS
protokola kroz gmail račun
http://blog.techwheels.net/send-emailusing-wamp-server/

Autentifikacija

Postoje dve vrste autentifikacije: Autentifikacija
se zasniva na HTTP autentifikaciji opisanoj u
IETF RFC2617





HTTP autentifikacije je keširana i traje dok je brauzer
otvoren
Autentifikacija pomoću kolačića i/ili sesije traje dok
traje sesija
U oba slučaja korisnik unosi šifru, na osnovu
koje se korisnik proveri i pusti na odgovarajuće
strane
Korisnička šifra i sesija mogu biti ukradene, i
čuvaju se šifrovanjem u okviru HTTPS protokola
Napadač može da nametne korisniku SID
HTTP Autentifikacija



Autentifikacija se zasniva na HTTP
autentifikaciji opisanoj u IETF RFC2617
Pomoću funkcije header() se šalju
komande brauzeru da treba traži login
podatke od korisnika
Podaci koje je korisnik ukucao se nalaze u
superglobalnoj promenljivoj $_SERVER
['PHP_AUTH_USER'], i
$_SERVER['PHP_AUTH_PW']
Autentifikacija: Primer kada
su lozinke u fajlu
Fajl koji sadrži korisnička imena i
lozinke je lozinke.txt
aleks : 12cikpogodi
pera : 3jhkj34
milan : 89kjlkjal
marija : 98nkj32kk

Autentifikacija: Primer kada
su lozinke u fajlu
Kod koji generiše fajl sa kriptovanim lozinkama
<?php
$lozinke = file("lozinke.txt");
$fl=fopen("sifrovaneLozinke.txt","w");
foreach ($lozinke as $login){
list($username,$lozinka)=explode(":",$login);
$lozinka=trim($lozinka);
$username=trim($username);
fwrite($fl,$username.":".md5($lozinka)."\n");}
fclose($fl);
?>

HTTP Autentifikacija: Primer
kada su lozinke u fajlu
Fajl sa kodom za autentifikaciju:
<?php
$autorizovan = FALSE;
if (isset($_SERVER['PHP_AUTH_USER']) &&
isset($_SERVER['PHP_AUTH_PW']))
{$sifLoz = file("sifrovaneLozinke.txt");

if (in_array($_SERVER['PHP_AUTH_USER'].":"
.md5($_SERVER['PHP_AUTH_PW'])."\n", $sifLoz))
$autorizovan = TRUE;}
if (! $autorizovan) {
header('WWW-Authenticate: Basic Realm');
header('HTTP/1.0 401 Neautorizovan');
/* Ako korisnik ukuca Cancel dobija se sledeće */
print('Morate dati ispravne login podatke!');
exit;}
echo "Materijal sa restrikcijama ..."
?>
Autentifikacija: Primer kada
su lozinke u fajlu
Bezbednost autentifikacije





Napadač može da presretne šifru i da je
preuzme.
SSL/TLS može da se koristi za šifrovanje
stranica koje učestvuju u autentifikaciji.
Md5 je slab heš algoritam, danas se koriste
Sha-3 algoritmi.
Napadač pravi lukap tabele svih mogućih
šifri. Zato se šifri dodaje slučajni uzorak
salt, i zajedno se hešuju.
PHP funkcije password_hash(), i
password_verify().
Kradja identifikatora sesije




Sesija se može čuvati pomoću SSL/TLS
šifrovanja, a secure atribut kolačića se setuje
na true.
Umetanje lažne sesije se sprečava digitalnim
potpisivanjem.
Kradja sesije se može otežavati dodatnim
kolačićem koji server često menja, i proverava
da li je jednak prethodnoj vrednosti. Ako vidi
da nije zatvara sesiju.
Dodatna sigurnost se ostvaruje setovanjem
HTTP atributa kolačića na true, da kolačići ne
mogli da se menjaju u Javascriptu.
PHP i DOM (Document
Object Model)
DOM je interfejs sa veb stranom kao
hijerarhijskom strukturom
 Pomoću PHP-a se mogu čitati,
dopisivati, ili menjati pojedini
elementi veb strane.
 Sve klase koje čine DOM:
http://php.net/manual/en/book.dom.
php

DOM klasa DOMNode i njeni
metodi









DOMNode::appendChild – Dodaje dete
DOMNode::cloneNode — Klonira nod (element)
DOMNode::getNodePath — Nalazi putanju do
noda
DOMNode::hasAttributes — Proverava da li nod
ima atributa
DOMNode::hasChildNodes — Provera da li nod
ima dece
DOMNode::insertBefore — Dodaje novi čvor pre
datog noda
DOMNode::removeChild — Uklanja dete
DOMNode::replaceChild — Zamenjuje dete
...
Osobine DOMNode klase

nodeName, nodeValue, nodeType,
parentNode, childNodes, firstChild,
lastChild, previousSibling,
nextSibling, attributes,
textContent...
Osobine DOMNode klase
Node Type
nodeName returns
nodeValue returns
Document
#document
null
DocumentFragment
#document fragment
null
DocumentType
doctype name
null
EntityReference
entity reference name
null
Element
element name
null
Attr
attribute name
attribute value
ProcessingInstruction
target
content of node
Comment
#comment
comment text
Text
#text
content of node
CDATASection
#cdata-section
content of node
Entity
entity name
null
Notation
notation name
null
DOM klasa DOMDocument i
njeni metodi










Nasledjuje DOMNode
DOMDocument::createElement — Kreiraj novi element
DOMDocument::createTextNode — Kreiraj novi tekst
element
DOMDocument::getElementById — Nadji element sa datim
ID-em
DOMDocument::getElementsByTagName — Nadji
elemente sa datim imenom taga
DOMDocument::loadHTML — Upiši HTML element iz
stringa
DOMDocument::loadHTMLFile — Upiši HTML element iz
fajla
DOMDocument::saveHTML — Sačuvaj HTML element u
string
DOMDocument::saveHTMLFile — Sačuvaj HTML element u
fajl
...
DOM klasa DOMElement i
njene metode







Nasledjuje DOMNode
DOMElement::getAttribute — Vrednost
atributa
DOMElement::getElementsByTagName — Daje
elemente sa datim tagom koji su naslednici
datog elementa
DOMElement::hasAttribute — Proverava da li
element ima dati atribut
DOMElement::removeAttribute — Uklanja
atribute
DOMElement::setAttribute — Dodaje nov
atribut
...
Primer rada sa DOM
klasama
Primer rada sa DOM klasama
<?php
$domDokument = new DOMDocument('1.0', "UTF-8");
$domElement = $domDokument->
createElement(“field”,”neki podaci”);
$domAtribut = $domDokument-> createAttribute(“ime”);
$domAtribut->value = “vrednost atributa”;
$domElement->appendChild($domAtribut);
$domDokument->appendChild($domElement);
$stringRezultat= $domDokument->saveXML();
echo $stringRezultat;
?>
 Rezultat
<!--?xml version="1.0" encoding="UTF-8"?-->
<html><head></head><body>
<field ime=“vrednost atributa">neki podaci</field>
</body></html>

Primer rada sa čvorovima
Primer
<?php
$doc = new DOMDocument();
$foo = $doc->createElement("foo");
$doc->appendChild($foo);
$bar = $doc->createElement("bar");
$foo->appendChild($bar);
$bazz = $doc->createElement("bazz");
$foo->appendChild($bazz);
echo $doc->saveXML();?>

Dobija se:
<!--?xml version="1.0" encoding="UTF-8"?-->
<html><head></head><body>
<foo>
<bar />
<bazz />
</foo>
</body></html>
Primer rada sa DOM
hijerarhijskom strukturom
<?php
$xml = <<<XML <?xml version="1.0"?>
<userdata>
<name>Jovan</name>
<name>Pera</name>
</userdata>
XML;
$doc = new DOMDocument();
$doc->loadXML($xml);
$names = $doc->firstChild->
getElementsByTagName("name");
$myname = $names->item(0)->nodeValue;
echo ($myname);
4. PHP i baze podataka
Uvod
 Konfigurisanje privilegija
 mySQL komande
 PHP komande za rad sa mySQL (my
Structured Query Language)
bazama podataka

MySQL
Najpoznatija i najviše korišćena open-sors
baza podataka zasnovana na SQL jeziku
 Korišćenje ove baze podataka je besplatno
 MySQL komande su neosetljive na veličinu
slova (case sensitive), ali je praksa da se
pišu velikim slovima. Promenljive su
osetljive na veličinu slova.
 Uputstvo za korišćenje MySQL baze se može
naći na:
http://dev.mysql.com/doc/refman/5.6/en/
index.html

MySQL i druge open-sors
baze 2016
http://db-engines.com/en/ranking
Baze podataka



Baze podataka se sastoje iz tabela, koje
se sastoje iz kolona
Korisnici mogu pristupati ovim bazama,
tabelama, kolonama u zavisnosti od
svojih privilegija koje se prethodno
konfigurišu
Pristup može biti radi kreiranja baze,
brisanja baze, dodavanja ili menjanja
informacija u bazi, i brisanja informacija u
bazi
Konfigurisanje MySQL
baza podataka i privilegija

Može se pristupiti koristeći razne klijente:




mysql klijent podrazumeva šel komandni
interfejs, i može da konfiguriše baze podataka
i da im pristupa
mysqladmin klijent se fokusira na
administrativne komande
MySQL Administrator je GUI klijent razvijen
od strane mySQL tima
phpMyAdmin je GUI klijent prilagođen PHP-u
Organizacija privilegija

Privilegije se zapravo nalaze u mysql bazi
podataka, koja se sastoji iz sledećih tabela:




user – određuje korisnike koji mogu da se loguju na
server sa bilo kog hosta i njihove privilegije
db – određuje koji korisnici mogu da pristupe kojim
bazama podataka
tables_priv: određuje koji korisnici mogu da pristupe
kojim tabelama date baze
columns_priv: određuje koji korisnici mogu da
pristupe kojim kolonama date tabele date baze
mysql tabela user
Column
Datatype
Null
Default
Host
char(60) binary
No
No
User
char(16) binary
No
No
Password
char(41) binary
No
No
Select_priv
enum(‘N’, ‘Y’)
No
N
Insert_priv
enum(‘N’, ‘Y’)
No
N
Update_priv
enum(‘N’, ‘Y’)
No
N
…
…
…
…
mysql tabela db
Column
Datatype
Null
Default
Host
char(60) binary
No
No
Db
char(64) binary
No
No
User
char(16) binary
No
No
Select_priv
enum(‘N’, ‘Y’)
No
N
Insert_priv
enum(‘N’, ‘Y’)
No
N
Update_priv
enum(‘N’, ‘Y’)
No
N
…
…
…
…
mysql tabela tables_priv
Column
Datatype
Null
Default
Host
char(60)
No
No
Db
char(64)
No
No
User
Char(16)
No
No
Table_name
char(64)
No
No
Grantor
Char(77)
No
No
Timestamp
timestamp
Yes
Current
timestamp
Table_priv
skupPrivilegija
No
No
Column_priv
skupPrivilegija
No
No
mysql tabela columns_priv
Column
Datatype
Null
Default
Host
char(60)
No
No
Db
char(64)
No
No
User
Char(16)
No
No
Table_name
char(64)
No
No
Column_name
Char(64)
No
No
Timestamp
timestamp
Yes
Null
Column_priv
skupPrivilegija
No
No
mysql tabela procs_priv
Column
Datatype
Null
Default
Host
char(60)
No
No
Db
char(64)
No
No
User
Char(16)
No
No
Routine_name
char(64)
No
No
Routine_type
enum
No
No
Grantor
Char(77) binary
No
No
Proc_priv
skupPrivilegija
No
No
Timestamp
timestamp
Yes
Null
Administratorske komande

Administrator kreira i briše korisnike,
dodeljuje im i oduzima privilegije, pomoću
komandi





CREATE USER
DROP USER
GRANT
REVOKE
Privilegije su zapravo komande kojim se
vrše operacije nad bazama podataka:
modifikacije baza podataka, čitanje
podataka iz baza, upisivanje podataka u
baze, ažuriranje podataka u bazama, i
brisanje podataka iz baza
Kreiranje i brisanje
korisnika baze
Korisnik se kreira bez privilegija
naredbom:
CREATE USER korisnik1 [IDENTIFIED BY
[PASSWORD] ‘lozinka1']
[, korisnik2 [IDENTIFIED BY [PASSWORD]
‘lozinka2']…]
 Primer:
mysql> CREATE USER ‘aleks’@ ‘localhost’
IDENTIFIED BY “12cikpogodi”;
 Korisnik se briše komandom
DROP USER korisnik1 [, korisnik2…]

Dodeljivanje privilegija
korisniku
Privilegije se dodeljuju naredbom
GRANT tipPrivilegije1 [(listaKolona1)] [,
tipPrivilegije2 [(listaKolona2)] ...]
ON {imeTabele | * | *.* | imeBaze.*}
TO korisnik1 [IDENTIFIED BY ‘lozinka1']
[, korisnik2 [IDENTIFIED BY ‘lozinka2'] ...]
[REQUIRE {NONE|SSL|X509|ISSUER
sertifikacionoTelo}]
[WITH opcija]
 Primer
mysql> GRANT UPDATE ON knjige.* TO ‘marija’@
‘192.168.1.103’;

Oduzimanje privilegija
korisniku
Privilegije se oduzimaju korisniku
naredbom:
REVOKE tipPrivilegije1 [(listaKolona1)] [,
tipPrivilegije2 [(listaKolona2)] ...]
ON {imeTabele | * | *.* | imeBaze.*}
FROM korisnik1 [, korisnik2 ...]
 Primer:
mysql> REVOKE INSERT ON knjige.* FROM
‘marija’@‘192.168.1.102’;

Tip korisničkih privilegija





SELECT dozvoljava korisnicima da
selektuju (čitaju) zapise iz tabela.
INSERT dozvoljava korisnicima da upisuju
nove zapise (redove) u tabelu.
UPDATE dozvoljava korisnicima da menjaju
postojeće zapise u tabelama.
DELETE dozvoljava korisnicima da brišu
zapise (redove) iz tabela
INDEX dozvoljava korisnicima da
indeksiraju tabele, što omogućava brže
pretraživanje
Tip korisničkih privilegija


CREATE dozvoljava kreiranje baza ili
tabela
ALTER dozvoljava korisnicima da
menjaju strukturu baze podataka.




Dodavanje novih kolona
Promena imena kolona ili tabela
Promena tipa podataka u okviru tabela
DROP dozvoljava brisanje baza podataka
ili tabela
Tip korisničkih privilegija
USAGE daje minimalne privilegije.
Ova opcija je korisna ako se želi
samo kreirati novi korisnik.
 Ima i drugih tipova: CREATE USER,
PROCESS, SHOW DATABASES.
 Kompletna lista na:
http://dev.mysql.com/doc/refman/5.6/
en/grant.html

MySQL komande
Najvažnije komande: CREATE,
DROP, SELECT, INSERT, DELETE,
UPDATE
 Kompletan spisak komandi:
http://dev.mysql.com/doc/refman/
5.6/en/sql-syntax.html

Kreiranje baze i brisanje
baze
Baza podataka se kreira jednostavnom
naredbom:
CREATE DATABASE imeBaze;
 Baza podataka se briše naredbom
DROP DATABASE imeBaze;
 U bazu se ulazi naredbom
USE imeBaze;
 Alternativno tabela i kolone se zovu:
imeBaze.imeTabele i
imeBaze.imeTabele.imeKolone

Kreiranje tabele
CREATE TABLE [IF NOT EXISTS] imeTabele (
imeKolone1 tipKolone1 [atributiKolone1],
[imeKolone1 tipKolone2 [atributiKolone2],…]);
 Primer:
CREATE TABLE zaposleni (
id INT UNSIGNED NOT NULL AUTO_INCREMENT
PRIMARY KEY,
ime VARCHAR(25) NOT NULL,
prezime VARCHAR(25) NOT NULL,
telefon VARCHAR(45) NOT NULL);

Tip i atributi kolona
Tipovi kolona mogu biti INT, FLOAT, DOUBLE,
INT UNSIGNED, DATE, TIMESTAMP, CHAR,
NATIONAL CHAR CHARACTER SET imeAlfabeta,
[NATIONAL] [CHARACTER SET imeAlfabeta]
VARCHAR (dužina)
 Kompletna lista tipova se može naći na:
http://dev.mysql.com/doc/refman/5.6/en/datatype-overview.html
 Atributi kolona su: DEFAULT vrednost,
AUTO_INCREMENT, NOT NULL, PRIMARY KEY,
UNIQUE,... Kompletna lista:
http://dev.mysql.com/doc/refman/5.6/en/createtable.html

Menjanje tabela
Tabela se menja komandom
ALTER TABLE imeTabele [ADD
COLUMN|CHANGE|DROP] [imeKolone1]
imekolone2
[,tipKolone2[,atributiKolone2]] [AFTER
imekolone3]
 Primer:
ALTER TABLE zaposleni ADD COLUMN
email VARCHAR(20) AFTER telefon;

Čitanje podataka iz baze
Sintaksa komande
SELECT izrazKolona1 [,izrazKolona2 …]
[FROM imeTabele1[,imeTabele2…]
[GROUP BY {imeKolone3|izrazKolona3}]
[WHERE uslov]][ORDER BY imeKolone
[ASC|DESC]]
 Primer:
SELECT name, address FROM customers
ORDER BY name ASC

Funkcije koje koriste kolone







AVG(imeKolone) daje prosečnu vrednost
kolona
COUNT(imeKolone) daje broj ne NULL
vrednosti u okviru kolone
COUNT(DISTINCT imeKolone) daje broj
različitih vrednosti u okviru kolone
MIN(imeKolone), MAX(imeKolone)
STD(imeKolone) daje standardnu
devijaciju
SUM(imeKolone) zbir vrednosti kolona
LOCATION(imeKolone,string) lociranje
vrednosti kolone u stringu
Primeri čitanja kolona uz
pomoć funkcija
Korišćenje funkcija
SELECT AVG(cena) FROM kupovine;
Korišćenje funkcija i grupisanja,
nalazi minimalnu cenu koju je platio
svaki kupac
SELECT MIN(cena) FROM kupovine
GROUP BY id_kupca;

Upisivanje podataka u bazu
Sintaksa za upisivanje novog zapisa u
tabelu:
INSERT INTO tabela VALUES (vrednost1,
vrednost2, ..);
 Primer:
INSERT INTO proizvodi VALUES
('',‘Jabuke',1.23);
 U primeru za vrednost prve kolone je
korišćen prazan string jer je kolona
definisana kao AUTO_INCREMENT.

Brisanje podataka iz baze
Opšta sintaksa je:
DELETE FROM imeTabele [WHERE
uslov] [ORDER BY ...] [LIMIT broj]
 Primer:
DELETE FROM zaposleni WHERE
zaposleni.ime=‘Marko'

Ažuriranje podataka u bazi
Opšta sintaksa je:
UPDATE tabela SET imeKolone1=izraz1,
imeKolone2=izraz2,... [WHERE uslov]
[ORDER BY ...] [LIMIT broj] ;
 Primer
UPDATE studenti SET
email=‘[email protected]'
WHERE ime=‘Nataša Maksić';

PHP komande za rad sa
MySQL bazom
Razvijen je skup funkcija za rad sa
MySQL bazama, od kojih su najvažnije:
mysqli_connect, mysqli_close,
mysqli_select_db, mysqli_query,
mysqli_db_query, mysqli_fetch_array...
 Kompletna lista se može naći na stranici
http://www.php.net/manual/en/
class.mysqli.php

PHP klase za rad sa MySQL
bazom
Razvijen je skup funkcija za rad sa
MySQL bazama, od kojih su najvažnije:
mysqli::query, mysqli_result::fetch_all,
mysqli::close, ...
 Kompletna lista se može naći na stranici
http://www.php.net/manual/en/class.
mysqli.php

Uspostavljanje i raskidanje
veze sa bazom
Sintaksa
link=mysqli_connect(host[,korisnik[,lozinka[
, baza]])
mysqli_close(link)
 Primer:
$l=mysqli_connect(“localhost”, “aleks”,
“12cikpogodi”);
mysqli_close($l);

Uspostavljanje i raskidanje
veze sa bazom pomoću klasa
Sintaksa
link= new mysqli(host[,korisnik[,lozinka[,
baza]])
link->close()
 Primer:
$l=new mysqli(“localhost”, “aleks”,
“12cikpogodi”);
$l->close();

Kreiranje, brisanje i
ispisivanje baza
Sintaksa kreiranja i brisanja baza:
mysqli_query (link [, upit])
 Primer kreiranja baze:
$veza=mysqli_connect ('localhost');
$sql='CREATE DATABASE IF NOT
EXISTS katedra DEFAULT COLLATE
utf8_general_ci';
mysqli_query ($veza,$sql);

Kreiranje, brisanje i
ispisivanje baza-klase
Sintaksa kreiranja i brisanja baza:
$veza->query (upit)
 Primer kreiranja baze:
$veza=new mysqli('localhost');
$sql='CREATE DATABASE IF NOT
EXISTS katedra DEFAULT
CHARACTER SET utf8';
$veza->query($sql);

Kreiranje, brisanje i
ispisivanje tabele-klase
Primer kreiranja baze:
$veza=new mysqli('localhost‘, NULL,
NULL, ‘firma’);
$sql=“CREATE TABLE Zaposleni
(ID int PRIMARY KEY,
Prezime varchar(255),
Ime varchar(255),
Adresa varchar(255),
Grad varchar(255));”
$veza->query($sql);

PHP komande za čitanje iz
baze
Metode klase mysqli_result na
http://www.php.net/manual/en/class.
mysqli-result.php
 Metode:
$rez=$veza->mysqli($upit);
$rez->fetch_all();
$rez->fetch_assoc();
$rez->fetch_array();

PHP komande za čitanje iz
baze
Metode klase mysqli_result na
http://www.php.net/manual/en/class.
mysqli-result.php
 Metode:
$rez=$veza->mysqli($upit);
$rez->fetch_all();
$rez->fetch_assoc();
$rez->fetch_array();

PHP proceduralne komande
za čitanje iz baze
Metode klase mysqli_result na
http://www.php.net/manual/en/class.my
sqli-result.php
 Metode:
$rez=mysqli_query($veza,$upit);
mysqli_fetch_all($rez);
mysqli_ fetch_assoc($rez);
mysqli_ fetch_array($rez);

Čitanje iz baze pomoću
PHP-a
Primer:
<?php
if isset($_POST[‘unesi’]){
$veza=new mysqli(“localhost”, “aleks”, “tajna”,
“kompanija”);
$upit=“SELECT proizvod,cena FROM proizvodi
WHERE cena<‘{$_POST[‘maxcena’]}’”;
$rez=$veza->query($upit);
while ($red=$rez->fetch_assoc()){
echo $red[‘proizvod’].”:”. $red[‘cena’];}}
?>

Brisanje iz baze pomoću
PHP-a
Primer:
<?php
if isset($_POST[‘unesi’]){
$veza=new mysqli(“localhost”, “aleks”, “tajna”,
“kompanija”);
for ($i=0; $i<count($_POST[‘IDreda’]); $i++){
$IDreda=$_POST[‘IDreda’][$i];
$upit=“DELETE FROM proizvodi WHERE
IDreda=‘$IDreda’”;
$rez=$veza->query($upit);}
if ($rez) echo “Podaci izbrisani!”
$veza->close();}
?>

Upis u bazu pomoću PHP-a
Primer:
<?php
if isset($_POST[‘submit’]){
$veza=new mysqli(“localhost”, “aleks”, “tajna”,
“kompanija”);
$IDproizvoda=$_POST[‘IDproizvoda’];
$naziv=$_POST[‘naziv’];
$cena=$_POST[‘cena’];
$upit=“INSERT INTO proizvodi SET
IDproizvoda=‘$IDproizvoda’, naziv=‘$naziv’
cena=‘$cena’”;
$rez=$veza->query($upit);
If ($rez) echo “Podaci ubačeni!”;}
?>

PHPMyAdmin
Users: dodavanje korisnika
Users: dodavanje korisnika
Ide se na Add User
 Izabere se korisničko ime, šifra, i
host
 Ovi podaci se koriste kada se
konektuje na server pomoću
komandi mysqli_connect(), ili new
mysqli()

Rad sa bazama i tabelama
Export: čuvanje baze
Export: čuvanje baze



Ide se sa localhost-a (NE udje se
ubazu) na Custom opciju za Export
Method
Izabere se baza
Štrikliraju se komande



Add DROP DATABASE statement
Add CREATE DATABASE / USE statement
Zatim klikne na Go
Domaći mogu da se rade i
na
Portabilan XAMPP
http://portableapps.com/apps/develo
pment/xampp

Kodiranje fajla u brauzeru
Na (X)HTML stranici se definiše
kodiranje (UTF-8)
 Alternativno, u httpd.conf fajlu se doda
komanda
AddDefaultCharset UTF-8
 Ili se u .htaccess fajl doda komanda i
onda se u folderu u kome je .htaccess
fajl primenjuje pravilo
AddDefaultCharset UTF-8

Kodiranje znakova u bazi
Pri kreiranju baze, tabela i kolona
definiše se njihov alfabet, odnosno
CHARACTER SET i COLLATION
 Da bi se u bazi videla slova srpske
azbuke, na primer, potrebno je
poslati podatke bazi koristeći utf-8
kodiranje naredbom
mysqli_set_charset($veza,"utf8");
