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");
© Copyright 2025 Paperzz