|
|
| PREGLED
PO IZDANJIMA |
|

Konekcija
na MySQL bazu podataka (III deo)
Nakon više uvodnih članaka o PHP-u i upoznavanja sa
sintaksom PHP-a, pozabavićemo se - spajanjem sa bazom
podataka koja se nalazi na MySQL serveru

Konekcija
na MySQL bazu podataka (II deo)
Nakon više uvodnih članaka o PHP-u i upoznavanja sa
sintaksom PHP-a, pozabavićemo se - spajanjem sa bazom
podataka koja se nalazi na MySQL serveru

Konekcija
na MySQL bazu podataka (I deo)
Nakon više uvodnih članaka o PHP-u i upoznavanja sa
sintaksom PHP-a, pozabavićemo se - spajanjem sa bazom
podataka koja se nalazi na MySQL serveru

Argumenti
funkcija
Kako iskoristiti dvosmernost Internet komunikacija,
i ostvariti interaktivnost između web servera i web
browsera (posetilaca)

"For"
petlja
Klasična programerska For...Next petlja, ali ovoga
puta u PHP okruženju?

"While"
petlja
Klasična programerska While petlja, ali ovoga puta
u PHP okruženju?

Slanje
teksta u browser
Pogledajte kako se običan tekst i HTML tagovi prosleđuju
browseru uz pomoć PHP-a. Opisanim metodama uglavnom
se vrši i "opisivanje" HTML stranica

Prihvat
varijabli iz formulara
Kako prihvatiti rezultate anketa, glasanja i drugih
formulara u PHP varijable?
|
|
Konekcija
na MySQL bazu podataka
(III deo)
Nakon postavljenog i upućenog upita serveru uz pomoć funkcije
mysql_query, biće potrebno da rezultat sadržan u varijabli
$sql_result formatiramo, tako da ga podelimo na odvojene redove,
u čemu će nam pomoći funkcija mysql_fetch_array:
while
($row = mysql_fetch_array($sql_result)) {
//prog. kod
}
Kao
što vidite, uz pomoć while petlje kreiraćemo niz koji smo
nazvali $row, i to za svaki slog u rezultujućem skupu slogova.
Da bismo dobili pojedinačne elemente sloga, odnosno polja
(Naziv, Tip, Kolicina), kreiraćemo potrebne varijable:
$naziv_proiz
= $row["Naziv"];
$tip_proiz = $row["Tip"];
$kolicina = $row["Kolicina"];
Pošto
je osnovna svrha bilo kog upita prikaz i nekakva analiza podataka,
smestićemo dobijene podatke u HTML tabelu, tj. prikazaćemo
rezultat u takvom obliku da može da ga iščita bilo koji web
browser. Da biste ovo odradili, sledeći HTML kôd smestite
ispred while petlje, kako biste "otvorili" tabelu
i kreirali naslovni red tabele:
echo
"<TABLE BORDER=1>";
echo "<TR>
<TH>Naziv proizvoda</TH>
<TH>Tip</TH>
<TH>Kolicina</TH>
</TR>
";
Nakon
definisanja varijabli unutar while petlje, "odštampaćemo"
ih u tabeli:
echo
"<TR>
<TD>$naziv_proiz</TD>
<TD>$tip_proiz</TD>
<TD>$kolicina</TD>
</TR>
";
Prema
tome, konačna while petlja izgledaće ovako:
while
($row = mysql_fetch_array($sql_result)) {
$naziv_proiz = $row["Naziv"];
$tip_proiz = $row["Tip"];
$kolicina = $row["Kolicina"];
echo "<TR>
<TD>$naziv_proiz</TD>
<TD>$tip_proiz</TD>
<TD>$kolicina</TD>
</TR>
";
}
Nakon
završetka petlje, sledi i zatvaranje taga tabele:
echo
"</TABLE>";
I
konačno, na kraju je potrebno da oslobodimo sve resurse zauzete
izvršavanjem upita, i zatvorimo konekciju ka bazi podataka.
Ako ovo ne uradimo, možemo izazvati neželjeno "curenje"
memorije ili slične resurs-probleme.
mysql_free_result($sql_result);
mysql_close($connection);
?>

|
|
Konekcija
na MySQL bazu podataka
(II deo)
Nakon upoznavanja sa osnovnim funkcijama za spajanje sa bazom
i kreiranja baze i tabele kao pripreme za naš primer, krećemo
i sa samim PHP kodiranjem. Pre nego što počnete, potrebno
je da znate naziv servera na kome se nalazi baza podataka
(ukoliko radite u lokalu, naziv će biti "local"),
validno korisničko ime i lozinka za taj server. Zatim, startujemo
sa PHP kôdom, kreiranjem konekcione varijable:
<php>
$connection = mysql_connect
("naziv_servera","kor_ime","lozinka")
or die("Povezivanje nije moguce.");
Funkcija
die() koristi se za prekidanje skripta i "štampanje"
poruke o grešci ukoliko prethodna funkcija "propadne"
(u ovom slučaju, ako konekcija nije uspostavljena).
Kada
uspostavite vezu, tj. konekciju, sledeći korak predstavlja
izbor baze podataka i kreiranje SQL instrukcije (upita). Pretpostavimo
da tabela "Proizvodi" već postoji u MySQL bazi podataka
koja se npr. zove "mojaBaza". Potrebno je da eksplicitno
izaberete bazu podataka na serveru na koju ćete se spojiti:
$db
= mysql_select_db("mojaBaza", $connection)
or die("Baza nije dostupna.");
U
ovoj tački smo "naredili" PHP parseru da se spoji
na server i selektuje bazu podataka. Ako je sve u redu do
ove tačke, možete odaslati SQL upit i nadati se da će vam
se vratiti nekakav rezultat, tj. rezultujući set slogova.
Kreiraćemo upit koji se zasniva na tabeli "Proizvodi"
(definisana u prethodnom prilogu), a koji treba da vrati polja
sa nazivima proizvoda, njihovim tipom i količinom proizvoda,
s tim da se podaci poređaju po najvećim količinama. Kreiraćemo
varijablu koja će sadržati ovu našu SQL instrukciju:
$sql
= "SELECT Naziv, Tip, Kolicina
FROM Proizvodi
ORDER BY Kolicina DESC";
Potom
ćemo kreirati varijablu koja će prihvatiti rezultate prethodnog
upita, a koji će se dobiti uz pomoć mysql_query funkcije.
Funkcija mysql_query poseduje dva argumenta; konekciju i SQL
varijablu, koje smo prethodno kreirali:
$sql_result
= mysql_query($sql,$connection)
or die("Upit nije izvrsen");
Ovim
bi trebalo da uspostavimo konekciju, selektujemo tabelu, postavimo
upit i smestimo rezultate u varijablu. U sledećem prilogu
ćemo videti kako rezultate upita prikazati korisnicima.

|
Konekcija
na MySQL bazu podataka
(I deo)
Nakon više uvodnih članaka o PHP-u i upoznavanja sa sintaksom
PHP-a, pozabavićemo se - spajanjem sa bazom podataka koja
se nalazi na MySQL serveru.
Nakon više uvodnih članaka o PHP-u i upoznavanja sa sintaksom
i nekim od osnovnih funkcija PHP-a, stigli smo i do možda
i najkorisnijeg segmenta upotrebe, a to je spajanje sa bazom
podataka koja se nalazi na MySQL serveru. Spajanje sa bazama
podataka predstavlja i osnovu za izgradnju kompleksnih mrežnih
aplikacija. Inače, uz pomoć PHP-a možete se spojiti sa bilo
kojim sistemom za upravljanje bazama podataka (DBMS), a među
PHP programerima su svakako MySQL baze podataka najomiljeniji
tip. Na vaš budući izbor baza podataka sigurno će uticati
i vaš web provajder, tj. tip baza podataka koje on podržava
(tj. instaliran server baza podataka).
Kada
je reč o upotrebi MySQL baza podataka, postoji veći broj dobro
dokumentovanih PHP funkcija koje će vam pomoći u uspostavljanju
veze sa podacima. Međutim, trebaće vam samo nekoliko ovih
funkcija u cilju postizanja jednostavne konekcije i selekcije
nekih podataka:
- mysql_connect
- funkcija kojom ostvarujemo vezu sa MySQL serverom; zahteva
naziv hosta, korisničko ime i lozinku.
- mysql_select_db
- funkcija za izbor baze podataka od mnogobrojnih koje
se nalaze na MySQL serveru.
- mysql_query
- funkcija za postavljanje SQL instrukcija.
- mysql_fetch_array
- funkcija za smeštanje rezultata SQL upita u niz.
- mysql_free_result
- funkcija za oslobađanje resursa zauzetih trenutnom konekcijom.
- mysql_close
- funkcija za prekid veze ka bazi podataka.
Ovo
su osnovne funkcije koje vam trebaju za rad sa bazama podataka,
a detalje o ostalim funkcijama možete naći u odgovarajućem
priručniku koji se nalazi na adresi www.php.net/manual/.
U našem primeru, pretpostavićemo da ste instalirali MySQL
server, da ste kreirali bazu podataka i da za datu bazu posedujete
korisničko ime (username) i lozinku (password). U toj bazi
kreirajte tabelu "Proizvodi", koja će imati polja:
"Naziv", "Tip" i "Kolicina".
Samu tabelu popunite sa podacima kao što su ovi dati na slici.

|
Argumenti
funkcija
Funkcijama se putem argumenata prosleđuju brojne važne informacije,
i to kao varijable ili kao konstante tj. default vrednosti
U prethodnom PHP prilogu definisali smo šta su to funkcije
i kako se koriste, i šta su argumenti jedne funkcije. Inače,
razne informacije se funkciji mogu proslediti preko liste
argumenata, koja predstavlja zarezom razdvojenu listu varijabli,
i/ili konstanti. Podrazumeva se da PHP omogućava prosleđivanje
argumenata funkciji u vidu vrednosti; argumenti se mogu još
proslediti kao reference (varijable), i kao "podrazumevane
vrednosti". Takođe, omogućena je i upotreba listi argumenata
varijabilne dužine, ali samo u veziji PHP-a 4. Kod verzije
3 PHP-a, listu argumenata možemo simulirati u vidu niza koji
se prosleđuje funkciji.
Na primer:
<?phps
function preuzimanje_niza($input) {
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
?>
Uglavnom
se funkcijama prosleđuju konkretne vrednosti, pa tako kada
promenimo vrednost argumenta unutar funkcije, neće se promeniti
i njegova vrednost van funkcije. Ukoliko želite da se vrednosti
prosleđenih argumenata mogu menjati unutar funkcije, prosledite
te iste argumente u vidu referenci. A ako želite se argumenti
uvek prosleđuju kao reference - moraćete da ispred naziva
argumenta dodate znak ampersand (&). Evo i primera prosleđivanja
argumenta u vidu reference:
<?php
function dodaj_tekst(&$string) {
$string .= 'i dodatni deo stringa.';
}
$str = 'Ovo je string, ' ;
dodaj_tekst($str);
echo $str;
?>
Rezultat
ovog malog skripta će biti ispis - "Ovo je string, i
dodatni deo stringa.". Slično prethodnoj metodi, varijablu
kao referencu možete proslediti i kada to niste u prvi mah
definisali, tada ćete u samom pozivu funkcije dodati znak
ampersand (&):
<?php
function bilo_sta ($rec) {
$rec .= ' a ovo je dodatni deo.';
}
$str = 'Ovo je string, ';
bilo_sta ($str);
echo $str;
// izlaz ce biti 'Ovo je string, '
bilo_sta (&$str);
echo $str;
// izlaz 'Ovo jestring, a ovo je dodatni deo.'
?>
Slično
prethodnom definisanju argumenata je i definisanje "podrazumevanih
argumenata" (kao kod jezika C++):
<?php
function kuvanje_kafe ($type = "Grand") {
return "Najbolja je kafa $type.\n";
}
echo
kuvanje_kafe ();
echo kuvanje_kafe ("DonCaffe");
?>
Izlaz
ovog malog skrtipta će biti:
Najbolja
je kafa Grand.
Najbolja je kafa Doncaffe.
Kao
što vidite, ako funkciji ne prosledimo nikakvu vrednost argumenta,
koristiće se podrazumevana vrednost (Doncaffe).

|
"For"
petlja
Klasična programerska For...Next petlja, ali ovoga puta u
PHP okruženju
Za razliku od "jednostavne" sintakse "While"
petlje, "For" petlja ima najsloženiju sintaksu u
PHP-u (vrlo sličnu C-u). Struktura i sintaksa je ove petlje
je sledeća:
for
(izraz1; izraz2; izraz3)
naredba
Prvi
izraz (izraz1) se proverava (izvršava) samo jednom (bezuslovno),
i to na početku petlje. Na početku svake iteracije proverava
se drugi izraz (izraz2). Ukoliko je istinosna vrednost ovog
izraza TRUE, petlja se nastavlja i izvršava se ugneždena instrukcija(e).
Ukoliko je vrednost izraza FALSE, prekinuće se izvršavanje
petlje. Takođe, na kraju svake iteracije petlje proverava
se (izvršava se) treći izraz (izraz3).
Svaki od nabrojanih izraza može biti "prazan", tj.
ne mora sadržati nikakav izraz. Ako je na primer, drugi izraz
"prazan" petlja će se ponavljati nedefinisan broj
puta. Možda vam ova mogućnost na prvi pogled nema smisla,
ali sve do momenta kada ovu mogućnost budete upotrebili sa
uslovnom instrukcijom "break". Razmotrite sledeći
primer:
<?php
/* 1. primer */
for ($a = 1; $a <= 10; $a++) {
print $a;
}
/* 2. primer */
for ($b = 1;;$b++) {
if ($b > 10) {
break;
}
print $b;
}
/* 3. primer */
$c = 1;
for (;;) {
if ($c > 10) {
break;
}
print $c;
$c++;
}
/* 4. primer */
for ($d = 1; $d <= 10; print $d, $d++) ;
?>
Od
ova četiri primera, prvi je svakako najjasniji. U drugom primeru
je prikazan "prazan" drugi izraz, pa imamo nedefinisan
broj iteracija petlje. Ali, tu smo upotrebili "If"
grananje i instrukciju "break", kojom izlazimo iz
petlje (petlja se prekida) kada vrednost varijable "$b"
bude 11 (nakon toga vršimo štampanje vrednosti varijable).
Treći primer je specifičan jer su sva tri izraza "prazna"
(nedefinisana). Tako da će se data petlja izvršavati u zavisnosti
od prirode ugneždenih naredbi. PHP naravno, obezbeđuje i alternativno
definisanje "For" petlje (sa dvotačkom):
for
(izraz1; izraz2; izraz3):
...naredba; ...;
endfor;

|
"While"
petlja
Klasična programerska While petlja, ali ovoga puta u PHP okruženju.
Nakon "If" strukture prelazimo na obradu najjednostavnijeg
tipa petlji u PHP-u, a to je "While" petlja. Struktura
i sintaksa u PHP-u je vrlo slična sintaksi ove petlje u programskom
jeziku C:
while
(izraz)
naredbe
Semantika
same petlje je vrlo jednostavna, ona "kaže" PHP-u
da ponavlja izvršavanje ugrađenih naredbi, sve dok je ispunjen
uslov, tj. dok je vrednost "izraza" TRUE. Vrednost
izraza se proverava samo na svakom početku ponavljanja petlje,
tako da ako se ova vrednost promeni tokom izvršavanja ugneždenih
instrukcija, izvršenje se neće prekinuti do kraja date iteracije.
U slučaju da je vrednost "izraz"-a FALSE, neće se
izvršiti ugneždene naredbe, a izvršenje programa će se prebaciti
na sledeću instrukciju koja dolazi nakon petlje.
Kao i kod "IF" grananja, i ovde možete grupisati
više instrukcija unutar jedne "While" petlje, i
to uz pomoć vitičastih zagrada, ili uz korišćenje alternativne
sintakse:
while
(izraz) :
...naredbe...
endwhile;
U
sledećim redovima možete videti dve "While" petlje,
napisane na dva načina, koje "štampaju" cifre od
1 do 10:
<?php
/* 1. primer */
$a= 1;
while ($a <= 10) {
print $a++;
}
/* 2. primer */
$a = 1;
while ($i <= 10):
print $a;
$a++;
endwhile;
?>
Kao
što vidite, ovde smo upotrebili inkrementalni operator (++)
koji uvećava vrednost varijable "$a", i to nakon
njenog štampanja.
Slična prethodnoj "While" petlji je "Do...While"
petlja, a razlika je samo u poziciji proveravanja "izraz"-a.
Kod ove petlje provera istinosne vrednosti izraza se vrši
na kraju petlje svake iteracije. Glavna razlika je u tome
što će se kod ove druge petlje (do...while) prva iteracija
svakako izvršiti, za razliku od "While" gde se možda
neće izvršiti ni jedna iteracija (u slučaju da je vrednost
izraza FALSE).
<?php
$a = 0;
do {
print $a;
} while ($a>0);
?>
Prethodna
petlja će se izvršiti tačno jedanput, jer se nakon prve iteracije
proverava izraz ($a>0), koji će imati vrednost FALSE. Zbog
ove vrednosti izraza petlja će prekinuti dalje izvršavanje.

|
Slanje
teksta u browser
Pogledajte kako se običan tekst i HTML tagovi prosleđuju browseru
uz pomoć PHP-a. Opisanim metodama uglavnom se vrši i "opisivanje"
HTML stranica. Nakon prvog skripta ("Hello World!"),
prećićemo na objašnjavanje najjednostavnijih funkcija, to
su one koje služe za "slanje" običnog teksta u HTML
(odnosno browser
korisnika). Za "slanje" teksta PHP obezbeđuje tri
vrste funkcija, a mi smo u prošlom prilogu iskoristili funkciju
"echo".
Za primer ubacite sledeći kod u neki ".php" fajl,
i pošaljite ga serveru (localhost\fajl.php):
<html>
<body>
<?php
print "Ovo je print funkcija.";
print "<p>";
echo "Ovo je echo funkcija.", " ",
"P.S. Ovde mozete dodati i drugi string", "
",
"ako stringove razdvojite zarezom.";
print "<p>";
printf ("Ovo je printf funkcija.");
print "<p>";
printf ("Funkcija printf se najcesce
koristi za formatiranje brojki.");
print "<p>";s
printf ("Ne zaboravite zagradu sa
funkcijom printf.");
?>
</html>
</body>
Rezultat koji će server vratiti će biti:
Ovo
je print funkcija.
Ovo je echo funkcija. P.S. Ovde mozete dodati i drugi string
ako stringove razdvojite zarezom.
Ovo je printf funkcija.
Funkcija printf se najcesce koristi za formatiranje brojki.
Ne zaboravite zagradu sa funkcijom printf.
Kao što vidite upotrebili smo sve tri funkcije:
- print
- najjednostavnija funkcija za slanje teksta u prozor
browser-a. Funkcija može da se navodi i bez, i sa zagradama.
- echo
- funkcija slična prethodnoj, samo što ovde možete da
kombinujete više stringova, koje obavezno odvajamo zarezima.
Sa ovom funkcijom se ne koriste zagrade.
- printf
- funkcija koja najčešće služi za formatiranje brojki
kao intedžera, decimala itd. Ova funkcija obavezno zahteva
upotrebu zagrada.
Nakon
ove priče probajte da što više eksperimentišete sa ovim funkcijama,
pošto su one jako bitne za PHP/HTML kombinovanje. U sledećem
prilogu ćemo se baviti varijablama, vrstama varijabli i načinom
njihovog definisanja.

|
Prihvat
varijabli iz formulara
Kako prihvatiti rezultate anketa, glasanja i drugih formulara
u PHP varijable?
Često ćete na stranicama automatizovanih PHP-om, imati formulare.
Najčešće će se raditi o anketama, formularima za komentare,
glasanje i slično. Na svu sreću, kada se jedan ovakav formular
prosledi PHP skriptu, sve varijable definisane na formi biće
automatski dostupne PHP skriptu. Ovo znači da skript može
da prihvati i varijable koje nisu definisane u samom PHP skriptu.
Na primer, imamo jednostavan formular, koji se metodom "POST"
šalje na obradu PHP skriptu pod nazivom "primer.php":
<FORM ACTION="primer.php" METHOD="POST">
IME: <INPUT TYPE="text" NAME="ime"><BR>
<INPUT TYPE="submit" VALUE="Posalji">
</FORM>
Kada
ovaj formular popunite i kliknete na dugme "Posalji",
metodom "POST" elementi formulara će biti prosleđeni
PHP stranici "primer.php" na dalju obradu. Stranica
"primer.php" će automatski primiti sadržaj iz prosleđenog
polja "ime" u varijablu "$ime". Evo kako
bi mogao da izgleda skript "primer.php":
<?php
echo "Vase ime je:<BR>";
echo $ime;
?>
Znači,
kada popunimo polje "IME" na stranici sa formularom,
i kliknemo na dugme za slanje, sadržaj ovog polja će primiti
varijabla "$ime" u PHP skriptu na stranici "primer.php",
te će se uz pomoć instrukcije "echo" prikazati vrednost
date varijable.
PHP
skriptovi takođe mogu i da prihvataju spoljne nizove varijabli
iz formulara. Na primer, možete imati grupu povezanih varijabli
na formularu u niz, ili možete iskoristiti ovu mogućnost za
prihvat vrednosti iz višestrukog SELECT OPTION objekta:
<FORM ACTION="niz.php" METHOD="post">
Ime: <INPUT TYPE="text" NAME="osoba[ime]"><BR>
Email: <INPUT TYPE="text" NAME="osoba[email]"><BR>
Boja kose: <BR>
<SELECT MULTIPLE NAME="kosa[]">
<OPTION VALUE="crna">Crna
<OPTION VALUE="smedja">Smedja
<OPTION VALUE="plava">Plava
</SELECT>
<INPUT TYPE="submit" VALUE="Posalji">
</FORM>
U
slučaju da je uključena PHP mogućnost "track_vars",
bilo pri samoj konfiguraciji ili pomoću direktive: <?php_track_vars?>,
sve varijable poslate POST i GET metodama biće članovi i globalnih
nizova $HTTP_POST_VARS i $HTTP_GET_VARS (u zavisnosti od upotrebljene
metode).

|
|