You are on page 1of 18

PHP - MYSQL

SADRŽAJ

1 UVOD............................................................................................................................. 3
2 PHP MySQL................................................................................................................... 4
2.1 Konekcija na MySql server.......................................................................................4
2.2 Kreiranje baze i tabela (naredba CREATE DATABASE i CREATE TABLE)..............6
2.3 Ubacivanje podataka u bazu (naredba INSERT INTO)............................................7
2.4 Čitanje podataka iz baze (naredba SELECT)...........................................................9
2.5 Brisanje podataka (naredba DELETE)...................................................................12
2.6 Izmena postojećih podataka (naredba UPDATE)...................................................14
3 PHP I POVEZIVANJE SA DRUGIM BAZAMA PODATAKA...........................................18

2
UVOD

Troslojna arhitektura predstavlja tip klijent-server arhitekture u kojoj su korisnički interfejs,


procesi poslovne logike i pristup podacima, projektovani i upravljani kao nezavisni moduli.
Osnovne komponente (slojevi) ove arhitekture su:

 Klijentski (prezentacioni) sloj

 Sloj poslovne (aplikativne) logike

 Sloj podataka

Slika 1 Troslojna arhitektura web aplikacija

Preko PHP-a kao skriptnog jezika na serverskoj strani, realizuje se najveći deo poslovne
logike aplikacije. Podaci vezani za aplikaciju se mogu skladištiti u običnom tekstualnom fajlu,
iz kojeg se pomoću PHP mogu čitati i upisivati. Međutim, ako je u pitanju ozbiljnija aplikacija,
neophodno je koristiti relacione baze podataka. Najčešće, ovo znači da će se korsititi server
baze podataka koji podražava SQL (Structured Query Language) specifikaciju. SQL je
standardni programski jezik za pristup i manipulaciju podacima iz relacionih baza podataka i
podržan je od strane svih servera relacionih baza podataka. U relacionim bazama podaci su
skladišteni preko niza tabela. Svaka tabela sadrži kolone koje opsiuju atribute podataka, a
svaki red je instanca podataka.

3
Relational Data Base Management Systems (RDBMS), odnosno sistemi za upravljanje
relacionim bazama podataka su se u praksi pokazali kao najbolji način upravljanja
podacima.

PHP MySQL

PHP podržava API-je za pristup svim poznatim bazama podataka. U ovoj skripti se obrađuje
povezivanje PHP sa MySQL bazama podataka. MySQL je efikasan server za upravljanje
bazama podataka. Predstavlja opensource rešenje sa odličnim performansama.

1.1 Konekcija na MySql server


Da bi se moglo upravljati podacima iz baze, neophodno je uspostaviti konekciju sa serverom
na kojem se ta baza nalazi. Serveri se nalaze na mreži i njima se pristupa pomoću IP-a ili
domene (hosta). Uz podatak o hostu servera, potrebni su korisničko ime i lozinka da bi se
uspešno povezalo na server i komuniciralo sa njim. U PHP postoji ugrađena funkcija za
povezivanje sa serverom mysql_connect. Funkcija vraća broj koji je referenca ka
uspostavljenoj konekciji, ili false ukoliko konekcija nije uspela. Konekcija ostaje otovrena sve
dok se ne pozove funkcija mysql_close ili dok se ne izvrši PHP skript.

U sledećoj tabeli su date neke od osnovnih funkcija za spajanje na MySQL server.

Naziv funkcije Sintaksa Opis


mysql_connect mysql_connect(ime servera:port, Povezuje PHP skriptu sa
korisničko ime, šifra – ukoliko MySQL bazom. Ako je
postoji). baza zaštićena šifrom,
šifra se mora uneti kao
parameter.
mysql_close mysql_close (naziv promenljive Zatvara PHP konekciju
kojoj je dodeljna vrednost sa bazom.
mysql_connect funkcije)
mysql_query mysql_query(“ upit koji se izvršava U okviru ove naredbe se
nad MySQL bazom“, naziv može koristiti bilo koji
promenljive kojoj je dodeljena upit: za kreiranje tabele,
vrednost mysql_connection()) za kreiranje baze, za
popunjavanje baze,
ažuriranje baze, čitanje iz
baze...
mysql_error mysql_error() Izveštava o mysql grešci
mysql_select_db mysql_select_db(“ime_baze”) Bira MySQL bazu nad
kojom će vršiti upite

4
Primer 1 : Spajanje na MySql server

Pomoću fajla „konekcija.php“ se vrši povezivanje sa serverom na kojem je smeštena baza

<?php
if (!$db=mysql_connect("localhost", "root", ""))
{
die ("<b>Spajanje na mysql server je bilo neuspešno</b>");
}
if (!mysql_select_db("bazanovosti", $db))
{
die ("<b>Greška pri odabiru baze</b>");
}
?>

Ukoliko su MySql funkcijama dati tačne podaci rezultat skripte bi trebalo da bude prazna
stranica.

Samo spajanje sa serverom se obavlja pomoću mysql_connect funkcije. Funkciji se


prosleđuju tri argumenta. Prvi je host na kom se nalazi server. Ovde se može uneti IP ili
hostname servera, ali skoro uvek se radi o alliasu localhost na IP 127.0.0.1 (barem kod
većine komercijalnih hosting providera). Drugi argument je korisničko ime pomoću koje se
spaja, a treći lozinka za tog korisnika. Ukoliko su svi dati podaci tačni, pa je mysql
pristupačan i operacionalan funkcija će vratiti „spoj“ sa serverom. Ako je neka od informacija
netačna ili se nešto desilo sa samim MySql serverom funkcija vraća false.

Još jedna vrlo bitna stvar je proveravati uspeh operacije spajanja. Naime, skoro uvek čitava
poslovna logika aplikacije zahteva uspešnu konekciju na server.

Sledeći korak pri spajanju sa MySql serveom je odabir baze. Mysql_select_db funkcija kao
prvi argument dobija ime baze koja se koristi, a kao drugi vezu tj spoj na MySql server gde
se ta baza nalazi. Pošto je spoj (rezultat mysql_connect funkcije) ubačen u varijablu $db ona
je prosleđena na drugo mesto. Ovo nije obavezni argument, tj. mogao je biti izostavljen pa
mysql_select_db funkciju pozvati u mysql_select_db("baza") obliku i sve bi i dalje radilo.
Radi se o tome da PHP automatski pamti poslednju otvorenu vezu na MySql server pa je
uvek po defaultu koristi u svim mysql funkcijama gdje je taj argument izostavljen (recimo u
funkciji koja izvršava neki SQL upit na serveru). No, ukoliko se u skripti spaja na dva različita
servera, ili ostvaruju dve zasebne veze na isti server i ne koristi taj argument u MySql
funkcijama PHP će uvek koristiti onu vezu koja je poslednja otvorena. Tako da se u toj
situaciiji mora prosleđivati ona varijabla koja u sebi sadrži onaj spoj na kom treba izvršiti
neka operaciju.

U sledećoj tabeli dat je kratak prikaz SQL upita (SQL query) o kojima će biti reči u nastavku
teksta:

Sintaksa upita Funkcija


CREATE DATABASE ime_baze Kreira novu bazu u MySQL RDBMS – u
CREATE TABLE ime_tabele (
Kreira tabelu u okviru selektovane baze
Ime_kolone1 tip podataka (velicina),
podataka. Navode se imena svih kolona i
Ime_kolone2 tip podataka (velicina),
tipovi podataka koje će podržavati ove
Ime_kolone3 tip podataka (velicina)
kolone. Za tipove podataka u MySQL – u,
………….
pogledati reference za MySQL.
)
INSERT INTO ime_tabele (ime_kolone1, Ubacuje konkretne vrednosti u kreiranu
ime_kolone2, ime_kolone3) VALUES tabelu u MySQL bazi podataka.
(“vrednost_za_kolonu1”, “vrednost_za

5
kolonu2”, vrednost_za_kolonu3)
SELECT ime_kolone1,ime_kolone2,
ime_kolone3, ime_koloneN FROM
ime_tabele. (umesto naziva kolona može Selektuje odabrane, ili sve kolone iz tabele
se staviti „ * “, što je džkorer znak da je sve
selektovano).
SELECT ime_kolone1,ime_kolone2,
ime_kolone3, ime_koloneN FROM Selektuje odabrane kolone na osnovu
ime_tabele WHERE zadatog kriterijuma.
ime_kolone=”vrednost”
SELECT ime_kolone1,ime_kolone2, Selektuje odabrane kolone iz tabele i
ime_kolone3, ime_koloneN FROM razvrstava ih u opadajućem ili rastućem
ime_tabele ORDER BY ime_kolone redosledu na osnovu neke kolone. Ako se
(desc). ne navede Desc, po default – u se
podrazumeva rastući redosled.
UPDATE ime_tabele
SET ime_kolone=nova_vrednost Menja konkretne vrednosti iz određene
WHERE ime_kolone=stara_vrednost tabelu na osnovu zadatih kriterijuma.

DELETE FROM ime_tabele


WHERE ime_kolone=neka_vrednost

1.2 Kreiranje baze i tabela (naredba CREATE DATABASE i


CREATE TABLE)1
Da bi se omogućilo čuvanje podataka, kao i manipulacija njima, neophodno je pre svega
postaviti bazu na server. Za kreiranje baze se koristi komanda CREATE DATABASE. Kada
je u pitanju WAMP server instaliran na lokalnom računaru, delu za upravljanje bazama
podataka se pristupa pomoću opcije phpMyAdmin ili jednostavnim unošenjem adrese u
adressbar browser-a http://localhost/phpmyadmin/. Bazu je najlakše kreirati unošenjem
imena baze i biranjem opcije create (dugme smešteno u središnjem delu prozora). Ova
akcija je ekvivalentna upitu:

CREATE DATABASE `bazanovosti` ;

Nakon kreiranja baze, potrebno je redom unositi tabele u bazu. Tabele se preko komandnog
panela ubacuju jednostavnim unosom imena tabele i definisanjem broja polja. Ekvivalentan
rezultat se dobija ako se izvrši upit nad bazom :

CREATE TABLE `novosti` (


`idnovost` INT( 20 ) NOT NULL AUTO_INCREMENT ,
`naslov` VARCHAR( 20 ) NOT NULL ,
`tekst` VARCHAR( 45) NOT NULL ,
PRIMARY KEY ( `idnovost` )
);

Konačno, baza ima strukturu kao na slici

1
Svi primeri obrađeni u ovoj skripti podrazumevaju rad preko WAMP servera. Ukoliko postoji
kompatibilnost verzija, svi primeri bi trebalo da budu validni i za druge slične solucije Apache
servera i MySQL baze podataka.

6
1.3 Ubacivanje podataka u bazu (naredba INSERT INTO)
Baza i njoj pripadajuće tabele su u početku prazne – nemaju podataka. Osnovna operacija
za unos podataka je INSERT INTO. Podaci se preko komandnog panela ubacuju izborom
opcije INSERT. Upit kojim se ubacuju podaci u tabelu novosti :

INSERT INTO `novosti` ( `idnovost` , `naslov` , `tekst` )


VALUES (
'', 'Naslov1', 'Ovo je prva vest'
), (
'', 'Naslov2', 'Ovo je druga vest'
)

Kod naziva tabele je vrlo bitno napisati njeno ime u pravilom „caseu“ jer su imena baza,
tabela i polja case sensitive. Kao što se vidi, u zagradama su navedena polja tabele, ali
jedno nedostaje. Polje idnovost nije navedeno i ne radi se o grešci u pisanju. Naime, ukoliko
se neko polje izostavi u listi njemu se automatski upisuje defaultna vrednost (koja se može
postaviti pri stvaranju tabele). U ovom slučaju je pri stvaranju tabele polju idnovost data
auto_increment osobina koja pri svakom insertu tom polju pridružuje po defaultu vrednost
veću za 1 od poslednje upisane.

Nakon liste polja dolazi VALUES čime se naznačava da sledi lista vrednosti koja se ubacuje
u tablicu. Vrednost koja se ubacuje u jedno od polja mora biti na istoj poziciji u listi vrednosti
kao i ime polja u koje će se sačuvati u listi polja.

Kod stvaranja liste polja nije bitan redosled. Bitno je jedino da se ime polja u svojoj listi
pozicijom poklapa sa vrednosti u listi vrednosti

Jedna od osnovnih funkcionalnosti PHP skriptova je ubacivanje podataka u bazu. Najčešće


se podaci prikupljaju od korisnika. U tekstu sledi primer ubacivanja podataka prikupljenih
preko forme.

Primer: Unos podataka u bazu preko forme

<html>
<head>
<title>Unos vesti</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>
<body>
<h1>Unos novosti</h1>
<hr>
<form method="post" action="">
Naslov : <input type="text" name="naslov"><br>
Tekst :&nbsp;&nbsp; <textarea name="tekst"></textarea><br>
<input type="submit" name="unos" value="Ubaci">
</form>
<?php
if (!isset($_POST["unos"]))
{
}

7
else {
include "konekcija.php";
$sql="INSERT INTO novosti (naslov, tekst)
VALUES ('$_POST[naslov]', '$_POST[tekst]')";
if (mysql_query($sql))
{
echo "Novost je uspesno ubacena";
}
else {
echo "Nastala je greška pri ubacivanju novosti<br>" . mysql_error();
}
}
?>
</body>
</html>

Struktura, tj. logika ove skripte sledi logiku same operacije. Prvi korak je unos podataka u
formu, a drugi je ubacivanje tih podataka u bazu. Kao uslov obavljanja prvog ili drugog
koraka je postojanje vrednosti u varijabli $_POST["unos"], tj. varijable koju stvara pritisnuti
submit taster forme imena unos

U form tagu action atribut nema vrednost. Kada je action atribut definisan na ovaj način
podaci se šalju ka stranici na kojoj se nalazi forma. Forma se prikazuje na unosvesti.php pa
će se i nakon submit - ovanja forme opet otvarati ista stranica.

Drugi korak ubacuje podatke iz forme u bazu. Da bi se moglo nešto ubaciti u bazu prvo se
mora spojiti na MySql server i odabrati je, što je urađeno u prvom primeru koji je ubačen u
dbsproj.php pa je ovde samo uključujen.

include "konekcija.php";

Nakon uspešnog spajanja na bazu generiše se SQL upit:

$sql="INSERT INTO novosti (naslov, tekst)


VALUES ('$_POST[naslov]', '$_POST[tekst]')";

Sledeći korak je stvaranje stringa u kojem se nalazi sam SQL upit za unos podataka u
tablicu.

if (mysql_query($sql))
{
echo "Novost je uspesno ubačena";
} else {
echo "Nastala je greška pri ubacivanju novosti<br>" . mysql_error();
}

Ovo je glavni deo skripte koji obavlja samu komunikaciju sa MySQL serverom, tj. izvršava
SQL upit na njemu. Obavlja se pomoću mysql_query() funkcije. mysql_query() funkcija prima
dva argumenta. Prvi je string podatak koji sadrži valjani upit (SQL ili neku MySQL naredbu)
koji je obavezan, dok je drugi neobavezan, a radi se o otvorenom i validnom spoju na
MySQL server koji je u dbsproj.php skripti ubačen u $db varijablu.

U slučaju INSERT upita mysql_query() vraća true ukoliko je upit uspešno obavljen ili false u
suprotom. Iz tog razloga je moguće pomoću if-a proveriti da li je novost ubačena u bazu i u
zavisnosti od toga ispusati odgovarajuću poruku korisniku.

8
1.4 Čitanje podataka iz baze (naredba SELECT)

Najjednostavniji primer je upit koji pribavlja sve redove iz jedne tabele.

SELECT * FROM novosti

Upit počinje nazivom vrste upita. Ovo je pravilo koje dele svi upiti za manipulaciju podacima
u osnovnim oblicima. Nakon imena operacije sledi lista polja koja će se pojaviti u tablici
rezultata upita. Zvezdica je skraćenica koja govori da će se pribaviti sva polja iz navedenih
tabela. Nakon liste polja sledi FROM koji govori da sledi lista tabela iz kojih se podaci
pribavljaju.

Ovo su ujedno i svi obavezni delovi jednog valjanog SQL SELECT upita pa, ukoliko jedan od
njih bude izostavljen MySql će javiti grešku i neće obaviti upit.

Rezultat upita nije sortiran ni po jednom polju, ali redovi su vraćeni po redosledu upisa u
bazu, po idnovost polju pošto se radi o auto_increment polju koje svakom novom redu daje
vrednost veću za 1 od onog prošlog.

SELECT * FROM novosti ORDER BY idnovost DESC

Da bi rezultati upita bili sortirani dodata je ORDER BY klazula u ovom slučaju na njegov kraj.

ORDER BY mora biti propraćen imenima polja po kojima se želi sortirati rezultat pa način
sortiranja. U ovom slučaju se radi o polju datum i DESC (descending) načinom, tj. silazno.
Suprtotno, tj. uzlazno se može sortirati tako da se izostavi DESC ili umesto njega upiše ASC
(ascending). Ukoliko se izostavi smer sortiranja rezultata defaultni smer je uzlazan.

Primer 3 : Pregled novosti

<html>
<head>
<title>Pregled novosti</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>
<body>
<?php
include "konekcija.php";
$sql="SELECT naslov, tekst FROM novosti";
if (!$q=mysql_query($sql))
{
echo "Nastala je greska pri izvodenju upita<br>" . mysql_query();
die();
}
if (mysql_num_rows($q)==0)
{
echo "Nema novosti";
}
else {
?>
<table width="760" border="1" cellpadding="1" cellspacing="1">
<tr>
<td><b>Naslov</b></td>
<td><b>Tekst</b></td>
</tr>

9
<?php
while ($red=mysql_fetch_array($q))
{
?>
<tr>
<td><?php echo $red["naslov"]?></td>
<td><?php echo $red["tekst"]?></td>
</tr>
<?php
}
?>
</table>
<?php
}
?>
</body>
</html>

Objašnjenje :

SELECT upiti su najopširniji. Razlog tome je prilično očigledan, jer uz obavljanje upita
moraju se podaci i pribaviti tj. u ovom slučaju ispisati u obliku tabele.

Prva stvar koja se mora uraditi je kreiranje upita.

$sql="SELECT naslov, datum FROM novosti";

Nije obavezno upite upisivati u varijablu pa onda tu varijablu prosleđivati mysql_query()


funkciji. Može se sam upit napisati pravo u mysql_query() funkciju. Npr. ovako:

mysql_query("SELECT naslov, datum FROM novosti")

if (!$q=mysql_query($sql))
{
echo "Nastala je greška pri izvodenju upita<br>" . mysql_query();
die();
}

Ovog puta je ubačen rezultat mysql_query funkcije u varijablu. Ovo je obavezno jedino kod
izvršavanja SELECT upita dok kod izvršavanja ostalih to može biti izostavljeno.

U cilju izrade skripte koja neće ispisivati neke PHP / MySQL error - e mora se pre ispisa
samog rezultata upita proveriti da li ima rezultata za prikaz pa ukoliko nema preduzeti
odgovarajuće korake da se korisnik obavesti o tome pa mu po potrebi ponuditi opcije što
može učiniti u toj situaciji.

Ta provera se obavlja pomoću :

if (mysql_num_rows($q)==0)
{
echo "Nema novosti";

Funkcija koja obavlja samu proveru je mysql_num_rows() koja kao argument prima result
identifier pa vraća integer broj koji je jednak ili veći od nule. Normalno, result identifier mora
biti veći od nule, tj. ova funkcija će javiti error ukoliko je pri obavljanju upita nastala greška tj.
mysql_query() je vratio false vrednost umesto result identifiera. Mora se voditi računa da se
ova funkcija ne poziva ukoliko skripta nije prošla upit. To je u ovoj skripti osigurano die()
funkcijom ukoliko je nastala greška pri izvršavanju upita. Rezultati se ispisuju u tablici radi

10
bolje preglednosti i razumljivosti, što je vrlo bitno kod izrade dinamičkih siteova sa bazama
podataka

<table width="760" border="0" cellpadding="1" cellspacing="1">


<tr>
<td><b>Naslov</b></td>
<td><b>Tekst</b></td>
</tr>

Pre samog ispisa u HTML - u su ispisani prvi red tabele sa nazivima redova. Prvi red je
rezervisan za naslov novosti, drugi za datum njenog upisa a treći za opcije. Opcije su ništa
drugo nego linkovi koji pokreću nove operacije nad vesti koja se nalazi u istom retku tabele
kao i opcije.

Nakon što su ispisani „headeri“ tabele vraća se u PHP mode i kreće se sa ispisom podataka.

<?php
while ($red=mysql_fetch_array($q))
{
?>
<tr>
<td><?php echo $red["naslov"]?></td>
<td><?php echo $red ["tekst"]?></td>
</tr>
<?php
}
?>

Mysql_fetch_array() vraća red, t.j. niz koji se sastojih od svih polja rezultata s tim da je svako
polje indeksirano brojem i svojim imenom.

Mysql_fetch_row() takođe vraća niz, sa tom razlikom da u njemu postoje samo numerički
indeksi.

Mysql_fetch_assoc() isto vraća niz, ali u njemu se nalaze samo tekstualno indeksirana polja.

Četvrta navedena funkcija, mysql_fethc_object() umesto niza vraća objekat stvoren od polja
reda.

Sve gore navedene funkcije imaju zajedničko to da će vratiti false na kraju ovog skupa
rezultata. Ovo čini while petlju idealnim alatom za pribavljanje svih rezultata jer će se obaviti
onoliko puta koliko ima rezultata u skupu. Još jedna zajednička stvar svim pomenutim
funkcijama je da kao svoj argument dobijaju result identifier koji vraća mysql_query()
funkcija.

while ($red=mysql_fetch_array($q))

U bloku naredbi while petlje ispisuje se jedan red tabele pa u pojedinu kolonu tog retka
ispisuje pribavljenje vrednosti poput =<?php echo $red["idnovost"]?> čime se ispisuje
naslov novosti.

1.5 Brisanje podataka (naredba DELETE)

DELETE FROM tabela

11
U prevodu gornja naredba znači „Obriši sve iz tabele imena tabela“. ali ovo je očigledno
situacija koja će se retko događati u nekim realnim skriptama, već se obično radi o brisaju
jednog ili manje grupe podataka.

Dalje se vidi kako bi izgledao upit koji obavlja brisanje jedne novosti na osnovu njenog ID-a.

DELETE FROM novosti WHERE idnovost=1

Gornji upit će obrisati samo onu novost koja ima idnovost jednak 1. WHERE služi za
naznačavanje da nakon njega slede uslovi pomoću kojih se ograničava skup podataka nad
kojima će se obaviti neka operacija.

DELETE FROM novosti WHERE naslov = ‘Naslov1’

U prevodu, zadato je MySql-u da obriše sve naslove koji imaju vrednost naslov1. Unutar
WHERE klazule je moguće kombinovati više uslova koji ograničavaju skup podataka nad
kojima se obavlja operacija kombinovanjem logičkim operatorima. WHERE može shvatiti
kao if u PHP-u koji se obavlja nad svakim redom tabele.

Takođe, pomoću DELETE naredbe nije moguće obrisati pojedinu vrednost unutar nekog
polja tabele. Nije moguće obrisati naslov novosti čiji je idnovst jednak 1. Za to se koristi
UPDATE naredba koja će biti objašnjena u sledećem poglavlju

Primer 4 : Brisanje novosti (uredjivanjenovosti.php)

Brisanje novosti će biti izvedeno u istom dokumentu / skripti iz prošlog primera. Sada kod iz
Primer 3 izgleda ovako:

<html>
<head>
<title>Pregled novosti</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>
<body>
<?php
include "konekcija.php";
// brisanje novosti

if (isset($_GET["brisanje"]))
{
$sql="DELETE FROM novosti WHERE idnovost=" . $_GET["idnovost"];
if (mysql_query($sql))
{
echo "Novost je uspesno obrisana";
} else {
echo "Nastala je greška pri brisanju novosti<br>" . mysql_error();
}
}
$sql="SELECT idnovost, naslov, tekst FROM novosti";
if (!$q=mysql_query($sql))
{
echo "Nastala je greška pri izvodenju upita<br>" . mysql_query();
die();
}
if (mysql_num_rows($q)==0)
{
echo "Nema novosti";

12
} else {
?>
<table width="760" border="1" cellpadding="1" cellspacing="1">
<tr>
<td><b>Naslov</b></td>
<td><b>Tekst</b></td>
<td><b>Akcija</b></td>
</tr>
<?php
while ($red=mysql_fetch_array($q))
{
?>
<tr>
<td><?php echo $red["naslov"]?></td>
<td><?php echo $red["tekst"]?></td>
<td>
<a href="uredjivanjenovosti.php?akcija=brisanje&idnovost=<?php echo
$red["idnovost"]?>"> Obrisi</a>
</td>
</tr>
<?php
}
?>
</table>
<?php
}
?>
</body>
</html>

Nakon provera ispunjenja svih uslova brisanja kreće se sa brisanjem.

$sql="DELETE FROM novosti WHERE idnovost=" . $_GET["idnovost"];


if (mysql_query($sql))
{
echo "Novost je uspesno obrisana";
} else {
echo "Nastala je greška pri brisanju novosti<br>" . mysql_error();
}
}

Izvršavanje upita je vrlo slično kao kod INSERT upita. Dovoljno je obaviti upit pomoću
mysql_query() funkcije. Čak nije obavezno ubaciti njen rezultat u neku varijablu pošto ne
postoji potreba za njenim korišćenjem kasnije u skripti.

Očigledno, ukoliko mysql_query() vrati true može se pretpostaviti da je novost obrisana a


ukoliko vrati false znači da je nastala neka greška koju će mysql_error() opisati.

Da bi proverili da li je novost stvarno obrisana, može se koristiti još jedna mysql funkcija koja
se nalazi u PHP-u. Radi se o mysql_affected_rows() funkciji. Funkcija vraća broj redova koji
su bili zahvaćeni poslednjom operacijom. Može se koristiti samo nakon DELETE, UPDATE i
INSERT upita, tj. upita koji vrše izmene nad podacima tabela.

$sql="DELETE FROM novosti WHERE idnovost=" . $_GET["idnovost"];


if (mysql_query($sql))
{
if (mysql_affected_rows() > 0 )
{
echo "Novost je uspešno obrisana";

13
} else {
echo "Nije obrisana ni jedna novost!";
}
} else {
echo "Nastala je greška pri brisanju novosti<br>" . mysql_error();
}

Deo koda:

<a href="uredjivanjenovosti.php?akcija=brisanje&idnovost=<?php echo


$red["idnovost"]?>"> Obrisi</a>

se ispisuje u svakom prolazu petlje kroz red u tabeli. Odabirom opcije obrisi fajl se ide na link
upisan u href atributu. U ovom slučaju to je isti onaj fajl koji se izvršava. Dodatni parameter
je idnovost, koji dobija vrednost u zavisnosti od toga koji red je izabran. Npr:

uredjivanjenovosti.php?akcija=brisanjeidnovost=2.

Ova vrednost se koristi u upitu preko $_GET["idnovost"];

1.6 Izmena postojećih podataka (naredba UPDATE)

Za izmenu podataka se koristi UPDATE naredba.

UPDATE novosti SET naslov="Novi naslov"

Kao i svi ostali upiti do sada i ovaj počinje navođenjem imena operacije koja se izvodi. Ovog
puta je odmah nakon naziva naredbe navedena tabela u kojoj se žele napraviti izmene.
Nakon imena tabele slede SET koji govori da slede parovi imena polja tabele sa pridruženim
novim vrednostima. Nakon izvršavanja gornjeg primera bi u svim redovima tabele naslov bio
promenjen u „Novi naslov“.

Ukoliko je potrebno izmeniti više polja istovremeno, to bi bilo učinjeno ovakvim upitom:

UPDATE novosti SET naslov="Novi naslov", datum="2006-04-21"

Znači, za izvođenje izmena vrednosti u više polja potrebno je dva naziva polja sa
pridruženim vrednostima odvojiti zarezom. Normalno, izmena vrednosti svim redovima neke
tabele je vrlo retka pojava u realnim skriptama. Iz tog razloga je moguće pomoću WHERE
klazule ograničiti skup podataka nad kojima se vrši
izmena. U konkretnom primeru bi to izgledalo od prilike ovako :

UPDATE novosti SET naslov="Novi naslov", datum="2006-04-21" WHERE idnovost=1

Ovim upitom je izmenjen naslov i datum upisa novosti koja ima ID jednak jedan.

Sledeći primer se nastavlja na prethodna dva. Potrebno je ubaciti jednu liniju koda u fajl
uredjivanjenovosti.php:

Nakon:
<a href="uredjivanjenovosti.php?idnovost=<?php echo $red["idnovost"]?>">
Obrisi</a>

ubaciti:

14
<a href="izmenanovosti.php?idnovost=<?php echo $red["idnovost"]?>">
Uredi</a>

Na taj način se u ovom fajlu omogućva vršenje izmena nad svakim redom. Nakon izbora
opcije uredi, poziva se fajl izmenanovosti.php sa odgovarajućim parametrom

Primer 5 : Izmena novosti

<html>
<head>
<title>Uredivanje novosti</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>
<body>
<h1>Uredivanje novosti</h1>
<hr>
<?php
include "konekcija.php";
if (!isset($_POST["dugmeuredi"]))
{
if (!isset($_GET["idnovost"]))
{
echo "Nepotpuni ulazni podaci";

}
else {
pribavlja se novost za prikaz u formi
$sql="SELECT * FROM novosti WHERE idnovost=" . $_GET["idnovost"];
if (!$q=mysql_query($sql))
{
echo "Nastala je greška pri izvodenju upita<br>" . mysql_query();
}
elseif (mysql_num_rows($q)==0) {
echo "Nepostojeca novost";
} else {
$novost=mysql_fetch_array($q);
}
}
?>
<form method="post" action="">
<input type="hidden" name="idnovost" value="<?php echo $_GET["idnovost"]?
>">
Naslov : <input type="text" name="naslov" value="<?php echo
$novost["naslov"]?>"><br>
Tekst : <textarea name="tekst"><?php echo $novost["tekst"]?></textarea><br>
<input type="submit" name="dugmeuredi" value="Ubaci">
</form>
<?php
}
//ovaj deo se izvršava kada je korisnik kliknuo “dugmeuredi”, odnosno
submit-ovao formu
else
{
ubacivanje izmena novosti
$sql="UPDATE novosti SET naslov='". $_POST["naslov"] ."', tekst='".
$_POST["tekst"]
."' WHERE idnovost=". $_POST["idnovost"];
if (mysql_query($sql))

15
{
if (mysql_affected_rows() > 0 )
{
echo "Novost je uspešno uredena.";
}
else {
echo "Novost nije izmenjena.";
}
}
else {
echo "Nastala je greška pri izmeni novosti<br>" . mysql_error();
}
}
?>
</body>
</html>

Objašnjenje :

Kao i u dosadašnjim primerima, na samom početku skripte je uključen konekcija.php.

Pre pribavljanja podataka iz baze moraju se obaviti odgovarajuće provere.

if (!isset($_GET["idnovost"]))
{
echo "Nepotpuni ulazni podaci";

Ovim se proverava da li je skripti prosleđena informacija ID-a novosti koja će biti uređena
kroz formu. Očigledno je da je ovo ključna informacija jer na osnovu nje se prihvata novost
kojom će biti popunjena forma, pa je u sledećem koraku korišćena za određivanje koja vest
se uređuje unutar UPDATE upita.

$sql="SELECT * FROM novosti WHERE idnovost=" . $_GET["idnovost"];


if (!$q=mysql_query($sql))
{
echo "Nastala je greška pri izvodenju upita<br>" . mysql_query();
} elseif (mysql_num_rows($q)==0) {
echo "Nepostojeca novost";
} else {
$novost=mysql_fetch_array($q);
}
}

$novost=mysql_fetch_array($q);

Ovaj upit može vratiti samo jedan rezultat koji se prihvata pozivanjem mysql_fetch_array()
funkcije tako da bi se isti rezultati postigli i korišćenjem while petlje.

U samoj formi bi trebalo izdvojiti jedan detalj :

<input type="hidden" name="idnovost" value="<?=$_GET["idnovost"]?>">

Za razliku od forme za unos novosti, ovog puta je dodato novo polje za skladištenje id
novosti koja se uređuje. Za takve informacije koje su ključne za funkcionisanje skripte, ne
treba ostaviti mogućnost da ih korisnik izmeni u procesu korišćenja skripte pa se tada obično
koriste hidden polja.

16
Kada je korisnik kliknuo “dugmeuredi”, odnosno submit-ovao formu, izvršava se sledeći deo
koda

$sql="UPDATE novosti SET naslov='". $_POST["naslov"] ."', tekst='".


$_POST["tekst"]
."' WHERE idnovost=". $_POST["idnovost"];
if (mysql_query($sql))
{
if (mysql_affected_rows() > 0 )
{
echo "Novost je uspešno uredena.";
} else {
echo "Novost nije izmenjena.";
}
} else {
echo "Nastala je greška pri izmeni novosti<br>" . mysql_error();
}

17
2 PHP I POVEZIVANJE SA DRUGIM BAZAMA
PODATAKA

U PHP – u može da se napravi i ODBC (Open DataBase Connectivity) konekcija, tj. PHP
skripte mogu da se povežu sa nekom drugom bazom podataka , npr. Microsoft Access preko
ODBC drajvera.

Pre svega, pod Windows operativnim sistemom, treba da se kreira ODBC konekcija. U
Control Panel – u, u jezičku Administrative Tools, dva puta se klikne na Data Sources
(ODBC). U okviru jezička (tab) System DNS, klikne se na ADD i izabere se odgovarajući
ODBC drajver. Kada se izabere ODBC drajver, klikne se na dugme Finish. Nakon toga
ostaje da se izabere lokacija baze podataka na koju će se PHP skripta povezati preko
ODBC drajvera klikom na Select tab. Izabere se Data Source Name (DSN) željene baze
podataka. Klikom na dugme Ok, ODBC konekcija je kreirana.

U narednoj tabeli dat je kratak pregled ODBC funkcija u PHP – u:

Naziv Funkcije Sintaksa Opis


odbc_connect odbc_connect(ime baze, Ova funkcija služi za
korisnicko ime, sifra) povezivanje na bazu
preko ODBC drajvera.
odbc_result odbc_result(broj polja, ime) Ova funkcija služi za
čitanje podataka iz polja
baze
odbc_exec odbc_exec(promenljiva u koju Služi za čitanje upita
je zapisan upit, promenljiva za preko odbc drajvera
odbc konekciju)
Odbc_fetch_row Odbc_fetch_row(promenljiva) Čita podatke iz redova
baze
Odbc_close Odbc_close() Služi za zatvaranje odbc
konekcije

18

You might also like