Professional Documents
Culture Documents
Vodic Kroz PHP I MySQL PDF
Vodic Kroz PHP I MySQL PDF
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 localhost. <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)
+----------+
| Database |
+----------+
| mysql
|
| test
|
+----------+
2 rows in 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
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 Vicevi (
-> ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> VicText TEXT,
-> VicDate DATE NOT NULL
-> );
Achilles
...
Takoe vana stavka je brisanje tabele, koja je takoe jednostavna (kao i sve
prethodne). Tabelu emo obrisati ako napiemo sledeu komandu :
mysql> DROP TABLE <imeName>;
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...
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
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;
+----+----------------------+------------+
| ID | LEFT(VicText,20)
| VicDate
|
+----+----------------------+------------+
| 1 | Zasto zec ima duge
| 2000-04-01 |
+----+----------------------+------------+
1 row in 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 row in set (0.06 sec)
Achilles
Achilles
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>
<TITLE>Danasnji datum</TITLE>
</HEAD>
<BODY>
<P>Danasnji datum (na Web server-u) je
<?php
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>
<TITLE>Danasnji datum</TITLE>
</HEAD>
<BODY>
<P>Danasnji datum (na Web server-u) je
Wednesday, June 17th 2003.</BODY>
</HTML>
Achilles
<HTML>
<HEAD>
<TITLE> Jednostavan primer PHP</TITLE>
</HEAD>
<BODY>
<P><?php echo("Ovo je <B>test</B>!"); ?></P>
</BODY>
</HTML>
ako sauvano ovaj fajl kao test.php i postavimo ga na web server, browser e videti
sledeu stranu:
<HTML>
<HEAD>
<TITLE> Jednostavan primer PHP </TITLE>
</HEAD>
<BODY>
<P>Ovo je <B>test</B>!</P>
</BODY>
</HTML>
Operatori i promenljive
Promenljive u PHP su iste kao i u svim drugim programskim jezicima. U
narednom primeru kreiraemo promenljivu $testvariable (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
$testvariable. 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
$testvariable
$testvariable
$testvariable
$testvariable
=
=
=
=
1
1
2
2
*
/
1;
1;
2;
2;
//
//
//
//
Dodaje
Dodaje
Dodaje
Dodaje
vrednost
vrednost
vrednost
vrednost
2.
0.
4.
1.
Napravimo sada novi HTML fajl, ali sa ekstenzijom .php, posto e sadrati i
PHP kod. Dakle, nazovimo ga welcome.php:
<?php
echo( "Dobrodosao na nas sajt, $ime!" );
?>
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 $ime 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 ime i prezime. Promenljive su u upitu
odvojene znakom &. Takoe sada nam trebaju i dve promenljive u fajlu welcome.php:
<?php
echo( " Dobrodosao na nas sajt,
$ime $prezime!" );
?>
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 ACTION="welcome.php" METHOD=GET>
Ime: <INPUT TYPE=TEXT NAME="ime"><BR>
Prezime: <INPUT TYPE=TEXT NAME="prezime">
<INPUT TYPE=SUBMIT 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
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.
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:
if ( $ime == "Petar" ) {
echo( "Petre, poseban pozdrav za tebe!" );
} else {
echo( "Dobrodosao, $ime!" );
}
Achilles
ako npr. elimo da ispiemo specijalnu poruku za odreeno ime, a prazan ekran u
suprotnom. Tada bi kod izgledao otprilike ovako:
if ( $ime == "Petar" ) {
echo( "Petre, poseban pozdrav za tebe!" );
}
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:
while ( <uslov> ) {
// izraz(i) koji ce se izvrsavati
// sve dok <condition>
// bude bio tacan
}
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;
while ($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(urlencode($ime)); ?>"> Link </A>
Moe delovati malo zbunjujue na prvi pogled, ali u sutini to je obian ifelse 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>
<TITLE> Visenamenska strana </TITLE>
</HEAD>
<BODY>
<?php if (<uslov>): ?>
<!sadrzaj HTML koji ce se ispisati ako je <condition> tacan -->
<?php else: ?>
<!sadrzaj HTML koji ce se ispisati ako je <condition> ne tacan -->
<?php endif; ?>
</BODY>
</HTML>
OK, ajde da sada pogledamo ovu stranu sa svim dodacima koji su potrebni:
<HTML>
<HEAD>
<TITLE> Probna strana </TITLE>
Achilles
</HEAD>
<BODY>
<?php if ( isset($ime) ): ?>
<P>Ime: <?php echo($ime); ?></P>
<P>Ovaj pasus sadrzi
<A HREF="newpage.php?name=<?php echo(urlencode
($ime)); ?>">link</A> ovaj pasus
je ime promenljive slececeg dokumenta.</P>
<?php else: ?>
<FORM ACTION=<?php echo($PHP_SELF); ?> METHOD=GET>
Upisite vase ime: <INPUT TYPE=TEXT NAME="ime">
<INPUT TYPE=SUBMIT VALUE="GO">
</FORM>
<?php endif; ?>
</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.
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 if
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 if 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 if 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 if iskaza za signaliziranje greke:
if (! @mysql_select_db("vicevi") ) {
echo( "<P>Trenutno ne moze da locira " .
"bazu vicevi.</P>" );
exit();
}
Achilles
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 :
while ( $row = mysql_fetch_array($result) ) {
echo("<P>" . $row["VicText"] . "</P>");
}
// Ispisivanje viceva
while ( $row = mysql_fetch_array($result) ) {
echo("<P>" . $row["VicText"] . "</P>");
}
?>
Achilles
</BLOCKQUOTE>
</BODY>
</HTML>
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 SUBMIT 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
if ("SUBMIT" == $posalji) {
$sql = "INSERT INTO Vicevi SET " .
"VicText='$victext', " .
"VicDate=CURDATE()";
if (mysql_query($sql)) {
echo("<P>Tvoj vic je upisan u bazu.</P>");
} else {
echo("<P>Greska: " .
mysql_error() . "</P>");
}
}
Achilles
<?php
else:
// Povezivanje sa bazom na serveru
$dbcnx = @mysql_connect("localhost",
"root", "mypasswd");
if (!$dbcnx) {
echo( "<P>Trenutno nije moguce " .
"ostvariti konekciju sa bazom.</P>" );
exit();
}
// Biramo bazu vicevi
if (! @mysql_select_db("vicevi") ) {
echo( "<P>Trenutno nije moguce " .
"pristupiti bazi vicevi.</P>" );
exit();
}
// Ako je vic poslat,
// dodajemo ga u bazu.
if ("SUBMIT" == $posalji) {
$sql = "INSERT INTO Vicevi SET " .
"VicText='$victext', " .
"VicDate=CURDATE()";
if (mysql_query($sql)) {
echo("<P> Tvoj vic je upisan u bazu.</P>");
} else {
echo("<P>Greska: " .
mysql_error() . "</P>");
}
}
echo("<P> Ovo su vicevi koji " .
" se nalaze u nasoj bazi: </P>");
// Zahtevamo ispis svih viceva iz baze
$result = mysql_query(
"SELECT VicText FROM Vicevi");
if (!$result) {
echo("<P>Greska: " .
mysql_error() . "</P>");
exit();
}
// Ispisujemo sve viceve iz baze na web stranu
while ( $row = mysql_fetch_array($result) ) {
echo("<P>" . $row["VicText"] . "</P>");
}
// Kada korisnik klikne na ovaj link
// otvori mu se strana za upisivanje viceva.
Achilles
echo("<P><A HREF='$PHP_SELF?dodajvic=1'>" .
"Dodaj viv!</A></P>");
endif;
?>
</BODY>
</HTML>
Achilles