Download as pdf or txt
Download as pdf or txt
You are on page 1of 18

PHP - MYSQL

SADRAJ
UVOD....................................................................................................................................3 PHP MySQL..........................................................................................................................4 1.1 Konekcija na MySql server...........................................................................................4 1.2 Kreiranje baze i tabela (naredba CREATE DATABASE i CREATE TABLE).................6 1.3 Ubacivanje podataka u bazu (naredba INSERT INTO).................................................7 1.4 itanje podataka iz baze (naredba SELECT)...............................................................9 1.5 Brisanje podataka (naredba DELETE)........................................................................12 1.6 Izmena postojeih podataka (naredba UPDATE)......................................................14 2 PHP I POVEZIVANJE SA DRUGIM BAZAMA PODATAKA..............................................18

UVOD
Troslojna arhitektura predstavlja tip klijent-server arhitekture u kojoj su korisniki 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 najvei deo poslovne logike aplikacije. Podaci vezani za aplikaciju se mogu skladititi u obinom tekstualnom fajlu, iz kojeg se pomou PHP mogu itati i upisivati. Meutim, ako je u pitanju ozbiljnija aplikacija, neophodno je koristiti relacione baze podataka. Najee, ovo znai da e se korsititi server baze podataka koji podraava SQL (Structured Query Language) specifikaciju. SQL je standardni programski jezik za pristup i manipulaciju podacima iz relacionih baza podataka i podran je od strane svih servera relacionih baza podataka. U relacionim bazama podaci su skladiteni preko niza tabela. Svaka tabela sadri kolone koje opsiuju atribute podataka, a svaki red je instanca podataka.

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

PHP MySQL
PHP podrava API-je za pristup svim poznatim bazama podataka. U ovoj skripti se obrauje povezivanje PHP sa MySQL bazama podataka. MySQL je efikasan server za upravljanje bazama podataka. Predstavlja opensource reenje sa odlinim 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 mrei i njima se pristupa pomou IP-a ili domene (hosta). Uz podatak o hostu servera, potrebni su korisniko ime i lozinka da bi se uspeno povezalo na server i komuniciralo sa njim. U PHP postoji ugraena funkcija za povezivanje sa serverom mysql_connect. Funkcija vraa 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 izvri PHP skript. U sledeoj tabeli su date neke od osnovnih funkcija za spajanje na MySQL server. Naziv funkcije mysql_connect Sintaksa mysql_connect(ime servera:port, korisniko ime, ifra ukoliko postoji). Opis Povezuje PHP skriptu sa MySQL bazom. Ako je baza zatiena ifrom, ifra se mora uneti kao parameter. mysql_close (naziv promenljive Zatvara PHP konekciju kojoj je dodeljna vrednost sa bazom. mysql_connect funkcije) mysql_query( upit koji se izvrava U okviru ove naredbe se nad MySQL bazom, naziv moe koristiti bilo koji promenljive kojoj je dodeljena upit: za kreiranje tabele, vrednost mysql_connection()) za kreiranje baze, za popunjavanje baze, auriranje baze, itanje iz baze... mysql_error() Izvetava o mysql greci mysql_select_db(ime_baze) Bira MySQL bazu nad kojom e vriti upite

mysql_close mysql_query

mysql_error mysql_select_db

Primer 1 : Spajanje na MySql server Pomou fajla konekcija.php se vri povezivanje sa serverom na kojem je smetena baza
<?php if (!$db=mysql_connect("localhost", "root", "")) { die ("<b>Spajanje na mysql server je bilo neuspeno</b>"); } if (!mysql_select_db("bazanovosti", $db)) { die ("<b>Greka pri odabiru baze</b>"); } ?>

Ukoliko su MySql funkcijama dati tane podaci rezultat skripte bi trebalo da bude prazna stranica. Samo spajanje sa serverom se obavlja pomou mysql_connect funkcije. Funkciji se prosleuju tri argumenta. Prvi je host na kom se nalazi server. Ovde se moe uneti IP ili hostname servera, ali skoro uvek se radi o alliasu localhost na IP 127.0.0.1 (barem kod veine komercijalnih hosting providera). Drugi argument je korisniko ime pomou koje se spaja, a trei lozinka za tog korisnika. Ukoliko su svi dati podaci tani, pa je mysql pristupaan i operacionalan funkcija e vratiti spoj sa serverom. Ako je neka od informacija netana ili se neto desilo sa samim MySql serverom funkcija vraa false. Jo jedna vrlo bitna stvar je proveravati uspeh operacije spajanja. Naime, skoro uvek itava poslovna logika aplikacije zahteva uspenu konekciju na server. Sledei 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. Poto je spoj (rezultat mysql_connect funkcije) ubaen u varijablu $db ona je prosleena 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 izvrava neki SQL upit na serveru). No, ukoliko se u skripti spaja na dva razliita 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 prosleivati ona varijabla koja u sebi sadri onaj spoj na kom treba izvriti neka operaciju. U sledeoj tabeli dat je kratak prikaz SQL upita (SQL query) o kojima e biti rei 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 podravati 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. 5

(vrednost_za_kolonu1, vrednost_za kolonu2, vrednost_za_kolonu3) SELECT ime_kolone1,ime_kolone2, ime_kolone3, ime_koloneN FROM ime_tabele. (umesto naziva kolona moe se staviti * , to je dkorer znak da je sve selektovano). SELECT ime_kolone1,ime_kolone2, ime_kolone3, ime_koloneN FROM ime_tabele WHERE ime_kolone=vrednost SELECT ime_kolone1,ime_kolone2, ime_kolone3, ime_koloneN FROM ime_tabele ORDER BY ime_kolone (desc). UPDATE ime_tabele SET ime_kolone=nova_vrednost WHERE ime_kolone=stara_vrednost DELETE FROM ime_tabele WHERE ime_kolone=neka_vrednost

Selektuje odabrane, ili sve kolone iz tabele

Selektuje odabrane kolone na osnovu zadatog kriterijuma. Selektuje odabrane kolone iz tabele i razvrstava ih u opadajuem ili rastuem redosledu na osnovu neke kolone. Ako se ne navede Desc, po default u se podrazumeva rastui redosled. Menja konkretne vrednosti iz odreene tabelu na osnovu zadatih kriterijuma.

1.2 Kreiranje baze i tabela (naredba CREATE DATABASE i CREATE TABLE)1


Da bi se omoguilo 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 raunaru, delu za upravljanje bazama podataka se pristupa pomou opcije phpMyAdmin ili jednostavnim unoenjem adrese u adressbar browser-a http://localhost/phpmyadmin/. Bazu je najlake kreirati unoenjem imena baze i biranjem opcije create (dugme smeteno u sredinjem 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 izvri 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` )
);

Konano, baza ima strukturu kao na slici


1

Svi primeri obraeni u ovoj skripti podrazumevaju rad preko WAMP servera. Ukoliko postoji kompatibilnost verzija, svi primeri bi trebalo da budu validni i za druge sline solucije Apache servera i MySQL baze podataka. 6

1.3 Ubacivanje INSERT INTO)

podataka

bazu

(naredba

Baza i njoj pripadajue tabele su u poetku 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 greci u pisanju. Naime, ukoliko se neko polje izostavi u listi njemu se automatski upisuje defaultna vrednost (koja se moe postaviti pri stvaranju tabele). U ovom sluaju je pri stvaranju tabele polju idnovost data auto_increment osobina koja pri svakom insertu tom polju pridruuje po defaultu vrednost veu za 1 od poslednje upisane. Nakon liste polja dolazi VALUES ime se naznaava 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 sauvati 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. Najee 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"]))

{ } 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 greka 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 nain 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 neto ubaciti u bazu prvo se mora spojiti na MySql server i odabrati je, to je uraeno u prvom primeru koji je ubaen u dbsproj.php pa je ovde samo ukljuujen.
include "konekcija.php";

Nakon uspenog spajanja na bazu generie se SQL upit:


$sql="INSERT INTO novosti (naslov, tekst) VALUES ('$_POST[naslov]', '$_POST[tekst]')";

Sledei korak je stvaranje stringa u kojem se nalazi sam SQL upit za unos podataka u tablicu.
if (mysql_query($sql)) { echo "Novost je uspesno ubaena"; } else { echo "Nastala je greka pri ubacivanju novosti<br>" . mysql_error(); }

Ovo je glavni deo skripte koji obavlja samu komunikaciju sa MySQL serverom, tj. izvrava SQL upit na njemu. Obavlja se pomou mysql_query() funkcije. mysql_query() funkcija prima dva argumenta. Prvi je string podatak koji sadri 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 ubaen u $db varijablu. U sluaju INSERT upita mysql_query() vraa true ukoliko je upit uspeno obavljen ili false u suprotom. Iz tog razloga je mogue pomou if-a proveriti da li je novost ubaena u bazu i u zavisnosti od toga ispusati odgovarajuu 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 poinje 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 skraenica 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 greku i nee obaviti upit. Rezultat upita nije sortiran ni po jednom polju, ali redovi su vraeni po redosledu upisa u bazu, po idnovost polju poto se radi o auto_increment polju koje svakom novom redu daje vrednost veu za 1 od onog prolog.
SELECT * FROM novosti ORDER BY idnovost DESC

Da bi rezultati upita bili sortirani dodata je ORDER BY klazula u ovom sluaju na njegov kraj. ORDER BY mora biti propraen imenima polja po kojima se eli sortirati rezultat pa nain sortiranja. U ovom sluaju se radi o polju datum i DESC (descending) nainom, tj. silazno. Suprtotno, tj. uzlazno se moe sortirati tako da se izostavi DESC ili umesto njega upie 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> <?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>

Objanjenje : SELECT upiti su najopirniji. Razlog tome je prilino oigledan, jer uz obavljanje upita moraju se podaci i pribaviti tj. u ovom sluaju 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 prosleivati mysql_query() funkciji. Moe 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 greka pri izvodenju upita<br>" . mysql_query(); die(); }

Ovog puta je ubaen rezultat mysql_query funkcije u varijablu. Ovo je obavezno jedino kod izvravanja SELECT upita dok kod izvravanja ostalih to moe biti izostavljeno. U cilju izrade skripte koja nee ispisivati neke PHP / MySQL error - e mora se pre ispisa samog rezultata upita proveriti da li ima rezultata za prikaz pa ukoliko nema preduzeti odgovarajue korake da se korisnik obavesti o tome pa mu po potrebi ponuditi opcije to moe uiniti u toj situaciji. Ta provera se obavlja pomou :
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 vraa integer broj koji je jednak ili vei od nule. Normalno, result identifier mora biti vei od nule, tj. ova funkcija e javiti error ukoliko je pri obavljanju upita nastala greka tj. 10

mysql_query() je vratio false vrednost umesto result identifiera. Mora se voditi rauna da se ova funkcija ne poziva ukoliko skripta nije prola upit. To je u ovoj skripti osigurano die() funkcijom ukoliko je nastala greka pri izvravanju upita. Rezultati se ispisuju u tablici radi bolje preglednosti i razumljivosti, to je vrlo bitno kod izrade dinamikih 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 trei za opcije. Opcije su nita drugo nego linkovi koji pokreu nove operacije nad vesti koja se nalazi u istom retku tabele kao i opcije. Nakon to su ispisani headeri tabele vraa se u PHP mode i kree 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() vraa 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() takoe vraa niz, sa tom razlikom da u njemu postoje samo numeriki indeksi. Mysql_fetch_assoc() isto vraa niz, ali u njemu se nalaze samo tekstualno indeksirana polja. etvrta navedena funkcija, mysql_fethc_object() umesto niza vraa objekat stvoren od polja reda. Sve gore navedene funkcije imaju zajedniko 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 zajednika stvar svim pomenutim funkcijama je da kao svoj argument dobijaju result identifier koji vraa 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.

11

1.5
DELETE FROM tabela

Brisanje podataka (naredba DELETE)

U prevodu gornja naredba znai Obrii sve iz tabele imena tabela. ali ovo je oigledno situacija koja e se retko dogaati u nekim realnim skriptama, ve se obino 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 slui za naznaavanje da nakon njega slede uslovi pomou kojih se ograniava skup podataka nad kojima e se obaviti neka operacija.
DELETE FROM novosti WHERE naslov = Naslov1

U prevodu, zadato je MySql-u da obrie sve naslove koji imaju vrednost naslov1. Unutar WHERE klazule je mogue kombinovati vie uslova koji ograniavaju skup podataka nad kojima se obavlja operacija kombinovanjem logikim operatorima. WHERE moe shvatiti kao if u PHP-u koji se obavlja nad svakim redom tabele. Takoe, pomou DELETE naredbe nije mogue obrisati pojedinu vrednost unutar nekog polja tabele. Nije mogue obrisati naslov novosti iji je idnovst jednak 1. Za to se koristi UPDATE naredba koja e biti objanjena u sledeem poglavlju Primer 4 : Brisanje novosti (uredjivanjenovosti.php) Brisanje novosti e biti izvedeno u istom dokumentu / skripti iz prolog 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 greka pri brisanju novosti<br>" . mysql_error(); } } $sql="SELECT idnovost, naslov, tekst FROM novosti"; if (!$q=mysql_query($sql)) { echo "Nastala je greka pri izvodenju upita<br>" . mysql_query();

12

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> <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 kree se sa brisanjem.


$sql="DELETE FROM novosti WHERE idnovost=" . $_GET["idnovost"]; if (mysql_query($sql)) { echo "Novost je uspesno obrisana"; } else { echo "Nastala je greka pri brisanju novosti<br>" . mysql_error(); } }

Izvravanje upita je vrlo slino kao kod INSERT upita. Dovoljno je obaviti upit pomou mysql_query() funkcije. ak nije obavezno ubaciti njen rezultat u neku varijablu poto ne postoji potreba za njenim korienjem kasnije u skripti. Oigledno, ukoliko mysql_query() vrati true moe se pretpostaviti da je novost obrisana a ukoliko vrati false znai da je nastala neka greka koju e mysql_error() opisati. Da bi proverili da li je novost stvarno obrisana, moe se koristiti jo jedna mysql funkcija koja se nalazi u PHP-u. Radi se o mysql_affected_rows() funkciji. Funkcija vraa broj redova koji su bili zahvaeni poslednjom operacijom. Moe se koristiti samo nakon DELETE, UPDATE i INSERT upita, tj. upita koji vre izmene nad podacima tabela.
$sql="DELETE FROM novosti WHERE idnovost=" . $_GET["idnovost"];

13

if (mysql_query($sql)) { if (mysql_affected_rows() > 0 ) { echo "Novost je uspeno obrisana"; } else { echo "Nije obrisana ni jedna novost!"; } } else { echo "Nastala je greka 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 sluaju to je isti onaj fajl koji se izvrava. 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 UPDATE)

postojeih

podataka

(naredba

Za izmenu podataka se koristi UPDATE naredba.


UPDATE novosti SET naslov="Novi naslov"

Kao i svi ostali upiti do sada i ovaj poinje navoenjem 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 pridruenim novim vrednostima. Nakon izvravanja gornjeg primera bi u svim redovima tabele naslov bio promenjen u Novi naslov. Ukoliko je potrebno izmeniti vie polja istovremeno, to bi bilo uinjeno ovakvim upitom:
UPDATE novosti SET naslov="Novi naslov", datum="2006-04-21"

Znai, za izvoenje izmena vrednosti u vie polja potrebno je dva naziva polja sa pridruenim vrednostima odvojiti zarezom. Normalno, izmena vrednosti svim redovima neke tabele je vrlo retka pojava u realnim skriptama. Iz tog razloga je mogue pomou WHERE klazule ograniiti skup podataka nad kojima se vri 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.

14

Sledei primer se nastavlja na prethodna dva. Potrebno je ubaciti jednu liniju koda u fajl uredjivanjenovosti.php: Nakon:
<a href="uredjivanjenovosti.php?idnovost=<?php Obrisi</a> echo $red["idnovost"]?>">

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

Na taj nain se u ovom fajlu omoguva vrenje izmena nad svakim redom. Nakon izbora opcije uredi, poziva se fajl izmenanovosti.php sa odgovarajuim 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 greka 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 }

15

//ovaj deo se izvrava 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)) { if (mysql_affected_rows() > 0 ) { echo "Novost je uspeno uredena."; } else { echo "Novost nije izmenjena."; } } else { echo "Nastala je greka pri izmeni novosti<br>" . mysql_error(); } } ?> </body> </html>

Objanjenje : Kao i u dosadanjim primerima, na samom poetku skripte je ukljuen konekcija.php. Pre pribavljanja podataka iz baze moraju se obaviti odgovarajue provere.
if (!isset($_GET["idnovost"])) { echo "Nepotpuni ulazni podaci";

Ovim se proverava da li je skripti prosleena informacija ID-a novosti koja e biti ureena kroz formu. Oigledno je da je ovo kljuna informacija jer na osnovu nje se prihvata novost kojom e biti popunjena forma, pa je u sledeem koraku koriena za odreivanje koja vest se ureuje unutar UPDATE upita.
$sql="SELECT * FROM novosti WHERE idnovost=" . $_GET["idnovost"]; if (!$q=mysql_query($sql)) { echo "Nastala je greka 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 moe vratiti samo jedan rezultat koji se prihvata pozivanjem mysql_fetch_array() funkcije tako da bi se isti rezultati postigli i korienjem while petlje. 16

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 skladitenje id novosti koja se ureuje. Za takve informacije koje su kljune za funkcionisanje skripte, ne treba ostaviti mogunost da ih korisnik izmeni u procesu korienja skripte pa se tada obino koriste hidden polja. Kada je korisnik kliknuo dugmeuredi, odnosno submit-ovao formu, izvrava se sledei deo koda
$sql="UPDATE novosti SET naslov='". $_POST["naslov"] ."', $_POST["tekst"] ."' WHERE idnovost=". $_POST["idnovost"]; if (mysql_query($sql)) { if (mysql_affected_rows() > 0 ) { echo "Novost je uspeno uredena."; } else { echo "Novost nije izmenjena."; } } else { echo "Nastala je greka pri izmeni novosti<br>" . mysql_error(); } tekst='".

17

2 PHP I POVEZIVANJE SA DRUGIM BAZAMA PODATAKA


U PHP u moe da se napravi i ODBC (Open DataBase Connectivity) konekcija, tj. PHP skripte mogu da se poveu 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 jeziku Administrative Tools, dva puta se klikne na Data Sources (ODBC). U okviru jezika (tab) System DNS, klikne se na ADD i izabere se odgovarajui 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 odbc_connect odbc_result odbc_exec Odbc_fetch_row Odbc_close Sintaksa odbc_connect(ime korisnicko ime, sifra) Opis baze, Ova funkcija slui za povezivanje na bazu preko ODBC drajvera. odbc_result(broj polja, ime) Ova funkcija slui za itanje podataka iz polja baze odbc_exec(promenljiva u koju Slui za itanje upita je zapisan upit, promenljiva za preko odbc drajvera odbc konekciju) Odbc_fetch_row(promenljiva) ita podatke iz redova baze Odbc_close() Slui za zatvaranje odbc konekcije

18

You might also like