You are on page 1of 27

Achilles

Pre nego to ponete da itate ovu skriptu, hteo bi da vam skrenem panju na
nekoliko pojedinosti vezanih za istu. Pre svega, ova je samo deo velike skripte,
odnosno "Vodia kroz PHP i MySQL", koji e se, nadam se, uskoro pojaviti, a
sadrae zatno vie materijala, mahom, namenjenog ve iskusnim PHP programerima.
Takoe ova skripa je uraena u relativno kratkom vremenskom periodu, tako da su
mogue pravopisne greke, pa vam se zato, kao autor skripte unapred izvinjvam.
Naravno sve kritike, komentari, saveti su dobrodoli i moete ih poslati na
achilles333@gmail.com . Takoe putem ove adrese mozete se informisati o
kompletnoj verziji "Vodia kroz PHP i MySQL".


Beograd, decembar 2004.
Autor



































Achilles



Sadraj :



1. Prvi deo:
- Logovanje u MySQL
- Kreiranje baza
- Kreiranje tabela
- Ubacivanje sadraja u tabelu
- Pregled sauvanih podataka
- Izmena sauvanih podataka
- Brisanje sauvanih podataka

2. Drugi deo
- Krenimo sa priom o PHP
- Pretstavimo PHP
- Osnovna sintaksa i komande
- Operatori i promenljive
- Korisniki uticaj (interakcija) i forme
- Kontrola konstrukcije (strukture)
- Vienamenske stranice

3. Trei deo
- Predstavljenje podataka iz MySQL baze na web
- Povezivanje sa MySQL pomou PHP
- Prikazivanje SQL upita pomou PHP
- Manipulisanje rezultatima pomou SELECT
- Ubacivanje podataka u bazu










Achilles
Logovanje u MySQL

Pre svega, da bi se povezali sa MySQL bazom, potreban nam je MySQL
klijent, tj. program koji e izvriti povezivanje. U okviru Windows i Unix platforme,
ve postoje takvi programi. Tako npr. u Linux-u program pozivamo komandom
mysql, a njegova podrazumevana lokacija (default) je /usr/local/mysql/bin, pod
Windows-om program pozivamo sa mysql.exe, a podrazumevana lokacija
c:\mysql\bin.
Ukoliko elite da se poveete sa MySQL koji se ne nalazi na vaem
kompjuteru (npr. sa Web host's MySQL server) postoje dva naina povezivanja. Prvi
je korienjem telnet-a (da bi se ulogovali na va Web host's MySQL server i odatle
pokrenuli mysql). Drugi nain je da sa interneta preuzmete MySQL client software
(http://www.mysql.com/ , koji je kompatibilan i za Windows i za Linux platforme) i
preko njega se poveete sa MySQL serverom na Internetu.
Ma koju platformu i program izabrali, veina stvari e biti ista, tako da mogu
da ponem sa objanjavanjem - povezivanja na MySQL server.
Da bi se povezali potrebno je da upite sledeu komandu :

mysql -h <hostname> -u <username> -p

Naravno, umesto polja <hostname> piete host name ili IP adresu kompjutera na
kome se nalazi MySQL server. Ukoliko pokreete program na istom raunaru, na
kome se nalazi i server, moete izostaviti deo h <hostname> iz komandne linije
umesto da piete - h l ocal host . <username> je va MySQL username, ako je
hostname localhost, onda e userneme najverovatnije biti root.
Oznaka "-p", slui da bi pozvali upit za upisivanje password-a (u sledeoj
komandnoj liniji).
Ako je sve uraeno kako treba MySQL program e izbaciti sledeu liniju :

mysql>

Sada smo se povezali sa bazom podataka, tako da sada preostaje da izaberemo
bazu sa kojom emo da radimo. Prvo emo pogledati spisak baza na serveru. Da bi to
uradili koristimo sledeu komandu (OBAVEZNO je ; na kraju svake komande).

mysql> SHOW DATABASES;

Sada dobijamo spisak baza, koji bi mogao da izgleda ovako (ukoliko do sada
nije bilo nikakvih promena)

+- - - - - - - - - - +
| Dat abase |
+- - - - - - - - - - +
| mysql |
| t est |
+- - - - - - - - - - +
2 r ows i n set ( 0. 11 sec)

MySQL koristi prvu bazu, pozivom mysql, da bi sauvao lanove, njihove lozinke i
dozvole. Za sada emo ostaviti prazne tabele i ponovo se vratiti na njih u narednim
delovima ove skripte. Poto nam druga baza ne treba, jer emo u nastavku kreirati
Achilles
gomilu baza koje sa kojima emo raditi, iskoristiemo bazu test, da vidimo upotrebu
naredbe DROP koja slui za brisanje baze.

mysql> DROP DATABASE test;

Nakon ove naredbe baza e biti obrisana. Vana napomena je da nee biti
nikakvog upozorenja tj. pitanja tipa "da li ste sigurni ?". Zbog toga, preporuujem, da
sa ovom naredbom budete operezni, jer se jednom komandom moe obrisati baza koja
sadri jako bitne podatke, to bi moglo imati katasrtofalne posledice.
Pre nego to krenemo na nove komande , da ponovimo, da na kraju svake
mora stajati ";" jer e u suprotnom MySQL misliti da komanda nije zavrena i
oekivae nastavak u novom redu:

mysql> SHOW
-> DATABASES;

Takoe ako je vaa komanda dugaka tj. ako se sastoji od nekoliko redova u
svakom sledeem e umesto mysql> biti samo ->
Ukoliko ste napravili greku i elite da obustavite komandu (cancel) to moete
uraditi komandom \c:

mysql> DROP DATABASE\c
mysql>

MySQL e ignorisati prethodnu komandu i vratiti se u poetni poloaj i ekati
sledeu naredbu.
Konano, ako elimo da izaemo iz MySQL klijenta koristimo kljunu re
quit ili exit. Inae, to je jedina komanda koja ne zahteva ";" na kraju:

mysql> quit
Bye


Kreiranje baza

Ono to prvo moramo da uradimo, da bi nastavili dalje, je da kreiramo bazu. Kreiranje
baze je veoma jednostavno (kao i njeno brisanje). Baza se kreira uz pomo kljune
rei CREATE:

mysql> CREATE DATABASE vicevi;

Ovde smo izabrali da ime baze bude "vicevi" (naravno izbor imena baze zavisi
izkljuivo od autora).
Poto smo sada napravili nau bazu, da bi mogli da joj pristupimo, koristimo
naredbu USE:

mysql> USE vicevi;

Achilles
Tek sada moemo da raspolaemo sa naom bazom, koja je za sada prazna
(dok ne ubacimo neku tabelu). Pravljenje tabele koja e sadrati "viceve" e biti na
prvi zadatak.


Kreiranje tabela

Da bi kreirali tabelu koristimo sledei model:

mysql> CREATE TABLE <ime tabele> (
-> <ime kolone 1> <tip kolone 1> <dodatak kolone 1>,
-> <ime kolone 2> < tip kolone 2> <dodatak kolone 2>,
-> ...
-> );

U naem primeru to bi izgledalo ovako: kreiramo tri kolone: ID (broj),
VicText (tekst vica), VicDate (datum upisivanja vica). Komanda za kreiranje ove
tabele bi izgledala ovako :

mysql > CREATE TABLE Vi cevi (
- > I D I NT NOT NULL AUTO_I NCREMENT PRI MARY KEY,
- > Vi cText TEXT,
- > Vi cDat e DATE NOT NULL
- > ) ;

Prva linija je krajnje jednostavna, u njoj obavetavamo MySQL da elimo
da kreiramo tabelu Vicevi.
U drugoj liniji elimo da napravimo kolonu koju emo nazvati ID koja e
sadrati podatke tipa integer (int). Ova linija sadri i neke specifinosti vezane za prvu
kolonu:
Prvo, kolona ne sme biti prazna (NOT NULL).
Zatim, automatski se dodeljuje vrednost svake sledee vrste prilikom unosa
(AUTO_INCREMENT).
I konano, poto e sve vrednosti sigurno biti razliite to nam omoguava da datu
kolonu oznaimo kao primarni klju (PRIMARY KEY).
Trea linija je takoe veoma jednostavna, alimo da napravimo kolonu
VicText koja e sadrati tekstove viceva (tipa TEXT).
etvrta kolona VicDate e sadrati tip podataka (DATE) i ona takoe nikada
ne sme biti prazna, zato i za nju stavljamo NOT NULL.

Ako su sve komande korektne, MySQL e uitati sa Query OK, i naa prva
tabela e biti kreirana. Ako smo napravili greku MySQL e tu prijaviti problem sa
naim upitom i probati da da neko objanjenje u vezi sa problemom.
Sada moemo pogledati tabelu koju smo napravili. To radimo komandom:



Achilles

mysql> SHOW TABLES;
i dobijamo sledei odgovor
+-------------------+
| Tables in Vicevi|
+-------------------+
| Vicevi |
+-------------------+
1 row in set
Ona predstavlja listu svih tabela u naoj bazi. Sadri samo tabelu vicevi. Poto
je sve OK, sada moemo pogledati i tabelu Vicevi :
mysql > DESCRI BE Vi cevi ;
+- - - - - - - - - - +- - - - - - - - - +- - - - - - +- - - - - +- - - - - - - - - - - - +- -
| Fi el d | Type | Nul l | Key | Def aul t | . . .
+- - - - - - - - - - +- - - - - - - - - +- - - - - - +- - - - - +- - - - - - - - - - - - +- -
| I D | i nt ( 11) | | PRI | 0 | . . .
| Vi cText | t ext | YES | | NULL |
| Vi cDat e | dat e | | | 0000- 00- 00 |
+- - - - - - - - - - +- - - - - - - - - +- - - - - - +- - - - - +- - - - - - - - - - - - +- -
3 r ows i n set
...

Takoe vana stavka je brisanje tabele, koja je takoe jednostavna (kao i sve
prethodne). Tabelu emo obrisati ako napiemo sledeu komandu :

mysql > DROP TABLE <i meName>;



Ubacivanje sadraja u tabelu

Poto smo kreirali bazu i u njoj tabelu, sada preostaje da u tabelu unesemo
neki sadraj. Kljuna re za unoenje sadraja u tabelu je INSERT. Postoje dva naina
na koja moemo izvriti upisivanje u tabelu :

mysql> INSERT INTO <ime tabele> SET
-> imeKolone1 = vrednost1,
-> imeKolone2 = vrednost2 ,
-> ...
-> ;


mysql> INSERT INTO <table name>
-> (imeKolone 1, imeKolone 2, ...)
-> VALUES (vrednost 1, vrednost 2, ...);

Achilles
Da bi ubacili neki vic u nau tabelu moemo izabrati bilo koji od ova dva naina :

mysql> INSERT INTO Vicevi SET
-> VicText = "Zasto zec ima duge usi, a kratak rep?
Pa da je obrnuto bio bi veverica!",
-> VicDate = "2004-05-18";


mysql> INSERT INTO Vicevi
-> (VicText, VicDate) VALUES (
-> " Zasto zec ima duge usi, a kratak rep?
Pa da je obrnuto bio bi veverica!",
-> "2004-05-18"
-> );

Poto sada znamo kako se unose podaci u tabelu, mogli bi da pogledamo ta
smo uneli...


Pregled sauvanih podataka

Komanda za pregled sadraja je SELECT. Ona je verovatno
najkomplikovanija naredba u SQL-u. Razlog te kompleksnosti lei u tome to je ona
glavna i od nje zavisi fleksibilnost odgovora (to emo uskoro pokazati).
Sada emo pogledati najjednostavniji oblik komande SELECT, koji ispisuje
kompletan sadraj tabele Vicevi:

mysql> SELECT * FROM Vicevi;



Ako bi pokuali da tumaimo ovu naredbu, to bi izgledalo otprilike ovako:
"ispii sve iz tabele Vicevi". Nakon ove komande dobijamo sledei odgovor:


+- - - - +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - +- - - - - - - - - - - - +
| I D | Vi cText
| Vi cDat e |
+- - - - +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - +- - - - - - - - - - - - +
| 1 | Zast o zec i ma duge usi , a kr at ak r ep?
Pa da j e obr nut o bi o bi vever i ca! | 2000- 04- 01 |
+- - - - +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - +- - - - - - - - - - - - +
1 r ow i n set ( 0. 05 sec)

Dobili smo jedan nepregledan pogled na nau tabelu iz razloga to je tekst vica
predugaak za ekran. Zato emo u sledeem pozivu izostaviti tekst vica.

mysql> SELECT ID, VicDate FROM Vicevi;

Achilles


posle ega dobijamo novi prikaz:

+- - - - +- - - - - - - - - - - - +
| I D | Vi cDat e |
+- - - - +- - - - - - - - - - - - +
| 1 | 2000- 04- 01 |
+- - - - +- - - - - - - - - - - - +
1 r ow i n set ( 0. 00 sec)

Ovo nije loe, ali moe i bolje. elimo da ispiemo sve kolone, ali da budu
pregledno prikazane na naem ekranu. Kako emo to uraditi ? Ograniiemo prikaz
kolone VicText na odreeni broj karaktera uz pomo kljune rei LEFT (neka bude
npr. 20):

mysql> SELECT ID, LEFT(VicText,20), VicDate FROM Vicevi;


+- - - - +- - - - - - - - - - - - - - - - - - - - - - +- - - - - - - - - - - - +
| I D | LEFT( Vi cText , 20) | Vi cDat e |
+- - - - +- - - - - - - - - - - - - - - - - - - - - - +- - - - - - - - - - - - +
| 1 | Zast o zec i ma duge | 2000- 04- 01 |
+- - - - +- - - - - - - - - - - - - - - - - - - - - - +- - - - - - - - - - - - +
1 r ow i n set ( 0. 05 sec)

Druga korisna funkcija je COUNT, koja jednostavno vraa broja kao rezultat.
Tako npr. ako elimo da prebrojimo koliko je viceva sauvano u naoj tabeli to
moemo da uradimo sledeom komandom:

mysql> SELECT COUNT(*) FROM Vicevi;


+- - - - - - - - - - +
| COUNT( *) |
+- - - - - - - - - - +
| 1 |
+- - - - - - - - - - +
1 r ow i n set ( 0. 06 sec)

Dakle, imamo samo jedan vic u tabeli.
Sada moemo da uvedemo klauzulu WHERE koja nam slui da uitamo samo
podatke koji ispunjavaju uslov zadatka. Tako dolazimo do sledeeg primera:

mysql> SELECT COUNT(*) FROM Vicevi
-> WHERE VicDate >= "2004-01-01";

Kao rezultat ovog upita, dobiemo ispis svih viceva koji su uneeni u tabelu
nakon eljenog datuma.
Takoe, uz pomo kljune rei LIKE , koja slui da prikaemo rei i reenice
koje u sebi sadre datu re, moemo napraviti varijaciju naeg upita:

mysql> SELECT VicText FROM Vicevi
-> WHERE VicText LIKE "%zec%";

Achilles
Dakle traimo ispis svih Viceva koji sadre re zec.
Da bi jo vie precizirali upit, moemo da kombinujemo ove dve naredbe:

mysql> SELECT VicText FROM Vicevi WHERE
-> VicText LIKE "%rec1 rec2%" AND
-> VicDate >= "2004-04-01" AND
-> VicDate < "2004-05-01";

Kako budemo dodavali sadraj u tabelu vicevi, tako emo proirivati komandu
SELECT.


Izmena sauvanih podataka

Neke stvari koje unesemo u bazu elimo da menjamo. Sve promene obavljaju
se uz pomo kjune rei UPDATE. Ova komanda sadri elemente komande INSERT
(za podeavanje vrednosti kolone) i elemente komande SELECT (za izbor sadraja
koji emo modifikovati). Uopteno oblik komande UPDATE bi mogao da izgleda
ovako:

mysql> UPDATE <imeTabele> SET
-> <ime_kolone>=<nova_vrednost>, ...
-> WHERE <uslov>;

Tako npr. ako elimo da promenimo datum nekog vica koji smo uneli
koristimo sledeu komandu:

mysql> UPDATE Vicevi SET VicDate="2000-10-04" WHERE ID=1;



Takoe izmene moemo praviti i ako ubacimo kljunu re WHERE:

mysql> UPDATE Vicevi SET VicDate="2000-10-04"
-> WHERE VicText LIKE "%zec%";



Brisanje sauvanih podataka

Brisanje sadraja u SQL je "opasno lako" ( o emu je ve bilo rei u
prethodnom delu skripte). Komanda za brisanje sadraja je sledea:

mysql> DELETE FROM <imeTabele> WHERE <uslov>;

Takoe ako elimo moemo obrisati sve Viceve iz tabele koji sadre
odgovarajuu re, npr:

Achilles
mysql> DELETE FROM Vicevi WHERE VicText LIKE "%zec%";

Naravno postoji i komanda koja bi obrisala itav sadraj tabele Vicevi:

mysql> DELETE FROM Vicevi;






Krenimo priu o PHP

Do sada smo nauili kako uz pomo MySQL moemo da uvamo Viceve u
jednostavnoj bazi (sastavljenoj od jedne tabele Vicevi). Koristili smo MySQL klijent
za ispisivanje SQL komandi. Sada emo nauiti kako da to isto uradimo sa
server-side scripting jezikom kao to je PHP. Uz neka proirenja osnovnih osobina,
koje smo do sada nauili, ovaj jezik (PHP) u potpunosti podrava komunikaciju sa
MySQL bazom.


Pretstavimo PHP

Kao to smo rekli PHP je server-side scripting jezik. Server-side scripting
jezik je slian JavaScript po mnogim segmentima, oni doputaju ubacivanje malih
programa (skripti) u HTML u okviru Web strane. U izvravanju takvih skripta,
doputena je kontrola, koja e odmah pokazati u browser-u svaku izmenu koju je
mogue izvriti sa poetnim HTML kodom.
Kljuna razlika izmeu JavaScript i PHP, je ta to web browser jednom tumai
JavaScript i to prilikom uitavanja stranice, dok server-side scripting jezik, kao to je
PHP svoje tumaenje obavlja na serveru, pre nego to stranicu poalje u browser.
Tumaenje PHP koda se na web strani zamenjuje standardnim HTML kodom. Skripta
se u potpunosti izvrava na serveru. Otuda i sam naziv: server-side scripting jezik.
Sada emo dati jedan jednostavan primer PHP-a (nazovimo ga datum.php):


<HTML>
<HEAD>
<TI TLE>Danasnj i dat um</ TI TLE>
</ HEAD>
<BODY>
<P>Danasnj i dat um( na Web ser ver - u) j e
<?php


echo( dat e( " l , F dS Y. " ) ) ;

?>
</ BODY>
</ HTML>


Achilles

Veina predstavlja standardni HTML kod, dok je linija izmeu <?php i ?>
napisana u PHP. <?php oznaava poetak PHP koda, a ?> kraj PHP koda. Server e
tumaiti sve to se nalazi izmeu ova dva graninika i to prebaciti u standardan
HTML kod, pre slanja na web stranu koju uitavamo. U samom browser-u e se
pojaviti HTML sledee sadine:


<HTML>
<HEAD>
<TI TLE>Danasnj i dat um</ TI TLE>
</ HEAD>
<BODY>
<P>Danasnj i dat um( na Web ser ver - u) j e
Wednesday, J une 17t h 2003. </ BODY>
</ HTML>

Recimo i da e sve PHP oznake nestati i na njihovom mestu e se pojaviti
izlazna skripta koja e izgledati kao standardni HTML. Ovaj primer pokazuje
nekoliko prednosti server-side scripting:

Nema problema sa kompatibilnou browser-a, poto se PHP skripta
izvrava na serveru i nigde vie, to omoguava da ne moramo razmiljati ta
podrava, a ta ne browser posetioca nae strane.
Pristupa resursima koji se nalaze na serveru. U prethodnom primeru smo
ubacili datum saglasno sa serverom u web stranu. Da smo hteli to da uradimo uz
pomo npr. JavaScript, onda bi se na strani pokazalo vreme saglasno kompjuteru sa
koga se pristupa naoj stranici. Poto ovaj primer i nije ba zanimljiv to se tie
ekspoatacije server-sid resursa, mi moemo lako ubaciti neku drugu informaciju, koja
e biti upotrebljiva samo za skript koji se pokree na serveru npr. informacije
sauvane u MySQL bazi pokreu se na serveru.
Smanjuje se duina uitavanja stranice kod korisnika. JavaScript moe
znaajno usporiti prikazivanje stranice u browser-u, na sporijim kompjuterima. Sa
server-side scripting sav posao se obavlja na serverskoj maini i korisnik ita obian
HTML kod.


Osnovna sintaksa i komande

Svako ko je do sada radio (i razume) u programskim jezicima kao to su C,
C++, Java, JavaScript, Perl (ili bilo koji jezik izveden od C) bie mu poznata i PHP
sintaksa. PHP skrip se sastoji od serije komandi, ili iskaza, gde svaki mora biti u vezi
sa serverom. PHP izkazi lie na iskaze u prethodno pomenutim jezicima i obavezno se
zavravaju sa ";".
Evo jednog karakteristinog iskaza:

echo( "Ovo je <B>test</B>!" );

Ova funkcija poziva na ugradnju u HTML kod echo i njen rezultat u HTML strani e
biti: Ovo je <B>test</B>!. PHP raspolae sa puno funkcija koje nam omoguavaju
sve od slanja e-maila do rada sa informacijama sauvanim u razliitim tipovima baza.
Achilles
Funkcija echo jednostavno uzima tekst i prosleuje ga u HTML kod, na
strani koja se uitava:



<HTML>
<HEAD>
<TI TLE> J ednost avan pr i mer PHP</ TI TLE>
</ HEAD>
<BODY>
<P><?php echo( " Ovo j e <B>t est </ B>! " ) ; ?></ P>
</ BODY>
</ HTML>

ako sauvano ovaj fajl kao test.php i postavimo ga na web server, browser e videti
sledeu stranu:

<HTML>
<HEAD>
<TI TLE> J ednost avan pr i mer PHP </ TI TLE>
</ HEAD>
<BODY>
<P>Ovo j e <B>t est </ B>! </ P>
</ BODY>
</ HTML>

Napomenimo da su HTML tagovi (kao npr. <B> i </B>) apsolutno dozvoljeni.
Navodnici se koriste da oznae poetak i kraj niza znakova u PHP, pa je
njihovo postojanje neophodno. Zagrade imaju dvostruku namenu. Prvo, one
obavetavaju da je echo funkcija koju elimo da pozovemo. Drugo, oznaavaju
poetak i kraj liste "parametara" koje elimo da prosledimo funkciji da ih izvri. U
echo funkciji, jedino je neophodno dati niz znakova koji e se pokazati na strani.


Operatori i promenljive

Promenljive u PHP su iste kao i u svim drugim programskim jezicima. U
narednom primeru kreiraemo promenljivu $t est var i abl e (sve promenljive u PHP
moraju poinjati znakom "dolara") i dodeliti joj vrednost 3:

$testvariable = 3;

Jedna promenljiva u PHP, moe sadrati razne tipove podataka (moe biti
broj, niz znakova ili neka druga vrednost) i moe ih menjati za vreme "ivota". Pa ako
sledei izraz napiemo posle prethodnog, onda dodajemo novu vrednost u postojei
$t est var i abl e. U tom procesu, promenljiva menja sadraj i umesto broja uzaima niz
znakova:

$testvariable = "Tri";

Isti znak koji smo uzeli u prethodna dva izraza (=) zove se "operator dodele"
i koristimo ga da bi promenljivoj dodelili neku vrednost. Takoe moemo koristiti
razne matematike operacije:
Achilles

$t est var i abl e = 1 + 1; / / Dodaj e vr ednost 2.
$t est var i abl e = 1 1; / / Dodaj e vr ednost 0.
$t est var i abl e = 2 * 2; / / Dodaj e vr ednost 4.
$t est var i abl e = 2 / 2; / / Dodaj e vr ednost 1.

Na kraju svake linije nalazi se komentar. Komentari nam slue da bi opisali
ta radi na kod. To radimo ubacivanjem objanjenja u kod i naznakom da PHP treba
da ih ignorie. Komentari poinju sa // i zavravaju se prelaskom u novi red.
Vratimo se sada na nae izraze. Operatori koje smo uzeli dozvoljavaju da
dodamo, oduzmemo, pomnoimo i podelimo brojeve. Izmeu ostalog, tu su takoe
operatori za spajanje niza znakova:

/ / Spaj anj e ni za " Hej t i ! " .
$t est var i abl e = " Hej " . " t i ! " ;

Promenljive moemo koristiti i na sledei nain:

$var 1 = " PHP" ; / / Dodaj e vr ednost " PHP" u $var 1
$var 2 = 5; / / Dodaj e vr ednost 5 u $var 2
$var 3 = $var 2 + 1; / / Dodaj e vr ednost 6 u $var 3
$var 2 = $var 1; / / Dodaj e vr ednost " PHP" u $var 2
echo( $var 1) ; / / I spi suj e " PHP"
echo( $var 2) ; / / I spi suj e " PHP"
echo( $var 3) ; / / I spi suj e 6
echo( $var 1 . " zakon! " ) ; / / I spi suj e " PHP zakon! "
echo( " $var 1 zakon! " ) ; / / I spi suj e " PHP zakon! "
echo( ' $var 1 zakon! ' ) ; / / I spi suj e ' $var 1 zakon! '

Posebno razmotrimo poslednje dve linije. Moemo ukljuiti ime
promenljive unutar niza znakova. To moemo uradti na dva naina - izmeu
dvostrukih i jednostrukih navodnika, a prethodni primer nam pokazuje u emu je
razlika.


Korisniki uticaj (interakcija) i forme

Za veinu zanimljivih aplikacija u PHP jako je bitan uticaj korisnika koji
poseuje web stranu. Server-side scripting jezik kao PHP moe da ima mnoga
ogranienja rada kada dolazi do uticaja posetioca sajta.
Ideja korisnikovih uticaja na PHP se bazira na slanju informacija sa
zahtevom korisnika na novu stranu.
Najjednostavniji metod za slanje informacija na stranu je uz pomo "URL
query string". Ako ste nekad videli URL sa znakom pitanja iza imena fajla, videli ste
primenu ove tehnike. Evo jedan jednostavan primer. Napravimo standardan HTML
fajl i ubacimo sledei link:

<A HREF="welcome.php?ime=Petar"> Zdravo ja sam Petar! </A>

Taj link ka fajlu nazovimo welcome.php, ali u dopuni za linkovanje smo
takoe ubacili promenljivu sa zahtevom strane. Promenljivu smo nazvali ime, a njena
vrednost je Petar. Da bi videli efekat, potrebno je da napravimo stanicu koja e
prihvatiti vrednost Petar na mesto ime i to proslediti u HTML kod.
Achilles
Napravimo sada novi HTML fajl, ali sa ekstenzijom .php, posto e sadrati i
PHP kod. Dakle, nazovimo ga welcome.php:

<?php
echo( " Dobr odosao na nas saj t , $i me! " ) ;
?>

Sada ako kliknemo na link iz prvog fajla, on e pozvati drugi fajl i na ekranu
ispisati "Dobrodosao na nas sajt, Petar!". Vrednost promenljive je preko upita
automatski prosleena u PHP i postavljena na mesto promenljive $i me koja je deo
niza znakova koji se prikazuje.
Takoe, ako elimo, moemo proslediti vie vrednosti u upitu. Da bi to
pokazali modifikovaemo prethodni primer:

<A HREF="welcome.php?ime=Petar&prezime=Petrovic">
Zdravo, ja sam Petar Petrovic! </A>

Sada smo prosledili dve promenljive i me i pr ezi me. Promenljive su u upitu
odvojene znakom &. Takoe sada nam trebaju i dve promenljive u fajlu welcome.php:

<?php
echo( " Dobr odosao na nas saj t ,
$i me $pr ezi me! " ) ;
?>

Ovo je sve dobro, ali nedostaje korisniki uticaj, zato emo omoguiti
korisniku da unese svoje podatke. Nastaviemo sa ovim primerom "poruke za
dobrodolicu"... elimo da dopustimo da korisnik sam unese svoje podatke, koji e
mu se pokazati u poruci. Da bi to uradili potreban nam je sledei HTML kod:

<FORM ACTI ON=" wel come. php" METHOD=GET>
I me: <I NPUT TYPE=TEXT NAME=" i me" ><BR>
Pr ezi me: <I NPUT TYPE=TEXT NAME=" pr ezi me" >
<I NPUT TYPE=SUBMI T VALUE=" GO" >
</ FORM>

Ova forma ostavlja isti evekat kao i drugi link koji o kome smo malopre
priali, osim to sada korisnik sam upisuje svoje podatke. Kada klinkne na submit
dugme (koje u ovom sluaju ima vrednost GO), browser ce uitati stranicu
welcome.php i automatski promenljivama dodeliti vrednosti koje je korisnik uneo.
Uzima ime promenljive NAME, sa dodatkom INPUT TYPE=TEXT i uzima vrednost
koju je korisnik uneo u tekstualno polje.
Re METHOD je dodatak taga FORM koji se koristi da kae browser-u
kako da poalje promenljive i njihove vrednosti u zahtev. Vrednost GET (koju smo
koristili u prethodnom primeru) kae da zahtev ubaci u upit, ali ima i drugih
alternativa. Tanije, nije uvek poeljno ( ili nije tehniki izvodljivo ) imati vrednosti
koje se pokazuju u upitu.
ta da smo npr. ubacili TEXTAREA tag u nau formu i da korisnik unese tekst velike
duine. URL bi sadrao nekoliko paragrafa teksta u upitu, bio bi besmisleno dugaak,
i prelazio bi maksimalnu dozvoljenu duinu za upisivanje URL u browser-u.
Alternativno reenje, je "nevidljivo" ubacivanje informacija, iza "scene". Kod za to je
potpuno isti, ali umesto podeavanja METHOD-a na GET mi postavljamo na POST.
Achilles

<FORM ACTI ON=" wel come. php" METHOD=POST>
I me: <I NPUT TYPE=TEXT NAME=" i me" ><BR>
Pr ezi me: <I NPUT TYPE=TEXT NAME=" pr ezi me" >
<I NPUT TYPE=SUBMI T VALUE=" GO" >
</ FORM>

Ova forma funkcionie identino kao prethodna. Jedina razlika je URL, koji
nee imati upit, kada korisnik klikne na dugme "GO". Sada moemo ubaciti i velike i
osetljive (npr. lozinke) vrednosti u slanju podataka iz forme, bez prikazivanja upita.
Drugo, ako korisnik stranu sauva u "bookmarks", strana e biti beskorisna i nee
sadrati nikakve vrednosti.
Ovaj ablon je osnova za korienje formi, za izvravanje elementarne
interakcije izmeu korisnika i PHP. Mi emo taj ablon unapreivati u narednim
primerima.


Kontrola konstrukcije (strukture)

Svi dosadanji primeri PHP koda mogu biti jednostavni, "jedno-iskazni"
skriptovi kao izlazni nizovi znakova na web strani ili mogu imati seriju iskaza koji e
se izvravati posle neke naredbe. Ko je radio u programskim jezicima kao to su
JavaScript, C, BASIC... zna da su ti programi ponekad veoma jednostavni.
PHP za razliku od drugih programskih jezika, sadri specijalne iskaze koji
dozvoljavaju "skretanje" nakon neke izvrne naredbe koja je dominanta u naim
primerima. Takve izraze zovemo "kontrola strukture". Ako nita niste razumeli, ne
brinite, slede nekoliko primera, koji e vam sigurno pomoi da shvatite ovu priu.
Najjednostavniji i najei oblik "kontrole strukture" je if-else iskaz. Evo
kako on izgleda :

i f ( <usl ov> ) {
/ / i zr az koj i ce bi t i i zvr sen
/ / ako j e <usl ov> t acan.
} el se {
/ / ( Opci ono) i zr az koj i ce bi t i i zvr sen
/ / ako j e <usl ov> ne t acani s.
}

Ova kontrola strukture govori PHP da izvri jedan ili drugi set iskaza,
zavisno da li je uslov taan ili netaan. Sada emo prikazati malopreanji primer u
malo izmenjenom obliku:

i f ( $i me == " Pet ar " ) {
echo( " Pet r e, poseban pozdr av za t ebe! " ) ;
} el se {
echo( " Dobr odosao, $i me! " ) ;
}

Sada ako promenljiva ima vrednost Petar ispisae se specijalna poruka, a
ako nema pojavie se standardna poruka.
Takoe u prethodnom primeru se pojavljuje klauzula else koja nam govori
ta da radimo ako uslov (if) nije zadovoljen. Ona je opciona i moemo je izostaviti,
Achilles
ako npr. elimo da ispiemo specijalnu poruku za odreeno ime, a prazan ekran u
suprotnom. Tada bi kod izgledao otprilike ovako:

i f ( $i me == " Pet ar " ) {
echo( " Pet r e, poseban pozdr av za t ebe! " ) ;
}

U prethodnom uslovu smo koristili == da bi uporedili dve vrednosti i videli
da li su jednake. Vano je zapamtiti da se upotrebljava dvostruki znak jednakosti, zato
to jednostruki slui za dodeljivanje vrednosti, o emu smo ranije priali, pa bi umesto
uporeivanja dodelili novu vrednost promenljivoj.
Da bi se zatitili od uobiajenih greaka, primenjujemo trik zamene pozicija
promenljive i konstante u poreenju, kao u sledeem primeru:

i f ( " Pet ar " == $i me ) {

Dobijamo isti efekat, ali pogledajmo ta e se desiti ako grekom napiemo
samo jedan znak jednakosti. PHP e pokuati da dodeli vrednost promenljive ($ime)
konstantnoj vrednosti (Petar). Poto ne moe promeniti vrednost konstante, PHP e
blokirati i na ekranu e se pojaviti poruka o greci i odmah e nam skrenuti panju da
smo zaboravili jo jedan znak jednakosti.
Uslovi mogu biti i komplikovaniji. Sada emo malo modifikovati prethodni
primer, da bi pokazali i malo sloeniju varijantu:

i f ( " Pet ar " == $i me and " Pet r ovi c" == $pr ezi me ) {
echo( " Pet r e, poseban pozdr av za t ebe! " ) ;
}

Uslov e biti taan ako i samo ako $ime ima vrednost Petar, a $prezime ima
vrednost Petrovic. Re and u prethodnom primeru, pravi ceo uslov taan samo ako su
obe vrednosti tane. Drugi takav operator je or koji ini da uslov bude taan, ako je
taan bar jedan od dva jednostavna uslova. Slino kao to su u JavaScript ili C && i | | .
Sada emo pogledati malo komplikovanija poredjenja. Za poetak, osnovne
slinosti sa if-else iskazima su dovoljne.
Druga, takoe veoma esto koriena kontrola strukture je while petlja. Sa
if-else iskazima mi odluujemo da li emo i koji iskaz da upotrebimo, dok sa while
odreujemo koliko puta e se odreeni set naredbi izvriti. Evo jednog primera while
petlje:

whi l e ( <usl ov> ) {
/ / i zr az( i ) koj i ce se i zvr savat i
/ / sve dok <condi t i on>
/ / bude bi o t acan
}

Rad je veoma slian if-else iskazu, ali bez else klauzule. Rzlika je u tome
to umesto da nastavi izvravanja sledeeg izkaza, rad se nastavlja u okviru while
petlje i uslov se proverava ponovo. Ako je iskaz taan set naredbi se izvrava drugi
put, ako je opet taan onda i trei, etvrti... Prvi put kada iskaz ne bude taan,
nastavlja se dalje od kraja bloka (odnosno od }).
Petlja se koristi kada se radi sa velikim listama, ali emo sada to ilistrovati
na jednom trivijalnom primeru (brojanje do deset):

Achilles
$count = 1;
whi l e ( $count <= 10) {
echo( " $count " ) ;
$count ++;
}

Sve to deluje lako, ali hajde da ipak sve to objasnim red po red.
Prva linija kreira promenljivu $count i dodeljuje joj vrednost 1. U drugoj
liniji poinje while petlja i uslov da je vednost $count manja ili jednaka 10. Trea i
etvrta linija ine telo while petlje i bie izvravane, sve dok uslov bude bio taan.
Trei je jednostavno ispisivanje vrednosti sa $count blankom. etvrta je poveavanje
vrednosti za 1 (Inae $count++ je skraenica za $count = $count +1 ).
Sada smo videli ta se deava sa delovima koda pri izvravanju. Prvo se
proverava uslov, vrednost $count je 1, sto je oigledno tano i ispisuje se vrednost
$count(1). Sada $count dobija novu vrednost 2, ponovo se proverava i poto je i ona
tana, onda se i ona ispisuje i nastavlja se dalje 3, 4, 5, 6, 7, 8, 9, 10. Konano $count
dobija vrednost 11 sto ne ispunjava uslov i tu se zavrava proces. Na kraju kao
rezultat dobijamo niz "1 2 3 4 5 6 7 8 9 10".
Takoe mozemo koristiti i ostale poredbene operatore <= (manje i jednako),
>= (vee i jednako), < (manje), > (vee), != (nije jednako). Poslednji se takoe koristi
i kada se uporeuju tekstualni nizovi.


Vienamenske stranice

Pretpostavimo da elimo da konstruiemo sajt, tako da ime posetioca bude
prikazano na vrhu svake strane. Sa naim primerom "poruke za dobrodolicu", smo
ve na pola puta. Ovde treba da proirimo problem, pa bi bilo dobro da prvo vidimo
kako emo to da uradimo:
- Potrebno nam je ime na svakoj strani sajta, a ne samo na jednoj
- Nemamo kontrolu koju e stranu posetilac prvo pogledati

Problem i nije tako teko savladati. Ako jednom uzmemo korisnikovo ime
moemo ga postaviti kao promenljivu na stranicu i moemo ga ubaciti sa svakim
zahtevom za narednu stranu uz dodatak imena upitu za svaki link. To bi izgledalo
otprilike ovako:

<A HREF=" newpage. php?name=<?php echo( ur l encode( $i me) ) ; ?>" > Li nk </ A>

Napomenimo da imamo pravo ugraditi u PHP kod izvesne HTML tagove.
To je potpuno ispravno i sve e raditi savreno. Upoznali smo se sa echo funkcijom,
ali urlencode je nova. Sta se deava ako funkcija naie na specijalne karaktere (kao
to je npr. blanko) i konvertuje to u specijalne kodove, neophodne da bi mogao da se
ispie upit. Npr. ako je promenljiva $ime koja ima vrednost "Petar Petrovic", tada
blanko ne moe da se nae u nizu upita, tada e izlaz urlencode biti "Petar+Petrovic",
koji e se automatski konvertovati u $ime promenljivu na novoj strani.
OK sada moemo da ime posetioca sajta ubacimo na svaku stranicu. Sada
sve to nam je potrebno je da uzmemo ime na prvom mestu. U npr. naoj "poruci za
dobrodolicu", mi smo imali HTML stranu sa koje smo dostavljali ime posetioca
naeg sajta. Problem sa ovim je to ne moemo niti elimo traiti od posetioca da
upisuje to svaki put kada poseti na sajt.
Achilles
Reenje je da na svakoj stranici naeg sajta, proveravamo da li je ime
specificirano i traiti ime posetiocu ako je potrebno. Taj nain da se na svakoj stranici
naeg sajta ispie bilo koji sadraj ili zatrai upis imena, zavisi da li promenljiva $ime
ima neku vrednost. Kod za vie-namensku stranu izgleda otprilike ovako:

<HTML>
<HEAD>
<TI TLE> Vi senamenska st r ana </ TI TLE>
</ HEAD>
<BODY>


<?php i f ( <usl ov>) { ?>

<! sadr zaj HTML koj i ce se i spi sat i ako j e <condi t i on> t acan - - >

<?php } el se { ?>



<! sadr zaj HTML koj i ce se i spi sat i ako j e <condi t i on> ne t acan - - >

<?php } ?>

</ BODY>
</ HTML>

Moe delovati malo zbunjujue na prvi pogled, ali u sutini to je obian if-
else iskaz sa delom HTML koda. Ovaj primer ilustruje jedan veliki adut PHP: da kad
god poelis moe izai iz PHP koda. Tako oznaka <?php znai ulazak u "PHP mod",
a ?> znaci izlazak iz njega i povratak u normalan HTML kod, a prethodni primer
pokazuje kako se pravi odlina kombinacija te dve stvari.
To je izvesna naizmenina forma if-else iskaza, koji ini na kod znatno
itljivijim u situacijama kao to je ova. Ovo je izlazna strana za vienamensku stranu
koja koristi naizmenino if-else iskaze:

<HTML>
<HEAD>
<TI TLE> Vi senamenska st r ana </ TI TLE>
</ HEAD>
<BODY>

<?php i f ( <usl ov>) : ?>

<! sadr zaj HTML koj i ce se i spi sat i ako j e <condi t i on> t acan - - >

<?php el se: ?>

<! sadr zaj HTML koj i ce se i spi sat i ako j e <condi t i on> ne t acan - - >
<?php endi f ; ?>
</ BODY>
</ HTML>

OK, ajde da sada pogledamo ovu stranu sa svim dodacima koji su potrebni:

<HTML>
<HEAD>
<TI TLE> Pr obna st r ana </ TI TLE>
Achilles
</ HEAD>
<BODY>

<?php i f ( i sset ( $i me) ) : ?>

<P>I me: <?php echo( $i me) ; ?></ P>

<P>Ovaj pasus sadr zi
<A HREF=" newpage. php?name=<?php echo( ur l encode
( $i me) ) ; ?>" >l i nk</ A> ovaj pasus
j e i me pr omenl j i ve sl ececeg dokument a. </ P>

<?php el se: ?>

<FORM ACTI ON=<?php echo( $PHP_SELF) ; ?> METHOD=GET>
Upi si t e vase i me: <I NPUT TYPE=TEXT NAME=" i me" >
<I NPUT TYPE=SUBMI T VALUE=" GO" >
</ FORM>

<?php endi f ; ?>

</ BODY>
</ HTML>

Ubacili smo dva nova trika u prethodni kod i dobili smo zgodniji i komforniji
nain rada. Prvo smo uveli novu funkciju isset u uslovu. Funkcija vraa (izlazno)
tanu vrednost, ako je promenljivoj dodata neka vrednost, i netano ako promenljiva
ne postoji. Drugi trik koji smo upotrebili je da je promenljiva $PHP_SELF naznaena
kao dodatak ACTION u FORM tagu. Ova promenljiva je jedna od nekoliko kojima
PHP automatski dodeljuje vrednost. Konkretno $PHP_SELF e uvek biti podeena
kao aktuenlna strana. To nam omoguava da lake kreiramo FORM, kada poaljemo
on e uitati veoma slinu stranu, ali sada sa promenljivom $ime koja je specificirana.
Pomou konstrukcije svih strana na naem sajtu, na ovaj nain, posetilac e
proslediti svoje ime na prvoj strani kojoj pristupi, ma koja to strana bila. Gore
uneeno njegovo ime pritiskom na "GO" e pretstaviti sa tanom stranom gde je
zahtev. Ime koje se unese bie prosleeno u upitnik svakog linka kojem bude hteo
pristupiti.



Predstavljenje podataka iz MySQL baze na web

Sada emo nauiti kako se uzimaju podaci sauvani u bazi i prikazuju na web
strani. Poto smo naucili kako se instalira i osnovno o MySQL, kao i kako se koriste
neke osnovne komande PHP, server-side scripting jezika. Sada nastavljamo,
videemo kako moemo da ove dve stvari koristimo zajedno da bi kreirali bazu
koristei web stranu !

Povezivanje sa MySQL pomou PHP

Pre nego to preuzmemo sadraj iz nae MySQL baze i ubacimo ga na na
web sajt, prvo moramo znati kako se uspostavlja veza sa MySQL bazom. Vratimo se
na prethodnu lekciju (br. 1), koristili smo program mysql, koji je dozvoljavao da
ostvarimo tu vezu. PHPu, meutim, nije potreban specijalan program da bi ostvario tu
Achilles
vezu; u sam jezik je ugraena podrka za povezivanje sa MySQL bazom. Sledea
PHP funkcija uspostavlja vezu:

mysql_connect(<address>, <username>, <password>);

Gde <address> predtsavlja IP ili hostname kompjutera na kome se nalazi
MySQL sa kojim elimo da uspostavimo vezu ("l ocal host ", ako se pokree na istom
kompjuteru), a <username> i <password> su isti kao oni o kojima smo priali u lekciji
br. 1.
Funkcija mysql_connect, vraa broj kao potrvdu da je uspostavljena veza.
Poto elimo da uspostavimo obinu vezu, mi emo prihvatiti tu vrednost.Evo primera
kako moemo uspostaviti vezu sa nasim MySQL sevrverom:


$dbcnx = mysql_connect("localhost", "root", "mypasswd");

Kao to smo ve rekli fukncija se sastoji od tri vrednosti koje su karakteristine za
svaki MySQL server. Ono to je vano ovde primetiti je da se vrednost koju vraa
mysql_connect, uva u promenljivoj $dbcnx.
Posto je MySQL server potpuno zaseban deo, moramo predvideti mogunost
da je server "nedosutpan" ili da postoji posebna dozvola pristupa ili da
username/password nije ispravan. U tom slucaju mysql_connect nee vratiti nikakav
indikator (da veza nije uspostavljena). Umesto toga, prijavie greku. Da bi premostili
taj problem koristimo i f iskaz :

$dbcnx = @mysql _connect ( " l ocal host " , " r oot " , " mypasswd" ) ;
i f ( ! $dbcnx) {
echo( " <P>Tr enut no ni j e moguce pr i st upi t i " .
" ser ver u sa bazom. </ P>" ) ;
exi t ( ) ;
}

Uveli smo tri nova trika u ovom delu koda. Prvo, ubacili smo @ispred
mysql_connect funkcije. Mnogo funkcija, ukljuuje mysql_connect i automatski
ispisuje "runu" poruku o greci kada je neispravno. Ubacivanjem znaka @isped
imena funkcije, omoguavamo da mi sami upiemo nau porku za greku (koja e
imati mnogo lepi oblik).
Dalje, stavili smo znak uzvika pre promenljive $dbcnx u uslovu sa i f
iskazom. Operator ! u PHP znai negaciju, koja u sutinu prebacuje netaan iskaz u
taan ili obrnuto. Prema tome, ako je ova konekcija neuspena vraa "netano",
$dbcnx e se vrednovati kao tano i to e uticati da se iskaz iz naeg i f iskaza izvri.
Ako se uspostavi veza, identifikator konekcije, sauvan u $dbcnx e pokazati
"tano" (svaki broj sem nule u PHP, predstavlja tanu vrednost), pa e !$dbcnx biti
netano i i f iskaz se nee izvriti.
Trei trik je funkcija exit, koja je prvi primer funkcije koja ne zahteva nikakve
parametre. Sve funkcije prestaju da se itaju na tom mestu. To je dobra rekacija na
loe uspostavljenu vezu sa bazom.
Sledei korak je uspostavljanje veze sa bazom sa kojom elimo da radimo.
Poto je ve kreirana, sada emo samo nastaviti rad sa naom bazom Vicevi. Izbor
baze u PHP je uz pomo sledee konstrukcije :

Achilles
mysql_select_db("vicevi", $dbcnx);

Koristimo promenljivu $dbcnx koja sadri identifikator o povezanosti sa
bazom da kae funkciji koju bazu da upotrebi sa konekcijom. Taj parametar je
opcioni. Kada krene, funkcija e automatski uzeti link identifikator za poslednju
ostvarenu vezu. Funkcija vraa tano, kada je uspeno i netano kada se javi greka.
Jo jednom, treba biti oprezan prilikom korienja i f iskaza za signaliziranje greke:

i f ( ! @mysql _sel ect _db( " vi cevi " ) ) {
echo( " <P>Tr enut no ne moze da l oci r a " .
" bazu vi cevi . </ P>" ) ;
exi t ( ) ;
}

Poto je veza uspostavljena i izabrana baza, sada smo spremni da ponemo sa
korienjem potadaka sauvanih u bazi.


Prikazivanje SQL upita pomou PHP

PHP ima slian mehanizam onom koga smo opisali u provom delu skripte, a
koji se ostvaruje uz pomo mysql_query funkcije.

mysql_query(<query>, <connection id>);

Gde je <query> niz koji sadri SQL komande koje e se izvriti. Kao i sa
mysql_select_db identifikator konekcije je opcion.
ta e funkcija vratiti zavisi od tipa upita koji je poslat. Za veinu funkcija
mysql_query e vratiti "tano" ili "netano", kao indikator uspeha ili neuspeha.
Pogledajmo sledei primer, koji treba da napravi tabelu Vicevi, koju smo mi kreirali u
prethodnom delu.

$sql = " CREATE TABLE Vi cevi ( " .
" I D I NT NOT NULL AUTO_I NCREMENT PRI MARY KEY, " .
" Vi cText TEXT, " .
" Vi cDat e DATE NOT NULL " .
" ) " ;
i f ( mysql _quer y( $sql ) ) {
echo( " <P>Tabel a Vi cevi j e uspesno kr ei r ana! </ P>" ) ;
} el se {
echo( " <P>Gr eska pr i l i komkr ei r anj a baze Vi cevi : " .
mysql _er r or ( ) . " </ P>" ) ;
}

Funkcija mysql_error koja je upotrebljena, vraa niz teksta sa opisom
poslednje greke, poslate sa MySQL servera.
Za DELETE, INSERT i UPDATE upite (koji slue za promenu sauvanih
podataka), MySQL takoe, uva track broja redova tabele (upisa) koji su obuhvaeni
upitom. Pogledajmo sledeu komandu, koju smo koristili u prethodnom delu da
podesimo datume svih viceva koji sadre re "zec".

$sql = " UPDATE Vi cevi SET Vi cDat e=' 2000- 10- 04' " .
" WHERE Vi cText LI KE ' %zec%' " ;
Achilles

Kada se izvri upit, moemo koristiti funkciju mysql_affected_rows da vidimo
broj redova koji su obuhvaeni ovom promenom.

i f ( mysql _quer y( $sql ) ) {
echo( " <P>Ef ekt i azur i r anj a" .
mysql _af f ect ed_r ows( ) . " r ows. </ P>" ) ;
} el se {
echo( " <P>Gr eska: " .
mysql _er r or ( ) . " </ P>" ) ;
}



Manipulisanje rezultatima pomou SELECT

Upiti SELECT su malo drugaiji u odnosu na ostale komande....
Za veinu SQL upita, funkcija mysql_query vraa uglavnom tano (uspeno) i
netano (neuspeno). Za SELECT to nije dovoljno. Pozivamo SELECT funkciju da bi
videli podatke sauvane u bazi. U dodatku indikatora, da li je je upit uspean ili
neuspean, PHP takoe mora da primi rezultat upita. Kao rezultat poziva SELECT,
mysql_query vraa broj identifikator "podeenosti rezultata", dobija se lista redova
(sadraj baze). Greka se ne vraa, ako je upit lo iz bilo kog razloga.

$r esul t = mysql _quer y( " SELECT Vi cText FROM Vi cevi " ) ;
i f ( ! $r esul t ) {
echo( " <P>Gr eska: " .
mysql _er r or ( ) . " </ P>" ) ;
exi t ( ) ;
}

Sa sigurnou moemo rei da nee biti greke u upitu. Prethodni primer e u
rezultatu sadrati tekst sa svim vicevima, sauvanim u tabeli vicevi kroz promenljivu
$result. Poto praktino nemamo ogranienje broja viceva u bazi, rezultat koji
dobijemo moe biti previe veliki.
Da bi razjasnili while petlju, koju smo ranije spomenuli, pozabaviemo se
sledeim primerom:

$row = mysql_fetch_array($result);

Funkcija mysql_fetch_array prihvata rezultat i setuje ga kao parametar (uva u
promenljivoj $result u ovom sluaju), i vraa sledei red u rezultatu kao niz. Ako vam
nije poznat koncept nizova sada emo ga ukratko objasniti. Kada nema vie kolona
rezultat se podeava na, mysql_fetch_array umesto vraanja greke.

U prethodmom primeru, naznaena je promenljiva $row, ali u isto vreme itav
iskaz uzima istu vrednost. To je kao kada uzimamo uslov while u petlji. Poto while
petlje uvaju petlju dok uslov ne postane netaan, petlja se deva vie puta u
ispisivanju rezultata, sa $row se uzima vrednost sledee kolone svakim prolazom kroz
petlju. Svi ti izlazi se pojavljuju napolju.
Redovi se u rezultatu prikazuju kao nizovi. Niz je specijalni tip promenljive
koji sadri mnogo vrednosti. Ako zamislimo promenljivu kao kutiju koja sadri
Achilles
vrednosti, onda bi niz mogao da bude kao kutija sa odeljcima, gde svaki odeljak moe
da se sauva kao posebna vrednost. U sluaju redova nae baze, odeljci su imena
posle tabele kolona u naem rezultatu. Ako je $row red u naem rezultatu tada
$row["VicText"] je vrednost u kolini VicText reda. Evo sada i kako bi izgledala while
petlja ako bi hteli da ispiemo tekstove svih viceva iz nae baze :

whi l e ( $r ow = mysql _f et ch_ar r ay( $r esul t ) ) {
echo( " <P>" . $r ow[ " Vi cText " ] . " </ P>" ) ;
}

Da bi sada sve to sumirali, pogledajmo kompletan kod PHP web strane,
povezivanje sa bazom, preuzimanje teksta svih viceva iz nae baze i ispisivanje u
HTML paragrafima:

<HTML>
<HEAD>
<TI TLE> Li st a nasi h vi ceva </ TI TLE>
<HEAD>
<BODY>
<?php

/ / Povezi vanj e sa ser ver ombaze
$dbcnx = @mysql _connect ( " l ocal host " ,
" r oot " , " mypasswd" ) ;
i f ( ! $dbcnx) {
echo( " <P>Tr enut no ne moze " .
" da se pr i st upi bazi . </ P>" ) ;
exi t ( ) ;
}

/ / Odabi r baze vi cevi
i f ( ! @mysql _sel ect _db( " vi cevi " ) ) {
echo( " <P>Tr enut no ne moze da se " .
" poveze sa bazomvi cevi . </ P>" ) ;
exi t ( ) ;
}

?>
<P> Ovo su vi cevi koj i se nal aze u nasoj bazi : </ P>
<BLOCKQUOTE>

<?php

/ / Zaht ev za t ekst ovi ma vi ceva
$r esul t = mysql _quer y(
" SELECT Vi cText FROM Vi cevi " ) ;
i f ( ! $r esul t ) {
echo( " <P>Gr eska: " .
mysql _er r or ( ) . " </ P>" ) ;
exi t ( ) ;
}


/ / I spi si vanj e vi ceva
whi l e ( $r ow = mysql _f et ch_ar r ay( $r esul t ) ) {
echo( " <P>" . $r ow[ " Vi cText " ] . " </ P>" ) ;
}

?>
Achilles

</ BLOCKQUOTE>
</ BODY>
</ HTML>


Ubacivanje podataka u bazu

U ovom delu videemo kako moemo da koristimo sve razpoloive alate da bi
omoguili posetiocima naeg sajta da ubace njihov vic u bazu. U ovom delu je jako
malo novog materijala. U sutini to je skup svega sto smo uili do sada.
Ako elimo da omoguimo posetiocima naeg sajta da upiu svoj vic u bazu,
neophodno je da obezbedimo formu.

<FORM ACTI ON=" <?php echo( $PHP_SELF) ; ?>" METHOD=POST>
<P>Upi si vi c: <BR>
<TEXTAREA NAME=" vi ct ext " ROWS=10 COLS=40 WRAP></ TEXTAREA><BR>
<I NPUT TYPE=SUBMI T NAME=" posal j i " VALUE=" SUBMI T" >
</ FORM>

Kao to smo ranije videli, kada poaljemo ovu formu, uitaemo veoma slinu
stranu (ponovo smo koristili promenljivu $PHP_SELF kao dodatak ACTION), ali sa
dve promenljive dodate zahtevu. Prvo $victext sadri tekst vica koji je unet u text
area. Drugo $posalji sadri vrednost SUBMI T koja slui da bi tekst bio poslat.
Za ubacivanje vica u bazu, koristimo samo mysql_query da bi pokrenuli
INSERT upit, koristimo promenljivu $victext da bi poslali vrednost

i f ( " SUBMI T" == $posal j i ) {
$sql = " I NSERT I NTO Vi cevi SET " .
" Vi cText =' $vi ct ext ' , " .
" Vi cDat e=CURDATE( ) " ;
i f ( mysql _quer y( $sql ) ) {
echo( " <P>Tvoj vi c j e upi san u bazu. </ P>" ) ;
} el se {
echo( " <P>Gr eska: " .
mysql _er r or ( ) . " </ P>" ) ;
}
}

Jo jedan novi trik u prethodnom primeru. Iskoristili smo MySQL funkciju
CURDATE() da bi upisali trenutan datum kao vrednost promenljive VicDate kolone.
MySQL sadri gomilu takvih funkcija, ali mi emo za sada uvesti samo ovu. Ostale
funkcije, e se pored ostalog nalaziti u dodatku kompletne verzije "Vodia kroz PHP i
MySQL".
Sada imamo kod koji dozvoljava korisniku da unese vic i da ga ubaci u bazu
podataka. Sada je ostalo jo samo da ukomponujemo sve to smo nauili u jednu
stranu web stranu. Evo kako bi to izgledalo:

<HTML>
. . .
<BODY>
<?php
/ / Ako kor i sni k zel i da doda vi c
i f ( i sset ( $dodaj vi c) ) :
?>
Achilles

<FORM ACTI ON=" <?php echo( $PHP_SELF) ; ?>" METHOD=POST>
<P>Upi s vi c: <BR>
<TEXTAREA NAME=" vi ct ext " ROWS=10 COLS=40 WRAP>
</ TEXTAREA><BR>
<I NPUT TYPE=SUBMI T NAME=" posal j i " VALUE=" SUBMI T" >
</ FORM>


<?php
el se:

/ / Povezi vanj e sa bazomna ser ver u
$dbcnx = @mysql _connect ( " l ocal host " ,
" r oot " , " mypasswd" ) ;
i f ( ! $dbcnx) {
echo( " <P>Tr enut no ni j e moguce " .
" ost var i t i konekci j u sa bazom. </ P>" ) ;
exi t ( ) ;
}

/ / Bi r amo bazu vi cevi
i f ( ! @mysql _sel ect _db( " vi cevi " ) ) {
echo( " <P>Tr enut no ni j e moguce " .
" pr i st upi t i bazi vi cevi . </ P>" ) ;
exi t ( ) ;
}

/ / Ako j e vi c posl at ,
/ / dodaj emo ga u bazu.
i f ( " SUBMI T" == $posal j i ) {
$sql = " I NSERT I NTO Vi cevi SET " .
" Vi cText =' $vi ct ext ' , " .
" Vi cDat e=CURDATE( ) " ;
i f ( mysql _quer y( $sql ) ) {
echo( " <P> Tvoj vi c j e upi san u bazu. </ P>" ) ;
} el se {
echo( " <P>Gr eska: " .
mysql _er r or ( ) . " </ P>" ) ;
}
}

echo( " <P> Ovo su vi cevi koj i " .
" se nal aze u nasoj bazi : </ P>" ) ;

/ / Zaht evamo i spi s svi h vi ceva i z baze
$r esul t = mysql _quer y(
" SELECT Vi cText FROM Vi cevi " ) ;
i f ( ! $r esul t ) {
echo( " <P>Gr eska: " .
mysql _er r or ( ) . " </ P>" ) ;
exi t ( ) ;
}

/ / I spi suj emo sve vi ceve i z baze na web st r anu
whi l e ( $r ow = mysql _f et ch_ar r ay( $r esul t ) ) {
echo( " <P>" . $r ow[ " Vi cText " ] . " </ P>" ) ;
}

/ / Kada kor i sni k kl i kne na ovaj l i nk
/ / ot vor i mu se st r ana za upi si vanj e vi ceva.
Achilles
echo( " <P><A HREF=' $PHP_SELF?dodaj vi c=1' >" .
" Dodaj vi v! </ A></ P>" ) ;

endi f ;

?>
</ BODY>
</ HTML>

To je to ! Sa jednim dokumentom koji sadri mali PHP kod mi smo u
mogunosti da vidimo i dodamo viceve u nau MySQL bazu.


Achilles

You might also like