You are on page 1of 200

Internet programiranje PHP

Uvod

HTML i JavaScript se izvravaju na klijentskoj strani, odnosno na korisnikom raunaru PHP je jedan od programskih jezika za izradu dinamikih veb strana koji se uglavnom izvrava na serverskoj strani PHP moe da memorie podatke i koristi ih u kasnijem trenutku

Istorija

1995 - PHP (Personal Home Page) jezik je zapoeo Rasmus Lerdorf za potrebe line veb strane 1995. 1999 - Zeev Suraski i Andi Gutmans su dalje razvili PHP 3 (PHP Hypertext Preprocessor) i Zend kompajler. 2004 - PHP 5 ukljuuje i objektno programiranje. Trenutno se radi na PHP 6

Alternative PHP-u

Alternative
Python Perl ASP Active Server Pages JSP Java Server Pages

LAMP Linux Apache MySQL PHP (Python, Perl)

Popularnost

Na tritu vie od 50% servera su tipa Apache Najpopularniji programski jezik za dinamiko programiranje veb strana na serverima Apache je PHP PHP je uopte jedan od najpopularnijih programskih jezika PHP koriste wikipedia.org, yahoo.com, facebook.com itd.

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 Laura (Author) PHP and MySQL Web Development (4th Edition) (Developer's Library), Addison-Wesley Professional, October 2008 www uopte

Osobine
Platformski neutralan Slian C-u od koga je nastao Integrisanost sa HTML-om Nestruktuiran i nekonzistentan

Generalije
Komande se zavravaju ; Imena funkcija i klasa nisu osetljiva na veliinu slova (case insensitive), dok imena promenljivih jesu. Npr. promenljiva $txt se razlikuje od promenljive $TXT, dok su funkcije sort i SORT iste.

Zata se koristi PHP?


Omoguava dinamiki HTML sadraj Vri obrade na serveru, npr. prikuplja statistike o poseenosti Obrauje podatke iz formulara Povezuje korisnike sa bazama podataka na serveru Implementira autentifikaciju i zatitu komunikacije

1. Osnove PHP-a
Tag Komentari Prikaz Promenljive i njihovi tipovi Operatori Funkcije Objekti

Izvravanje koda
U okviru HTML koda: <script type=php"> ...PHP kod </script> Ili u eksternom fajlu: <script type=php" src="phpkod.php"> </script> Ali ee se koristi uproena sintaksa <?php ...PHP kod?> odnosno <?php include(phpkod.php) ?>

Komentari
Za komentar jedne linije - oznaka // ili #: // komentar u jednoj liniji ...

Za komentar vie redova - /* za poetak bloka pod komentarom i */ za kraj bloka pod komentarom: /* komentar u vie redova... */

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

Mogunosti
Moe: <?php if ($expression) { ?> <strong>This is true.</strong> <?php } else { ?> <strong>This is false.</strong> <?php }?> Preporuivo: <?php if ($expression) { echo <strong>This is true.</strong>;} else { echo <strong>This is false.</strong>; }

Promenljive

Sadre vrednosti koje program smeta u okviru memorije raunara Promenljivoj se dodeljuje:

eljeno ime vrednost

Tip promenljive ne mora da se specificira, odreuje ga vrednost promenljive

Imena promenljivih

Sve promenljive poinju sa $ Drugi znak je slovo ili _

Tipovi podataka

Skalarni

Sloeni

boolean logiki tip integer celobrojni tip float racionalni tip string znakovni niz array - niz object - objekat resource - resurs Null - nita

Specijalni

Skalarni tipovi podataka


Logiki tip uzima vrednosti TRUE ili FALSE Celobrojni tip moe biti decimalni, oktalni (poinje sa 0) ili heksadecimalni (poinje sa 0x). Max vrednost zavisi od sistema a moe 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 Za dui tekst sa navodnicima, moe se koristiti <<< sa nekom promenljivom koja razgraniava tekst: <<<EOT Text EOT; Za dui tekst sa apostrofima <<<EOD Text EOD; Primer: echo <<<EOT Primer dueg znakovnog niza koji moe zauzimati i veliki broj redova i puno navodnika itd. EOT;

String - primer
Primer: <?php $foo = "foobar";$a=2; echo foo is $foo <br />; echo foo is $foo <br />; Echo a je $a <br />; Echo a je $a <br />; ?> Rezultat: foo is $foo foo is foobar a je $a a je 2

Niz - array
Sintaksa definisanja niza ImeNiza=([indeks1=]vrednost1, ) Indeksi mogu biti celi brojevi ili stringovi Primer <?php $arr=array("Aleks" => "9", "Sanja" =>8 , "Mirko" =>6); echo $arr['Aleks'], "<br />"; echo {$arr['Aleks']} <br />"; echo $arr["Sanja"]; ?> Rezultat: 9 9 8

Multidimenzionalni nizovi
Primer: $familije=array (Simi=> array(Branka,Dejan), Brusin=> array(Mia,Maja,Maja));

Objekat - object
Objekti su slini kao kod JavaScripta, ali se sintaksa razlikuje Objekti se definiu klasama kojima pripadaju Klase imaju definisane atribute i metode Promenljive objekti se dobijaju instanciranjem klase

Resurs - resource

Promenljive tipa resurs su pokazivai na sloene eksterne promenljive Primer su pokaziva na otvoren fajl ili na vezu sa bazom podataka Promenljive tipa resurs se generiu razliitim funkcijama u zavisnosti od primene Kompajler automatski brie promenljive tipa resurs koje ne pokazuju na neki resurs

NULL vrednost

Vrednost NULL je

tip podataka/vrednost koja se moe dodeliti promenljivoj Pokazuje da promenljiva ne sadri nikakvu korisnu vrednost Promenljiva sa vrednou NULL ima takvu dodeljenu vrednost Vrednost null se dodeljuje promenljivoj kada se eli definisati da promenljiva ne sadri nikakav podatak

Operatori
Aritmetiki Na nivou bita Relacioni Logiki

Aritmetiki operatori
Operator Opis Operator Opis

+
* / % ++

sabiranje
oduzimanje mnoenje deljenje moduo inkrement

+=
-= *= /= %= --

sabiranje dodela
oduzimanje dodela mnoenje dodela deljenje dodela Moduo dodela dekrement

Aritmetiki 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, su , ,$a, ,$b, ,$c, ,$d, ,$e, , $f, ,$g; Nakon izvravanja prethodnog primera dobija se sledei tekst na ekranu: a, b, c, d, e, su 2 6 1.5 4 -4 9 4

Na nivou bita
Operator Logiko I (AND) Logiko ILI (OR) Logiko eksluzivno ILI (XOR) Logiko NE (NOT) Pomeranje ulevo Pomeranje udesno sa znakom Upotreba a&b a|b a^b ~a a << b a >> b Opis Rezultatni bit je 1, jedino ako su oba bita 1 u ostalim sluajevima rezultat je 0. Rezultatni bit je 0, jedino ako su oba bita 0 u ostalim sluajevima rezultat je 1. Rezultatni bit je 1, ako biti imaju razliite vrednosti, u suprotnom je 0. Komplementira bitove operanda a. Pomera binarni sadraj operanda za b mesta ulevo. Prazna mesta popunjava sa vrednou 0. Pomera binarni sadraj operanda za b mesta ulevo. Prazna mesta popunjava sa vrednou najstarijeg bita.

Na nivou bita
15

& 9 rezulat 9 (1111 & 1001 = 1001) 15 | 9 rezulat 15 (1111 | 1001 = 1111) 15 ^ 9 rezulat 6 (1111 ^ 1001 = 0110)

Logiki operatori
Operato r I (&& ili and) Upotreba expr1 && expr2 Opis Rezultat je true, jedino ako su oba operanda true, u ostalim sluajevima rezultat je false.

ILI (|| ili or)


NE (!)

expr1 || expr2
!expr

Rezultat se dobija false, jedino ako su oba operanda false, u ostalim sluajevima rezultat je true.
Rezultat se dobija komplement od vrednosti operanada. Ako je operand true, rezultat je false, ako je operand false, rezultat je true Rezultat je true, ako su operandi razliiti, i obrnuto, rezultat je false, ako su operandi isti

ILI (xor)

expr1 xor expr2

Logiki
$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 izvravanja prethodnog primera je: a=1 b= c=1 d= f=1 g=

Operatori poreenja
Operator Jednakost (==) Nejednakost (!= ili <>) Vee (>) Vee ili jednako (>=) Manje (<) Manje ili jednako (<=) Jednako bez konverzije tipova (===) Razliito bez konverzije tipova (!==) Upotreba Rezultat je true ako su operandi jednaki Rezultat je true ako su operandi razliiti. Rezultat je true ako je levi operand vei od desnog operanda. Rezultat je true ako je levi operand vei ili jednak desnom operandu Rezultat je true ako je levi operand manji od desnog operanda Rezultat je true ako je levi operand manji ili jednak desnom operandu Rezultat je true ako su operandi jednaki bez konverzije podataka Rezultat je true ako su operandi razliiti bez konverzije podataka Opis $x == $y rezultat je true ako su $x i $y jednaki. $x ! = $y rezultat je true ako su $x i $y razliiti. $x > $y ako je $x vee od $y. $x >= $y ako je $x vee ili jednako $y. $x < $y rezultat je true ako je $x manje od $y. $x <= $y rezultat je true ako je $x manje ili jednako $y. $x === $y rezultat je true ako su $x i $y jednaki bez konverzije podataka $x !== $y rezultat je true ako su $x i $y razliiti bez konverzije podataka

Operatori poreenja
$a = 4; $b = 1; $c = $a < $b; $d = $a == $b; echo c = , $c, <br /> ; echo d = , $d ; Rezultat izvravanja prethodnog primera je c= d=

String operator .
Pomou 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 +
Pomou 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 greke @
Pre izraza (funkcija,promenljivih itd.) moe se postaviti operator greke @ Uloga ovog operatora je da ignorie greke koje mogu da nastanu pri izraunavanju izraza (ukljuujui i izvravanje funkcije itd.)

Operator za izvrni kod

Naredba izmeu dva akcenta `` izvrava naredbe operativnog sistema (npr. kreiranje direktorijuma, listanje direktorijuma itd.) Funkcionie kada Apache nije u Safe mode i kada funkcija shell_exec nije iskljuena Safe mode se ukljuuje a shell_exec iskljuuje u fajlu php.ini, zatim se Apache restartuje.

Operator za izvrni 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 izvrni 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 moe izvriti kao pojedinana jedinica Funkcije su korisne jer ine program preglednijim i lakim za auriranje 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 izvrila funkcija potrebno ju je pozvati sa odreenog mesta u okviru programa


Funkcija se poziva njenim imenom i specifikacijom argumenata u okvir zagrada Vrednosti argumenata se prosleuju odgovarajuim parametrima funkcije u skladu sa deklaracijom funkcije

Mogunosti
Funkcija moe biti pozvana rekurzivno Funkcija moe 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

Slui da bi se vratio rezultat funkcije pozvanoj naredbi Dodeljuje pozvanoj naredbi vrednost odreenog izraza Tip moe biti proizvoljan

return 8; return p*m;

Opseg vaenja promenljive

Prema opsegu vaenja promenljive se dele na superglobalne, globalne ili lokalne


Superglobalne promenljive su ugraene u PHP i vae u bilo kom programu i funkciji Globalne promenljive se deklariu izvan funkcije, i moe im se pristupiti iz bilo kog dela programa Lokalne promenljive se deklariu u okviru funkcije i jedino su dostupne u okviru funkcije u kojoj su deklarisane Parametri su takoe lokalne promenljive

Argumenti funkcije
Argumenti funkcije su izrazi koji su razdvojeni zarezom Promenljiva, argument, moe biti prosleena direktno $a ili preko reference &$a. U drugom sluaju moe da se menja vrednost argumenta. Promenljivim, argumentima, se moe dodeliti defolt vrednost. Primer: function birajKafu($tip = kapuino") { return Izabran je $tip."; } birajKafu(espreso);birajKafu();

Ugraene funkcije

Postoji veliki broj funkcija koje su ili ugraene po defoltu ili se ukljuuju kroz ekstenzije i dodatne biblioteke u PHP Kategorizacija funkcija i potrebne ekstenzije se mogu nai na veb strani http://www.php.net/manual/en/funcref.php Spisak svih funkcija se mogu nai 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 '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 podrava objekte kao strukturu podataka Objekti se definiu pomou funkcija Za svaki objekat su vezane osobine i metode Osobine su promenljive kojima se dodaju odreene vrednosti Metode su funkcije u okviru objekata kojima mogu da se menjaju njihove osobine

Kreiranje klase i instance objekta


Klasa objekta ili prototip se definie klasom ija je sintaksa class mojObjekat { [[deklaracijaOsobine1] osobina1;] [[deklaracijaOsobine2] osobina2;] [[deklaracijaMetode1] metoda1;] [[deklaracijaMetode2] metoda2;]} Instanca objekta se definie pomou naredbe new mojaInstanca=new mojObjekat Osobine klase mogu biti naknadno definisane

Deklaracije osobine

Deklaracija osobine moe biti


public moe se menjati sa bilo kog mesta direktno private moe se menjati samo pomou metode objekta protected nepoznata je van objekta final ne moe se menjati u klasama naslednicima

Deklaracije metode

Deklaracija metode moe biti


public moe 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 moe se menjati u klasama naslednicima

Rad sa osobinama objekata


Vrednost osobine instance objekta se moe koristiti na sledei nain: imePromenljive=mojaInstanca-> Osobina1; Vrednost osobine instance objekta se moe promeniti ili naknadno definisati ukoliko nije bila ranije: mojaInstanca->Osobina1=vrednost1;

Kreiranje objekta sa metodom


Primer metoda objekta: class myCircle {public $xcoord; public $ycoord; public $radius; public function _construct ($a,$b,$c){ $this->xcoord=$a;$this->ycoord=$b;$this->radius=$c;} public function retArea() { return ( M_PI * $this->radius * $this->radius );} public function retCirc() { return ( M_PI * $this->radius * 2 ); } public function moveBy($xDis,$yDis) { $this->xcoord += $xDis; $this->ycoord += $yDis; }}

Korienje metoda
Primer korienja metoda iz prethodnog primera: var $testCircle = new myCircle(3,4,5); $testCircle->moveBy(2,3); echo Povrina kruga je , $testCircle->retArea(); echo <br />Obim kruga je , $testCircle->retCirc(); Rezultat prethodnih komandi je: Povrina 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 statikih osobina i metoda


Statike osobine i metode se takoe mogu zvati bez instanciranja objekta Primer <?php class Visitor{ private static $visitors = 0; function __construct(){ self::$visitors++;} static function getVisitors(){ return self::$visitors;}} $visits = new Visitor(); echo Visitor::getVisitors()."<br />"; $visits2 = new Visitor(); echo Visitor::getVisitors()."<br />"; echo $visits -> getVisitors(); ?> Rezultat primera: 1 2 2

Nasleivanje izmeu klasa


Primer: <?php class SimpleClass { public $var = 'a default value'; public function displayVar() { echo $this->var;} } class ExtendClass extends SimpleClass { 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


for petlja while petlja


break continue goto

Izlazi iz blokova

Naredbe include, require

Ternarni operator
Sintaksa: logIzraz ? izraz1 : izraz2 gde je izraz log_izraz bilo koji izraz iji rezultat je vrednost logikog tipa. Ako je rezultat izraza true, onda se izvrava izraz1, u suprotnom izraz2. Primer: $ratio = $denom ==0 ? 0 : $num/$denom

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=i+1; }

$i=1 while($i<=10){ echo $i, "<br />";

Petlje - do-while
Sintaksa: [inicijalizacija;] do { naredbe; } while (logIzraz);

Primer: $i=1; do { document.write($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, 3, 17); foreach ($a as $v) { echo trenutna vrednost \$a je $v.";}

Kontrola toka - break

Primer: { { { echo pre break-a; break 2; } echo ovo nee biti prikazano; } echo posle break-a; } Rezultat: pre break-a posle break-a

Kontrola toka - break

Primer: { {

} echo posle break-a;

} echo ovo nee biti prikazano;

{ echo pre break-a; break 1;

Rezultat: pre break-a ovo nee biti prikazano posle break-a

Kontrola toka - continue


Takoe moe koristiti numeriki 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 ukljuuje fajl samo ako nije bio prethodno ukljuen.

Komanda require
Komanda require je ista kao komanda include samo u njenom sluaju ukoliko se fajl ne nae obustavlja se dalje izvrenje programa. Komanda require_once ukljuuje fajl samo ako nije prethodno ukljuen.

2. PHP funkcije
Funkcije nizova Funkcije sa uzorcima za pretraivanje Funkcije sa stringovima Matematike funkcije Funkcije sa datumom i vremenom

Funkcija nizova print_r


Slui 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 ([2] => Brisel [1] => Pariz [0] => Beograd )

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 poetak niza a ostale elemente pomera za jedan udesno array_pad(imeNiza, duzinaNiza, element) dopunjava niz do zadate duine 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 sluaju array_keys(niz[,element]) daje sve indekse elemenata, odnosno indekse zadate vrednosti array_values(niz) daje vrednosti svih elemenata niza array_search(element,imeNiza) daje vrednost indeksa zadate vrednosti

Funkcije kretanja po nizu

Funkcije:
key(imeNiza) daje trenutni indeks value(imeNiza) daje trenutnu vrednost each(imeNiza) daje trenutni indeksvrednost par i pomera pokaziva za jedan

Funkcije kretanja po nizu

Funkcije:

reset(imeNiza) vraa pokaziva na poetak niza next(imeNiza) vraa vrednost sledeeg elementa u nizu i pomera ga za jedno mesto unapred prev(imeNiza) vraa vrednost prethodnog elementa u nizu i pomera ga za jedno mesto unazad end(imeNiza) pomera pokaziva na kraj niza

Sortiranje niza

Funkcije:
sort(imeNiza[,sortFleg]) sortira niz. sortFleg moe biti SORT_NUMERIC, SORT_REGULAR, SORT_STRING rsort(imeNiza[,sortFleg]) sortira niz u opadajuem redosledu asort(imeNiza[,sortFleg]) sortira niz zadravajui index-vrednost parove

Sortiranje niza

Funkcije:
usort(imeNiza[,imeFunkcije]) sortira niz na osnovu zadate funkcije array_reverse(imeNiza[,fixIndekse]) obrne redosled elemenata 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 array_slice(niz1,ofset[,duzina]) daje novi niz kao deo niza date duine poev od indeksa sa rednim brojem ofset array_splice(niz1,ofset[,duzina][,niz2) daje niz u kome je obrisan deo niza date duine poev od ofseta, i eventualno ga zamenjuje drugim nizom

Kombinovanje nizova

Funkcije:

array_intersect(niz1,niz2) daje niz svih vrednosti koje su zajednike za dva niza array_intersect_assoc(niz1,niz2) daje niz svih parova indeks-vrednost koje su zajednike za dva niza array_diff(niz1,niz2[,niz3]) daje vrednosti prvog niza koje se ne nalaze u narednim nizovima koji su argumenti funkcije

Pretraivanje pomou uzoraka

Postoji dve vrste uzoraka


POSIX Perl

Perl uzorci su 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 nain apliciranja mustre. Sintaksa mustri: http://www.php.net/manual/en/regexp.re ference.php

Specijalni znaci u uzorcima


Karakter Predstavlja

Slovo ili broj \0


\t \n \v \f \r \uxxxx

Istu vrednost Specijalni NUL karakter


Tab znak Nova linija Vertikalni tab znak Form feed Carriage return Unicode karakter definisan pomou heksadecimalnog boja xxxx; na primer, \u0009 ima isti efekat kao i \t

Specijalni znaci u uzorcima


Karakter
[...] [^...] . \w \W \d \D \s \S

Predstavlja pojavljivanje
Bilo kog karaktera od onih koji su navedeni izmeu [ i ]. Bilo kog karaktera koji nije naveden izmeu [ i ]. Bilo kog karaktera osim nove linije Bilo kog ASCII definisanog slova, cifre ili _. Bilo kog karaktera koji nije \w. Bilo koje ASCII definisane cifre Bilo kog karaktera koji nije ASCII definisana cifra Blanko znak Koji 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/ Pomou ovog uzorka se definie broj koji se sastoji od 5 cifara

Specijalni znaci u uzorcima


Oznaka {n,m} {n,} {n} ? + * | (...) ^ $ Znaenje Ponavljanje prethodne grupe najmanje n puta, ali najvie m puta. Ponavljanje prethodne grupe n ili vie puta. Ponavljanje prethodne grupe tano n puta. Ponavljanje prethodne grupe jednom ili nijednom. Isto dejstvo kao i {0,1}. Ponavljanje prethodne grupe jednom ili vie puta. Isto dejstvo kao i {1,}. Ponavljanje prethodne grupe nijednom ili vie 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 poetku stringa Pretraga uzorka se obavlja na kraju stringa

Primeri uzoraka

/\d{2,4}/ // uzorak koji oznaava 2, 3 ili 4 pojavljivanje cifara /\w{3}\d?/ // uzorak koji oznaava tano tri pojavljivljavanja slova i opciono jedne cifre, npr. string koji odgovara ovom uzorku je abc8 ili qqq. /\s+php\s+/ // uzorak koji oznaava string "java" sa jednim ili vie prostora pre ili posle stringa /["]*/ // uzorak koji oznaava nula ili vie pojavljivanje karaktera navoda /ab|cd|ef/ // uzorak koji oznaava pojavljivanje ab ili pojavljivanje cd ili pojavljivanje ef /\d{3}|[a-z]{4}/ // uzorak koji oznaava pojavljivanje tri cifre ili 4 mala slova /((ab|cd)+|ef)/ // uzorak koji oznaava pojavljivanje stringa ef ili pojavljivanje jednom ili vie puta stringa ab ili pojavljivanje jednom ili vie puta stringa cd

Atributi uzoraka
Atribut i Znaenje Izvravanje case-insensitive ispitivanja. Izvrava globalno ispitivanje, znai pronai e se sva pojavljivanja definisanog uzorka, a nee se ispitivanje zaustaviti posle prvog pronalaska uzorka. Rad sa vie linija. ^ oznaava poetak linije ili stringa, a $ predstavlja kraj linije ili stringa.

Funkcije uzorka

Funkcije: preg_grep(uzorak,imeNiza) daje niz sa svim elementima niza koji u sebi sadre uzorak preg_match(uzorak,imeNiza,nizUzoraka) daje listu uparenih uzoraka u zadatom stringu preg_replace(uzorak,string1,string2) zadati uzorak se zamenjuje zamenom u datom stringu preg_replace(uzorak,imeFunkcije,string) zadati uzorak se zamenjuje zamenom u datom stringu preg_split(uzorak,string) 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 uporeenja stringova

Funkcije:
strlen(string) duina stringa strcmp(string1,string2) uporeuje dva stringa, vrednost funkcije je 1{string1>string2} + 1{string2>string1} strspn(string1,string2) daje duinu 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 duine, tip moe biti PAD_LEFT,PAD_RIGHT,PAD_BOTH

Jo neke funkcije stringova

Funkcije:

explode(separator,string) daje niz delova stringa koji su razgranieni 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 substring_count(string,podstring)

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-2008,6-2-2008,30-122007) sort($datumi); print_r($datumi); echo <br />; usort($datumi,sortirajDatume); print_r($datumi);} Rezultat:
Array ( [0] => 6-2-2008 [1] => 7-10-2008 [2] => 30-12-2007) Array ( [0] => 30-12-2007 [1] => 6-2-2008 [2] => 7-10-2008)

Matematike funkcije
Veliki broj matematikih funkcija je na raspolaganju, mogu se nai na: http://www.php.net/manual/en/book. math.php

Datum i vreme

Funkcije koje se tiu datuma i vremena mogu se nai 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 kolaii PHP autentifikacija

Superglobalne promenljive

Superglobalne promenljive su interfejsi PHP programa sa spoljnom okolinom preko kojih razmenjuju informacije Neke vane superglobalne su sledee: $_SERVER, $_GET, $_POST, $_FILE, $GLOBALS, $_COOKIE, $_SESSION, $_ENV Superglobalne promenljive (superglobals) se mogu nai 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 dolo na datu stranu $_SERVER[REMOTE_ADDR] klijentova IP adresa $_SERVER[REQUEST_URI] putanja do zadatog fajla $_SERVER[HTTP_USER_AGENT] operativni sistem i brauzer klijenta $_SERVER[PHP_SELF] skript koji se izvrava, konstanta __FILE__ jeste fajl koji se trenutno izvrava u okviru zadatog skripta

Superglobalna $_GET
$_GET je niz koji sadri parametre koji su prosleeni metodom get Metoda get se koristi kada se ne menja sadraj na serveru, i njeni parametri se prosleuju kroz URL Primer, ukucajmo proba u polje za pretraivanje na www.naslovi.net: http://www.naslovi.net/search.php?q=proba Tada je $_GET[q] jednak proba

Supeglobalna $_POST
$_POST je niz parametara koji se prosleuju kroz metod post, koristei 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=Upii se! /> </ form> </html>

Superglobalna $_POST
Primer u fajlu upis.php: <? php echo $_POST[emeil], <br />, $_POST[ifra] ?> Rezultat: Aleksa ikpogodi Napomena: U fajlu httpd Apache servera je odreen defolt direktorijum za dokumente sledeom naredbom: DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs Drugi direktorijumi mogu da se odrede ili relativno u odnosu na defolt direktorijum ili pomou aliasa, npr: Alias /slike /ftp/pub/slike

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] veliina fajla $FILE[nameAtribut][tmp_file] privremeno ime fajla

Superglobalna $_FILE

Jo jedan element ove matrice:

$FILE[nameAtribut][error] opisuje greku do koje je dolo pri aploudovanju fajla, moe imati sledee vrednosti:

UPLOAD_ERR_OK: fajl je uspeno aploudovan UPLOAD_ERR_INI_SIZE: fajl prelazi maksimalnu veliinu dozvoljeno parametrom upload_max_filesize specificiranu u php.ini UPLOAD_ERR_FORM_SIZE: fajl prelazi max veliinu specificiranu u formularu parametrom MAX_FILE_SIZE UPLOAD_ERR_PARTIAL: fajl je samo delimino aploudovan UPLOAD_ERR_NO_FILE: fajl nije bio specificiran

Superglobalna $_COOKIE
$_COOKIE je niz koji nosi informacije o kolaiima. Indeksi ovog niza su imena kolaia, a vrednosti ostali atributi kolaia. Kolaii se setuju funkcijom: setcookie ( ime [, vrednost [, rok [, putanja [, domen [, zatita [, httponly ]]]]]] ) Napomena, u php.ini setovati Output buffering On

Superglobalna $_SESSION
$_SESSION je niz indeksa (kljueva) i vrednosti koji se vezuje za korisnika. Sesija se generie pomou funkcije start_session() kojom se kolai sa SID (ID sesije) alje korisniku.

Prosleivanje 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
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="Upii se!" /> </form> EOT; }?>

Rad sa formularima

Rezultat:

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="Upii 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

Primer:

Rad sa formularima: izbor opcija


Primer formulara sa listom u fajlu checkbox.php: <?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="Poalji!" /> </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 upload_max_filesize brojMegaBajtaM upload_tmp_dir imeStringa post_max_size brojMegaBajtaM

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 /> Domai: <br /> <input type="file" name="domaci" /> <br /> <p> <input type="submit" name="posalji" value="Poalji!" /> </form>

<?php define ("fajloviDomaci","C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\domaci\\"); if (is_uploaded_file($_FILES['domaci']['tmp_name'])){ if ($_FILES['domaci']['type'] != 'application/pdf'){ echo "<p> Domai moe 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 uspeno aploudovan. </p>"; else echo "<p> Fajl nije aploudovan, pokuajte ponovo. </p>";}} ?>

Aploudovanje fajla

Fajl _05-132.doc je u folderu domaci

Mime tipovi
Tip fajla se moe biti bilo koji mime tip, koji se mogu nai npr. na: http://www.w3schools.com/media/ media_mimeref.asp

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 /> Domai: <br /> <input type="file" name="domaci" /> <br /> <p> <input type="submit" name="posalji" value="Poalji!" /> </form>

<?php define ("fajloviDomaci","C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\domaci\\");

if (is_uploaded_file($_FILES['domaci']['tmp_name'])){ if ($_FILES['domaci']['type'] != 'application/msword'){ echo "<p> Domai moe 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 uspeno aploudovan. </p>"; else echo "<p> Fajl nije aploudovan, pokuajte 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 nai na http://www.php.net/manual/en/ref.filesys tem.php Najvanije funkcije:

fopen (imeFajla, mod [,ukljuiPutanju]) tipa je resurs na koji se kasnije referie, mod moe biti w, w+, r 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 moe biti FILE_IGNORE_NEW_LINES, ili FILE_SKIP_EMPTY_LINES

Rad sa kolaiima
Sintaksa: setcookie ( ime [, vrednost [, rok [, putanja [, domen [, zatita [, httponly ]]]]]] )

ime, vrednost su stringovi rok je rok trajanja kolaia u sekundama putanja je direktorijum odakle se moe pristupiti kolaiu domen je domen odakle se moe pristupiti kolaiu zatita je TRUE ako se za setovanje kolaia trai sigurna HTTPS konekcija httponly je TRUE ako se kolai moe menjati samo kroz HTTP konekciju

Rad sa kolaiima: setovanje


U folderu domaci se nalazi fajl kuki.php: <?php $vrednost = Neka vrednost kolaia!'; setcookie("testKolai", $vrednost, time()+3600, "/domaci/"); /* istie za sat */ echo $_COOKIE["testKolai"]; ?>

Rad sa kolaiima: itanje


Primer: U koren (root) direktorijumu (C:\Program Files\Apache Software Foundation\Apache2.2\htdocs) se nalazi kuki2.php: <?php echo $_COOKIE["testKolai"];?> Rezultat: Kada se pokrene kuki.php, a zatim kuki2.php, na ekranu nita nije ispisano, jer kuki2.php nije u dozvoljenom direktorijumu (folderu)

Rad sa kolaiima: itanje


Primer: U direktorijumu \domaci (C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\domaci) se sada nalazi kuki2.php: <?php echo $_COOKIE["testKolai"];?> Rezultat: Kada se pokrene kuki.php, a zatim kuki2.php, na ekranu se pojavi: Neka vrednost kolaia!

Rad sa kolaiima: brisanje


Za rok vanosti kolaia se setuje proli trenutak: <?php $vrednost = Neka vrednost kolaia!'; setcookie("testKolai", $vrednost, time()3600, "/domaci/"); /* isteklo trajanje kolaia */ echo $_COOKIE["testKolai"]; ?>

Kolai 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 konfiguriu u php.ini


session.save_handler files|mm|user session.save_path putanja putanja do direktorijuma sa fajlovima sesije session.use_cookies 0|1 session.use_only_cookies 0|1 session.name string po defoltu je PHPSESSID

Konfiguracija sesija

Parametri koji mogu da se konfiguriu u php.ini


session.auto_start 0|1 session.cookie_lifetime brojSekundi po defoltu 0 session.cookie_path string session.cookie_domain string session.referer_check string

Konfiguracija sesija

Parametri koji mogu da se konfiguriu u php.ini


session.gc_maxlifetime brojSekundi url_rewriter_tags string po defoltu a=href, area=href, frame=src, input=src, form=fakeentry session.use_tran_sid = 0|1

Komande sesija

Komande
session_start() startovanje sesije session_unset() oslobaanje sve promenljive pridruene sesiji session_destroy() unitavanje sesije, vraa TRUE ako je sesija uspeno unitena

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 kolaia ija je vrednost SID session_get_cookie_params() session_set_cookie_params( rok [, putanja [, domen [, zatita [, httponly ]]]]]] ) ime kolaia 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: .

Konfiguracija sesije prosleene preko URL-a


Konfiguracija php.ini fajla, kojom se iskljuuju kolaii i ukljuuje automatsko dopisivanje URL adresa: session.use_cookies = 0 session.use_tran_sid = 1

Primer sesije prosleene 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 prosleene 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 prosleene preko URL-a

Primer sesije prosleene preko kolaia


U fajlu sesija.php: <?php session_name('NovoIme'); session_id('jlkfjs624628'); 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 prosleene preko kolaia


U fajlu sesija2.php: <?php session_name('NovoIme'); session_id('jlkfjs624628'); session_start(); echo "Va username je:.$_SESSION["username"].". <br />"; echo session_name(), "<br />"; echo session_id(), "<br />"; ?>

Primer sesije prosleene preko kolaia

Trajanje sesije prosleene kolaiima


Ukoliko u prethodnom sluaju ukucamo u brauzer URL fajla http://localhost/sesija2.php, dobiemo isti rezultat u brauzeru. Ukoliko zatvorimo brauzer, i ukucamo isti URL izgubie se podaci o sesiji, tj. vrednost polja username. Trajanje kolaia se moe produiti ili konfiguracijom u php.ini fajlu, ili komandom pre session_start(): session_set_cookie_params(rok);

Autentifikacija

Autentifikacija se zasniva na HTTP autentifikaciji opisanoj u IETF RFC2617 Pomou funkcije header() se alju komande brauzeru da treba trai 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 sadri korisnika imena i lozinke je lozinke.txt aleks 12cikpogodi pera 3jhkj34 milan 89kjlkjal marija 98nkj32kk

Autentifikacija: Primer kada su lozinke u fajlu


Kod koji generie 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); fwrite($fl,$username.":".md5($lozinka)."\n");} fclose($fl); ?>

Autentifikacija: Primer kada su lozinke u fajlu


Fajl sa kodom za autentifikaciju: <?php $autorizovan = FALSE; $sifLoz = file("sifrovaneLozinke.txt"); 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'); print('Morate dati ispravne login podatke!'); exit;} echo "Materijal sa restrikcijama ..." ?>

Autentifikacija: Primer kada su lozinke u fajlu

XHTML e-meil podsetnik


Primer slanja e-meila: <a href="mailto:aleksandra@etf.rs?subject=Primer poruke&body=Napiite va komentar"> Poaljite email poruku! </a>

Slanje formulara e-meilom


Primer: <html> <form method="post" action="mailto: aleks@ieee.org"> 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="Poalji"> </form> </html>

Slanje formulara e-meilom

Konfiguracija e-meil servisa

U fajlu php.ini
SMTP string definie SMTP server, po defoltu localhost sendmail_from string definie e-meil poaljioca smtp_port ceoBroj po defoltu 25

e-mail pomou PHP


Najvanija funkcija je mail, ija je sintaksa mail (to, subject, poruka [, dodatnaZaglavlja [, dodatniParametri]]) Jednostavan primer: mail(aleks@ieee.org , Kratko, Prvi PHP e-meil);

e-mail pomou PHP


Primer: $zagl=From:cicasyl@etf.rs\r\n; $zagl.=Bcc:pera@etf.rs; $zagl.=Reply-To:cicasyl@etf.rs\r\n; $zagl.=Content-Type:text/plain;\r\n charset=iso-8859-1\r\n; $primaoci=aleks@ieee.org,amarija@etf.rs ; 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['emeilPo']."\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


Nastavak fajla emeilform.php: <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="emeilPo" 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="Poalji"> </form> </html>

Formular za e-meil

4. PHP i baze podataka


Uvod Konfigurisanje privilegija mySQL komande PHP komande za rad sa mySQL bazama podataka

MySQL
Najpoznatija i najvie koriena open-sors baza podataka zasnovana na SQL jeziku Korienje ove baze podataka je besplatno MySQL komande su neosetljive na veliinu slova (case sensitive), ali je praksa se piu velikim slovima. Promenljive su osetljive na veliinu slova. Uputstvo za korienje MySQL baze se moe nai na: http://dev.mysql.com/doc/refman/5.0/en/ index.html

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 konfiguriu Pristup moe biti radi kreiranja baze, brisanja baze, dodavanja ili menjanja informacija u bazi, i brisanja informacija u bazi

Konfigurisanje MySQL baza podataka i privilegija

Moe se pristupiti koristei razne klijente:

mysql klijent podrazumeva el komandni interfejs, i moe da konfigurie 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 prilagoen PHP-u

Organizacija privilegija

Privilegije se zapravo nalaze u mysql bazi podataka, koja se sastoji iz sledeih tabela:

user odreuje korisnike koji mogu da se loguju na server sa kog hosta i njihove privilegije db odreuje koji korisnici mogu da pristupe kojim bazama podataka host odreuje hostove sa kojih se moe pristupiti kojim bazama tables_priv: odreuje koji korisnici mogu da pristupe kojim tabelama date baze columns_priv: odreuje koji korisnici mogu da pristupe kojim kolonama date tabele date baze

mysql tabela user


Column Datatype Null Default

Host
User Password Select_priv Insert_priv Update_priv

char(60) binary
char(16) binary char(41) binary enum(N, Y) enum(N, Y) enum(N, Y)

No
No No No No No

No
No No N N N

mysql tabela db
Column Datatype Null Default

Host
Db User Select_priv Insert_priv Update_priv

char(60) binary
char(64) binary char(16) binary enum(N, Y) enum(N, Y) enum(N, Y)

No
No No No No No

No
No No N N N

mysql tabela host


Column Datatype Null Default

Host
Db Select_priv Insert_priv Update_priv Delete_priv

char(60) binary
char(64) binary enum(N, Y) enum(N, Y) enum(N, Y) enum(N, Y)

No
No No No No No

No
No N N N N

mysql tabela tables_priv


Column Datatype Null Default

Host
Db User Table_name Grantor Timestamp

char(60)
char(64) Char(16) char(64) Char(77) timestamp

No
No No No No Yes

No
No No No No Current timestamp

Table_priv
Column_priv

skupPrivilegija
skupKolona

No
No

No
No

mysql tabela columns_priv


Column Datatype Null Default

Host
Db User Table_name Column_name Timestamp Column_priv

char(60)
char(64) Char(16) char(64) Char(64) timestamp skupPrivKolona

No
No No No No Yes No

No
No No No No Null No

mysql tabela procs_priv


Column Datatype Null Default

Host
Db User Routine_name Routine_type Grantor Proc_priv Timestamp

char(60)
char(64) Char(16) char(64) enum Char(77) binary skupKolona timestamp

No
No No No No No No Yes

No
No No No No No No Null

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 brie 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 {SSL|X509} [ISSUER sertifikacionoTelo] [SUBJECT tema]] [WITH GRANT OPTION] 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.* marija@192.168.1.102;

Tip korisnikih privilegija


SELECT dozvoljava korisnicima da selektuju (itaju) zapise iz tabela. INSERT dozvoljava korisnicima da upisuju nove zapise u tabelu. UPDATE dozvoljava korisnicima da menjaju postojee zapise u tabelama. DELETE dozvoljava korisnicima da briu zapise iz tabela INDEX dozvoljava korisnicima da indeksiraju tabele

Tip korisnikih 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 korisnikih privilegija


USAGE daje minimalne privilegije. Ova opcija je korisna ako se eli samo kreirati novi korisnik. Ima i drugih tipova: REPLICATION, REPLICATION SLAVE, SHOW DATABASES. Kompletna lista na: http://dev.mysql.com/doc/refman/5.0/ en/grant.html

MySQL komande
Najvanije komande: CREATE, DROP, SELECT, INSERT, DELETE, UPDATE Kompletan spisak komandi: http://dev.mysql.com/doc/refman/5. 0/en/sql-syntax.html

Kreiranje baze i brisanje baze


Baza podataka se kreira jednostavnom naredbom: CREATE DATABASE imeBaze; Baza podataka se brie naredbom DROP DATABASE imeBaze; U bazu se ulazi naredbom USE imeBaze Alternativno tabela i kolone se zovu: imeBaze.imeTabele i imeKolone.imeBaze.imeTabele

Kreiranje tabele
CREATE TABLE [IF NOT EXISTS] imeTabele ( [PRIMARY KEY (imeKolone1[,imeKolone2])] imeKolone1 tipKolone1 [atributiKolone1], [imeKolone1 tipKolone2 [atributiKolone2],]); Primer: CREATE TABLE zaposleni ( id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, ime VARCHAR(25) NOT NULL, prezime VARCHAR(25) NOT NULL, telefon VARCHAR(45) NOT NULL, PRIMARY KEY(id));

Tip i atributi kolona


Tipovi kolona mogu biti INT, FLOAT, DOUBLE, INT UNSIGNED, DATE, TIMESTAMP, CHAR, NATIONAL CHAR CHARACTER SET imeAlfabeta, VARCHAR (duina) Kompletna lista tipova se moe nai na: http://dev.mysql.com/doc/refman/5.0/en/datatype-overview.html Atributi kolona su: DEFAULT vrednost, AUTO_INCREMENT, NOT NULL, UNIQUE,... Kompletna lista: http://dev.mysql.com/doc/refman/5.0/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 emeil 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 prosenu vrednost kolona COUNT(imeKolone) daje broj ne NULL vrednosti u okviru kolone COUNT(DISTINCT imeKolone) daje broj razliitih vrednosti u okviru kolone MIN(imeKolone), MAX(column) STD(imeKolone) daje standardnu devijaciju SUM(imeKolone) zbir vrednosti kolona

Primeri itanja kolona uz pomo funkcija


Korienje funkcija SELECT AVG(cena) FROM kupovine; Korienje funkcija i grupisanja 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 korien prazan string jer je kolona definisana kao auto_increment.

Brisanje podataka iz baze


Opta sintaksa je: DELETE FROM imeTabele [WHERE uslov] [ORDER BY ...] [LIMIT broj] Primer: DELETE FROM zaposleni WHERE zaposleni.ime=Marko'

Auriranje podataka u bazi


Opta sintaksa je: UPDATE tabela SET imeKolone1=izraz1, imeKolone2=izraz2... [WHERE uslov] [ORDER BY ...] [LIMIT number] ; Primer UPDATE studenti SET email=mnatasa@etf.rs'

WHERE ime=Nataa Maksi';

PHP komande za rad sa MySQL bazom


Razvijen je skup funkcija za rad sa MySQL bazama, od kojih su najvanije: mysql_connect, mysql_close, mysql_create_db,mysql_list_dbs, mysql_list_tables, mysql_select_db, mysql_query, mysql_db_query, ... Kompletna lista se moe nai na stranici http://www.php.net/manual/en/book. mysql.php

Uspostavljanje i raskidanje veze sa bazom


Sintaksa mysql_connect(host[,korisnik[,lozinka]]) mysql_close([link]) Primer: $l=mysql_connect(localhost, aleks, 12cikpogodi); mysql_close($l);

Kreiranje, brisanje i ispisivanje baza


Sintaksa kreiranja i brisanja baza: mysql_create_db (baza [, link]) mysql_drop_db(baza[, link]) Sintaksa za ispisivanje baza i tabela: mysql_list_dbs([link]) mysql_list_tables(baza[, link])

Rad sa bazama
Sintaksa funkcija: mysql_select_db(baza [, link]) mysql_query (upit, [, link]) mysql_db_query (baza, upit [, link])

Brisanje iz baze pomou PHP-a


Primer: <?php if isset(($_POST[submit])){ $linkID=mysql_connect(localhost, webuser, secret); mysql_select_db(products); foreach ($count=0; $count<count($_POST[rowid]); $count++){ $rowID=$_POST[rowID][$count]; $query=DELETE FROM product WHERE rowid=$rowid; $result=mysql_query($query);} if ($result) echo Podaci ubaeni! mysql_close();} ?>

Upis u bazu pomou PHP-a


Primer: <?php if isset(($_POST[submit])){ $linkID=mysql_connect(localhost, webuser, secret); mysql_select_db(company); $productid=$_POST[productid]; $name=$_POST[name]; $price=$_POST[price]; $query=INSERT INTO product SET productid=productid, name=$name price=$price; $result=mysql_query($query); If ($result) echo Podaci ubaeni! mysql_close();} ?>

You might also like