Projekat- Distribuirane Baze Podataka

Embed Size (px)

Citation preview

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    1/76

    V I S O K A T E H N I K A K O L AN I

    SEMINARSKI RAD

    Tema: MySQL i PHP

    Predmet: Distribuirane baze podataka

    Mentor: Student:

    dr MiloeviBorivoje Nemanja Ignjatovi RTS1/11

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    2/76

    1

    Sadrzaj:1.Uvod .................................................................................................................................................. 3

    2. MySQL ............................................................................................................................................. 4

    3.Struktura jezika ................................................................................................................................. 4

    3.1.Literarne vrednosti ..................................................................................................................... 4

    3.2.Stringovi ..................................................................................................................................... 4

    3.3.Brojevi ........................................................................................................................................ 5

    4.Data Definition Language (DDL) ..................................................................................................... 6

    4.1.Kreiranje baze podataka CREATE DATABASE sintaksa .................................................... 6

    4.2.Biranje baze podataka USE sintaksa ....................................................................................... 6

    4.3.Brisanje baze podataka DROP DATABASE sintaksa ............................................................ 7

    4.4.Kreiranje tabele - CREATE TABLE sintaksa ............................................................................ 7

    5.Struktura jezika ................................................................................................................................. 8

    5.1.Literarne vrednosti ..................................................................................................................... 8

    5.2.Stringovi ..................................................................................................................................... 8

    5.3.Brojevi ........................................................................................................................................ 9

    6.Data Definition Language (DDL) ................................................................................................... 10

    6.1.Kreiranje baze podataka CREATE DATABASE sintaksa .................................................. 10

    6.2.Biranje baze podataka USE sintaksa ..................................................................................... 10

    6.3.Brisanje baze podataka DROP DATABASE sintaksa .......................................................... 11

    6.4.Kreiranje tabele - CREATE TABLE sintaksa .......................................................................... 11

    6.5.Kreiranje indeksa CREATE INDEX sintaksa ....................................................................... 12

    6.6.Brisanje indeksa DROP INDEX sintaksa ............................................................................. 13

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    3/76

    2

    7.Data Manipulation Language (DML) ............................................................................................. 14

    7.1.Umetanje novih redova u tabelu INSERT sintaksa ............................................................... 14

    7.2.Umetanje novih redova u tabelu REPLACE sintaksa ........................................................... 15

    7.3.Brisanje redova iz tabele DELETE sintaksa ......................................................................... 15

    7.4.Auriranje redova u tabeli UPDATE sintaksa ..................................................................... 16

    7.5.Uitavanje podataka iz baze SELECT sintaksa .................................................................... 17

    8. PHP ................................................................................................................................................. 19

    9.Prvi skript ........................................................................................................................................ 20

    10.Slanje teksta u browser .................................................................................................................. 21

    11.Definisanje varijabli ...................................................................................................................... 22

    11.1.Predefinisane varijable ........................................................................................................... 24

    11.2.Oblast delovanja varijabli ....................................................................................................... 25

    12.Definisanje konstanti ..................................................................................................................... 28

    12.1.Prihvat varijabli iz formulara ................................................................................................. 29

    13.Izrazi (expressions) ....................................................................................................................... 31

    17.Projekat .......................................................................................................................................... 33

    11. Pravljenje baze podataka .............................................................................................................. 65

    13.Zaklju ak ....................................................................................................................................... 75

    12.Literatura: ...................................................................................................................................... 75

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    4/76

    3

    1.Uvod

    MySQL je posluitelj baze podataka (softwer) kojem se moe pristupiti preko mree, obino

    pomou korisnikog imena i lozinke. Takoe, MySQL ima veliku prednost zbog toga to postoverzije za sve operacijske sistem, i zbog toga to se izdaje pod GPL licencom; to znai besplatnkunu upotrebu.

    SQL omogu ava korisnicima pristup podacima u sistemima za upravljanje relacionim bazama podataka, kao to su Oracle, Sybase, Informix, Microsoft SQL Server, Access i drugi, tako todoputa korisnicima da opiu podatke koje ele da dobiju. SQL takoe omogu ava korisnicima dadefiniu podatke u nekoj bazi podataka i da manipuliu tim podacima. U ovom kursu bie opisanokako se koristi SQL, a to e sve biti potkrepljeno primerima. SQL koji se koristi u ovom dokumentupredstavlja ANSI verziju tog jezika, ili standardni SQL, i nijedna posebna mogu nost SQL-a koja jespecifi na za sisteme za upravljanje bazama podataka.

    MySQL je najpopularniji sistem otvorenog koda (Open Source) za upravljanje bazama podataka.

    Proizvod je kompanije MySQL AB poreklom iz vedske. MySQL je sistem za upravljanje bazama podataka. Baza podataka je strukturirana kolekcija

    podataka. Moe biti sve od najjednostavnije liste za kupovinu do kolekcije ogromne koli ine podataka neke korporacije. Za dodavanje, pristup i obradu podataka koji su smeteni u bazipodataka potreban je sistem za upravljanje bazama podataka kao to je MySQL server. MySQL je sistem za upravljanje relacionim bazama podataka. U relacionoj bazi podataka se podaci smetaju u vie me usobno povezanih tabela. Ovim se dobija na brzini i fleksibilnosti.deo naziva "MySQL" p oti e od "Structured Query Language" (strukturirani jezik za upite). SQL najrasprostranjeniji standardizovani jezik koji se koristi za pristup bazama podataka i definisan je

    ANSI/ISO SQL standardom. MySQL softver je softver otvorenog koda (Open Source) . Ovo zna i da svako moe koristitmodifikovati softver. Svako moe preuzeti MySQL softver sa interneta i koristiti ga bez pla anjSvaki korisnik moe prou iti izvorni kod softvera i izmeniti ga u skladu sa svojim potrebama.

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    5/76

    4

    MySQL server je veoma brz, pouzdan i jednostavan za korienje. MySQL server je prvobitn bio razvijen radi mnogo breg upravljanja velikim bazama podataka u odnosu na postojea reeuspeno se koristi u visokozahtevnim proizvodnim okruenjima vei broj godina.Iako pod stalnimrazvojem, MySQL server danas nudi bogat i koristan skup funkcija. Konektivnost, brzina i sigurnost

    ine MySQL server jako pogodnim za pristup bazama podataka na internetu. MySQL server radi u klijent/server sistemima Postoji jako puno softverskih reenja koja podravaju rad sa MySQL serverom

    2. MySQL

    3.Struktura jezika

    Pomenuemo pravila za pisanje sledeih elemenata SQL iskaza prilikomkorienja MySQL-a: Literarne vrednosti, kao to su stringovi i brojevi Identifikatori, kao to su nazivi baza, tabela i kolona Komentari

    Rezervisane rei

    3.1.Literarne vrednosti

    U literarne vrednosti spadaju stringovi, brojevi, heksadecimalne vrednosti, boolean vrednosti i

    NULL.

    3.2.Stringovi

    String je niz karaktera ogra en bilo jednostrukim navodnicima ('), bilo dvostrukim

    navodnicima ("). Primeri:'string'

    "jos jedan string"

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    6/76

    5

    U okviru stringa odreene sekvence imaju specijalno znaenje. Svaka od ovih sekvenci poinjebackslash karakterom (\) koji je poznat kao esca pe karakter. MySQL prepoznaje sledee escapesekvence:

    Za sve ostale escape sekvence backslash karakter se ignorie. Na primer, \x se interpretira kao x.Ove sekvence su osetljive na velika i mala slova. Na primer, \b se interpretira kao backspace, dok se

    \B tretira kao B.

    Postoji vie naina uklju ivanja navodnika unutar stringa: Jednostruki navodnik unutar stringa koji je ogranien jednostrukim navodnicimamoe biti napisan kao '' Dvostruki navodnik unutar stringa koji je ograni en dvostrukim navodnicima moebiti napisan kao ""

    Korienjem escape sekvenci Jednostruki navodnik unutar stringa koji je ograni en dvostrukim navodnicima ne zahtevaposeban tretman (ne zahteva dupliranje ili pisanje escape sekvence). Isto tako dvostruki navodnik

    unutar stringa koji je ograni en jednostrukim navodnicima ne zahteva poseban tretman.

    3.3.Brojevi

    Celi brojevi se predstavljaju nizom cifara. Re alni brojevi koriste taku (.) kao decimalni separator.Bilo koji tip brojeva moe imati znak + ili znak - na po etku radi oznaavanja pozitivnih ilinegativnih vrednosti respektivno. Primeri ispravno napisanih celih brojeva:

    1232

    24

    0

    -31

    Primeri ispravno napisanih realnih brojeva:

    128.48

    -35.785e+10

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    7/76

    6

    120.00

    Celi brojevi se mogu koristiti u izraunavanjima sa realnim brojevima i tada se tretiraju kaoekvivalentni realni brojevi.

    4.Data Definition Language (DDL)

    Jezik za definisanje podataka (Dat a Definition Language (DDL)) omogu ava formiranjestrukture baze podataka.

    4.1.Kreiranje baze podataka CREATE DATABASE sintaksa Nakon projektovanja strukture baze podataka, naredni korak je, sasvim logino, izdavanje koma

    MySQL-u za kreiranje nove baze podataka. To se radi pomo u SQL-ove komande CREATEDATABASE, na sledei na in:

    CREATE DATABASE [IF NOT EXISTS] db_name;

    CREATE DATABASE kreira bazu podataka sa datim nazivom. Ako ve postoji baza podataka sdatim nazivom, a nije upotrebljeno IF NOT EXISTS, javie se greka.Kreiranje baze podataka poslovanje:

    CREATE DATABASE poslovanje ;

    Ako korisnik eli da proveri da li je ova komanda uspeno izvrena moe da izda komandu:SHOW DATABASES;

    Trebalo bi da se naziv nove baze podataka pojavi u spisku baza podataka na serveru. Nazive baza

    podataka je najbolje pisati mali m slovima. U nazivima baza ne treba koristiti srpske karaktere. U

    nazivima baza ne treba koristiti razmake. Ako se eli efekat razmaka treba koristiti donju crtu (_Sada na serveru postoji prazna baza podataka.

    4.2.Biranje baze podataka USE sintaksa

    USE db_name;USE db_name iskaz kae MySQL-u da koristi bazu sa datim nazivom kao podrazumevanu(tekuu) bazu za iskaze koji slede. Baza sa datim nazivom ostaje podrazumevana do krajasesije ili dok se ne prosledi neki drugi USE iskaz.

    USE poslovanje ;

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    8/76

    7

    Proglaavanje neke baze podrazumevanom (tekuom) pomo u USE iskaza ne spreava korisnipristupa tabelama iz ostalih baza podataka na serveru.

    4.3.Brisanje baze podataka DROP DATABASE sintaksaDROP DATABASE [IF EXISTS] db_name;

    DROP DATABASE brie sve tabele u bazi podataka sa datim nazivom i nakon toga brie i samubazu podataka. Treba biti jako oprezan sa ovim iskazom!

    IF EXISTS se koristi da bi se spre ila pojava greke ako na serveru ne postoji baza podataka sa

    datim nazivom.

    DROP DATABASE vraa broj tabela koje su bile obrisane.

    4.4.Kreiranje tabele - CREATE TABLE sintaksa

    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

    ( create_definition,...)

    [table_option ...]

    ili:

    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

    [( create_definition,...)]

    [table_option ...]

    select_statement

    ili:

    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

    { LIKE old_tbl_name | (LIKE old_tbl_name ) }

    CREATE TABLE kreira tabelu sa datim nazivom. Tabela se kreira u podrazumevanoj (tekuoj) bazi. Greka se javlja ako tabela postoji, ako ne postoji podrazumevana (tekua) baza ili ako bapostoji.

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    9/76

    8

    Naziv tabele moe biti specificiran kao db_name.tbl_name da bi se kreirala tabela u odre eno podataka. Ovo funkcionie nezavisno od toga da li postoji podrazumevana (tekua) baza, poduslovom da baza sa datim nazivom postoji. Prilikom kreiranja tabele se moe koristitiTEMPORARY kljuna re. Tabela kreirana sa ovom kljunom rei je vidljiva samo u teku oj

    konekciji (sesiji) i biva automatski obrisana nakon prekida konekcije . Kljuna re IF NOT EXISTSspreava pojavljivanje greke ako tabela sa istim nazivom postoji. Nazive tabela je najbolje pisamalim slovima. U nazivima tabela ne treba koristiti srpske karaktere. U nazivima tabela ne treba

    koristiti razmake. Ako se eliefekat razmaka treba koristiti donju crtu (_).Pomou odredbe LIKE old_tbl_name moe se napraviti nova tabela koja ima istu emu (strukt

    kao neka druga tabela.

    U komandi CREATE TABLE deklariu se unutar zagrada potrebne kolone, njihovi tipovi podataka idruge informacije koje se ti u strukture tabele. Najjednostavnija definicijakolone sastoji se samo od naziva kolone i tipa podataka u koloni.

    Komanda CREATE TABLE se moe zavriti komandom SELECT. SELECT je SQL-ova komandakoja omogu ava uitavanje redova iz jedne ili vie tabela. Pomo u ove opcije se moe napuninova tabela podacima koje uitava zadata komanda SELECT.

    5.Struktura jezika

    Pomenuemo pravila za pisanje sledeih elemenata SQL iskaza prilikom

    korienja MySQL-a: Literarne vrednosti, kao to su stringovi i brojevi Identifikatori, kao to su nazivi baza, tabela i kolona Komentari Rezervisane rei

    5.1.Literarne vrednosti

    U literarne vrednosti spadaju stringovi, brojevi, heksadecimalne vrednosti, boolean vrednosti i

    NULL.

    5.2.Stringovi

    String je niz karaktera ogra en bilo jednostrukim navodnicima ('), bilo dvostrukimnavodnicima ("). Primeri:

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    10/76

    9

    'string'

    "jos jedan string"

    U okviru stringa odreene sekvence imaju specijalno znaenje. Svaka od ovih sekvenci poin jebackslash karakterom (\ ) koji je poznat kao escape karakter. MySQL prepoznaje sledee escape

    sekvence:

    Za sve ostale escape sekvence backslash karakter se ignorie. Na primer, \x se interpretira kao x.Ove sekvence su osetljive na velika i mala slova. Na primer, \b se interpretira kao backspace, dok se

    \B tretira kao B.

    Postoji vie naina uklju ivanja navodnika unutar stringa: Jednostruki navodnik unutar stringa koji je ogranien jednostrukim navodnicimamoe biti napisan kao '' Dvostruki navodnik unutar stringa koji je ograni en dvostrukim navodnicima moebiti napisan kao ""

    Korienjem escape sekvenci

    Jednostruki navodnik unutar stringa koji je ograni en dvostrukim navodnicima ne zahtevaposeban tretman (ne zahteva dupliranje ili pisanje escape sekvence). Isto tako dvostruki navodnik

    unutar stringa koji je ograni en jednostrukim navodnicima ne zahteva poseban tretman.

    5.3.Brojevi

    Celi brojevi se predstavljaju nizom cifara. Re alni brojevi koriste taku (.) kao decimalni separator.Bilo koji tip brojeva moe imati znak + ili znak - na po etku radi oznaavanja pozitivnih ilinegativnih vrednosti respektivno. Primeri ispravno napisanih celih brojeva:

    1232

    24

    0

    -31

    Primeri ispravno napisanih realnih brojeva:

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    11/76

    10

    128.48

    -35.785e+10

    120.00

    Celi brojevi se mogu koristiti u izraunavanjima sa realnim brojevima i tada se tretiraju kao

    ekvivalentni realni brojevi.

    6.Data Definition Language (DDL)

    Jezik za definisanje podataka (Dat a Definition Language (DDL)) omogu ava formiranjestrukture baze podataka.

    6.1.Kreiranje baze podataka CREATE DATABASE sintaksa Nakon projektovanja strukture baze podataka, naredni korak je, sasvim logino, izdavanje koma

    MySQL-u za kreiranje nove baze podataka. To se radi pomo u SQL-ove komande CREATEDATABASE, na sledei na in:

    CREATE DATABASE [IF NOT EXISTS] db_name;

    CREATE DATABASE kreira bazu podataka sa datim nazivom. Ako ve postoji baza podataka sdatim nazivom, a nije upotrebljeno IF NOT EXISTS, javie se greka.Kreiranje baze podataka poslovanje:

    CREATE DATABASE poslovanje ;

    Ako korisnik eli da proveri da li je ova komanda uspeno izvrena moe da izda komandu:SHOW DATABASES;

    Trebalo bi da se naziv nove baze podataka pojavi u spisku baza podataka na serveru. Nazive baza

    podataka je najbolje pisati mali m slovima. U nazivima baza ne treba koristiti srpske karaktere. U

    nazivima baza ne treba koristiti razmake. Ako se eli efekat razmaka treba koristiti donju crtu (_

    Sada na serveru postoji prazna baza podataka.

    6.2.Biranje baze podataka USE sintaksaUSE db_name;

    USE db_name iskaz kae MySQL-u da koristi bazu sa datim nazivom kao podrazumevanu(tekuu) bazu za iskaze koji slede. Baza sa datim nazivom ostaje podrazumevana do kraja

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    12/76

    11

    sesije ili dok se ne prosledi neki drugi USE iskaz.

    USE poslovanje ;

    Proglaavanje neke baze podrazumevanom (tekuom) pomo u USE iskaza ne spreava korisnipristupa tabelama iz ostalih baza podataka na serveru.

    6.3.Brisanje baze podataka DROP DATABASE sintaksaDROP DATABASE [IF EXISTS] db_name;

    DROP DATABASE brie sve tabele u bazi podataka sa datim nazivom i nakon toga brie i samu

    bazu podataka. Treba biti jako oprezan sa ovim iskazom!

    IF EXISTS se koristi da bi se spre ila pojava greke ako na serveru ne postoji baza podataka sa

    datim nazivom.

    DROP DATABASE vraa broj tabela koje su bile obrisane.

    6.4.Kreiranje tabele - CREATE TABLE sintaksa

    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

    ( create_definition,...)

    [table_option ...]

    ili:

    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

    [( create_definition,...)]

    [table_option ...]

    select_statement

    ili:

    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name{ LIKE old_tbl_name | (LIKE old_tbl_name ) }

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    13/76

    12

    CREATE TABLE kreira tabelu sa datim nazivom. Tabela se kreira u podrazumevanoj (tekuoj) bazi. Greka se javlja ako tabela postoji, ako ne postoji podrazumevana (tekua) baza ili ako bapostoji.

    Naziv tabele moe biti specificiran kao db_name.tbl_name da bi se kreirala tabela u odre eno

    podataka. Ovo funkcionie nezavisno od toga da li postoji podrazumevana (tekua) baza, poduslovom da baza sa datim nazivom postoji. Prilikom kreiranja tabele se moe koristitiTEMPORARY kljuna re. Tabela kreirana sa ovom kljunom rei je vidljiva samo u teku ojkonekciji (sesiji) i biva automatski obrisana nakon prekida konekcije . Kljuna re IF NOT EXISTSspreava pojavljivanje greke ako tabela sa istim nazivom postoji. Nazive tabela je najbolje pisa

    malim slovima. U nazivima tabela ne treba koristiti srpske karaktere. U nazivima tabela ne treba

    koristiti razmake. Ako se eliefekat razmaka treba koristiti donju crtu (_).Pomou odredbe LIKE old_tbl_name moe se napraviti nova tabela koja ima istu emu (struktkao neka druga tabela.

    U komandi CREATE TABLE deklariu se unutar zagrada potrebne kolone, njihovi tipovi podataka idruge informacije koje se ti u strukture tabele. Najjednostavnija definicijakolone sastoji se samo od naziva kolone i tipa podataka u koloni.

    Komanda CREATE TABLE se moe zavriti komandom SELECT. SELECT je SQL-ova komandakoja omogu ava uitavanje redova iz jedne ili vie tabela. Pomo u ove opcije se moe napuninova tabela podacima koje uitava zadata komanda SELECT.

    6.5.Kreiranje indeksa CREATE INDEX sintaksaSvi indeksi koji su neophodni naj ee e se kreirati automatski prilikom k reiranja tabele. Za svakukolonu koja se deklarie sa opcijom PRIMARY KEY, KEY, UNIQUE ili INDEX, automatski seformira i indeks. Ako se ustanovi da se koristi ve i broj upita koji obuhvataju kolonu za koju nidefinisan indeks novi indeks se moe dodati pomou komande CREATE INDEX:

    CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name

    [index_type ]

    ON tbl_name ( index_col_name ,...)

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    14/76

    13

    index_col_name :

    col_name [( length )] [ASC | DESC]

    index_type :

    USING {BTREE | HASH}

    Primer:

    CREATE INDEX k_naziv_firme ON firme ( naziv_firme);

    Ovde je bio kreiran indeks za kolonu naziv_firme tabele firme. Naziv indeksa je

    k_naziv_firme.

    Zanimljivo je da se, pre izvravanja, komanda CREATE INDEX preslikava u komandu ALTERTABLE. Indeksi definisani nad kolonama tipa CHAR, VARCHAR, BINARY i VARBINARY

    mogu se ograni iti na prvih nekoliko znakova u polju. To se moe uraditi tako to se iza imenaindeksirane kolone zada izme u zagrada broj znakova koji eli da se indeksira:

    CREATE INDEX k_naziv_firme ON firme ( naziv_firme(5));

    Poto indeksi nad kolonama tekstualnog tipa nisu tako efikasni kao indeksi nad numerikimkolonama, indeksiranje samo nekoliko po etnih znakova poboljava performanse.

    6.6.Brisanje indeksa DROP INDEX sintaksaDROP INDEX index_name ON tbl_name;

    Da bi se izbrisao indeks mora se zadati i naziv tabele kojoj je pridruen.

    DROP INDEX k_naziv_firme ON firme;

    Ovde je obrisan prethodno kreirani indeks k_naziv_firme.

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    15/76

    14

    7.Data Manipulation Language (DML)

    Jezik za rad sa podacima ( Data Manipulation Language (DML)) slui za umetanje, brisanjei auriranje podataka u bazi.

    7.1.Umetanje novih redova u tabelu INSERT sintaksaINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]

    [INTO] tbl_name [( col_name,...)]

    VALUES ({ expr | DEFAULT},...),(...),...

    [ ON DUPLICATE KEY UPDATE col_name= expr , ... ]

    Komanda INSERT ume e redove u postoje u tabelu. INSERT ... VALUES i INSERT ...SET forme iskaza ume u redove na osnovu eksplicitno specificiranih vr ednosti. INSERT ...SELECT forma ume e redove selektovane iz jedne ili vie tabela.tbl_name je naziv tabele u koju se umeu redovi. Kolone za koje iskaz obezbeuje vrednosti m biti specificirane na sledei na in: Moe se proslediti lista naziva kolona razdvojenih zarezima iza naziva tabele. U ovom sluajvrednost za svaku imenovanu kolonu u listi mora biti obezbeena VALUES listom ili SELECTiskazom.

    Ako se ne specificira lista naziva kolona za INSERT ... VALUES ili INSERT SELECT,vrednosti za svaku kolonu tabele moraju biti obezbe ene VALUES listom ili SELECT iskazom

    SET klauzula omoguava da se izri ito zadaju kolone u koje treba umetnuti podatke Kada sekoristi prvi oblik komande INSERT (INSERT ... VALUES) za svaki novi red tabele se mora zadati

    lista vrednosti koje su pore ane istim redosledom kao odgovaraju e ciljne kolone tabele. Ovajoblik omoguava da se jednom komandom INSERT umetne vie novih redova u tabelu (vie lisvrednosti u zagradama me usobno razdvojenih zarezima).

    INSERT INTO tbl_name ( a ,b ,c) VALUES (1,2,3),(4,5,6),(7,8,9);

    Prethodni iskaz umee tri reda u tabelu.Sledei iskaz je lo zato to broj vrednosti u listi ne odgovara broju naziva kolona:

    INSERT INTO tbl_name ( a ,b ,c) VALUES (1,2,3,4,5,6,7,8,9);

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    16/76

    15

    Drugi oblik komande INSERT omoguava da se izri ito zadaju kolone u koje treba umetnuti podatke. Ovaj oblik omoguava da se unese samo jedan red po komandi, ali ne moraju se zadatvrednosti za sve kolone.

    INSERT INTO firmeSET firma = 1,

    naziv_firme = 'BALKAN';

    Ovde se dodaje novi red u tabelu firme, ali se prosleuju podaci samo za kolone firma inaziv_firme.

    7.2.Umetanje novih redova u tabelu REPLACE sintaksaKomanda REPLACE deluje slino komandi INSERT, s tom razlikom to ako doe do dupliranj

    kljua novi red koji korisnik umee zamenjuje postojei red.

    REPLACE [LOW_PRIORITY | DELAYED]

    [INTO] tbl_name [( col_name,...)]

    VALUES ({ expr | DEFAULT},...),(...),...

    7.3.Brisanje redova iz tabele DELETE sintaksaSintaksa za jednu tabelu:

    DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name

    [WHERE where_condition]

    [ORDER BY ...]

    [LIMIT row_count ]

    Sintaksa za vie tabela:

    DELETE [LOW_PRIORITY] [QUICK] [IGNORE]

    tbl_name[.*] [, tbl_name[.*]] ...

    FROM table_references

    [WHERE where_condition]

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    17/76

    16

    Kod sintakse za jednu tabelu DELETE iskaz brie redove iz tabele tbl_name i vraa broj obrisanredova. Ako se upotrebi WHERE klauzula briu se samo redovikoji zadovoljavaju uslov naveden unjoj. Ako se ne koristi WHERE klauzula briu se svi redovi. Ako je specificirana ORDER BYklauzula redovi se briu po redosledu koji je specificiran. LIMIT klauzula odre uje maksimala

    broj redova koji komanda DELETE sme da izbrie. Korisna je u kombinaciji sa klauzulom ORDERBY ili kada se eli da se sprei brisanje prevelikog broja redova. ORDER BY se koristi ukombinaciji sa LIMIT kada se na primer eli da se u tabeli izbrie samo n najstarijih redova.

    DELETE FROM f irme WHERE mesto = 'Ni';Ovde se briu redovi iz tabele firme u kojima je vrednost u koloni mesto Ni (drugim reima brse sve firme iz Nia). Ovde se briu redovi iz tri tabele baze podataka zbog opcije ON DELETECASCADE za sve strane klju eve u svim tabelama baze!!!

    Kod prvog oblika sintakse za vie tabela komanda DELETE brie iz svake tbl_name tabele redokoji zadovoljavaju navedene uslove. Redovi e biti izbrisani iz tabela navedenih u odredbiDELETE, dok e tabele navedene u odredbi FROM biti pretraene, ali se redovi iz njih ne e brosim ako su navedene i u odredbi DELETE.

    7.4.Auriranje redova u tabeli UPDATE sintaksaSintaksa za jednu tabelu:

    UPDATE [LOW_PRIORITY] [IGNORE] tbl_name

    SET col_name1 = expr1 [, col_name2 = expr2 ...]

    [WHERE where_condition]

    [ORDER BY ...]

    [LIMIT row_count ]

    Sintaksa za vie tabela:UPDATE [LOW_PRIORITY] [IGNORE] table_references

    SET col_name1 = expr1 [, col_name2 = expr2 ...]

    [WHERE where_condition]

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    18/76

    17

    Komanda UPDATE je po mnogo emu slina komandi DELETE.Moe se dodati neobavezna opcija WHERE da bi se aurirali samo odre eni redovi, a ako se izostavi bi e aurirani svi redovi tabele:

    UPDATE userSET password = 'test';

    Ovde se za sve korisnike postavlja vrednost test u koloni password.

    ALTER TABLE detalji_fakture

    ADD COLUMN iznos DECIMAL(12,2);

    UPDATE detalji_fakture

    SET iznos = kolicina * dan_cena;

    Ovde se dodaje kolona iznos tabeli detalji_fakture i nakon toga se za sve redove te tabele

    ra una iznos kao kolicina * dan_cena.

    Druga navedena verzija komande UPDATE omogu ava auriranje vie tabela jednom komandoPostupak je slian brisanju podataka iz vie tabela istovremeno. Treba imati u vidu da e bitiaurirane samo one kolone koje se izriito navedu u odredbi SET. Odredbe LOW PRIORITY iIGNORE deluju na isti nain kao u komandi INSERT. Odredbe ORDER BY i LIMIT deluju na

    na in kao u komadi DELETE.

    7.5.Uitavanje podataka iz baze SELECT sintaksaKomanda SE LECT ima sledei opti oblik:SELECT kolone

    FROM tabele

    [WHERE uslovi ]

    [GROUP BY grupe

    [HAVING uslovi_za_grupe]]

    [ORDER BY kolone_za_sortiranje]

    [LIMIT broj ];

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    19/76

    18

    Ovo nije potpuna sintaksa (potpuna sintaksa e biti objanjena kasnije), ali ilustruje opti oblik komande.

    Komanda SELECT ima veliki broj neobaveznih odredaba. Ne moraju se uvek navoditi, ali ako se

    upotrebljavaju, moraju se zadavati redosledom koji je prikazan u optem obliku komande.

    Jednostavni upitiPrimer najjednostavnijeg oblika komande SELECT izgleda ovako:

    SELECT * FROM firme;

    Ako se ovaj upit izvri sa podacima koji postoje u bazi podataka poslovanje trebalo bi da se dorezultati nalik na sledee:Ovaj upit je uitao sve podatke iz zadate tabele tj. vrednosti iz svih kolona za sve redove tabelefirme.

    Razume se, sutina relacione baze podataka svakako nije u tome da daje sve podatke kojisu u nju uneseni, ve da omogui pronalaenje odre enih podataka.

    Ovaj upit je u itao sve podatke iz zadate tabele tj. vrednosti iz svih kolona za sve redovetabele firme. Razume se, sutina relacione baze podataka svakako nije u tome da daje sve podatkoji su u nju uneseni, ve da omogu i pronalaenje odreenih podataka.

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    20/76

    19

    8. PHP

    PHP je iroko rasprostranjenOpen Source skript jezik koji se izvrava na straniweb servera, anamenjen je za kreiranje dinamikihweb stranica, i uopte razliitih Internet aplikacija. PHP je

    nastao 1994. godine od stane Pasmus Ledorfa, a inae je skraenica od "Personal Home PageTools". Autor je jezik kreirao radi odravanja vlasitih linihweb stranica, a na bazi tada jakozastupljenog Perl jezika. Inae, sintaksa samog jezika je vrlo slina sintaksama jezikaC i Perl .Nakon njegovog pojavljivanja, veliki broj programera i dizajnera je uzeo uea u njegovom daljemrazvoju (poto se radi oOpen Source projektu), tako da je jezik sada "dogurao" do verzije 4 (akoimate volje i entuzijazma i sami moete raditi na njegovom razvoju).PHP je podran od strane velikog broja platformi (gotovo svih), ali se posebno odomaio na

    Unix/Linux platformi. Direktan konkurent PHP-Linux-Apache platformi je ASP-WindowsNT-IIS platforma, ali po veini Internet marketing agencija ubedljivo vodi PHP platforma, uglavnom zato je besplatna i to je otvorenog koda. Pored svega navedenog, svoju popularnost duguje svojosposobnosti da podrava veliki broj sistema za upravljanje bazama podataka (RDBMS), kao tona prvom mestu MySQL; pa zatim i ostali: MS SQL server , Oracle , Postgre SQL , MS Access i jo

    mnogi drugi.

    PHP na strani web servera predstavlja pretprocesor kome se prosleuju PHP skriptovi. Ovo u praradi na sledei nain, kreirate HTML stranice i u njih dodate i svoje PHP skriptove, date stranicobavezno imaju ekstenziju "*.php". Kada ih postavite na web server i korisnik ih zatrai putem svogbrowser -a, web server e na osnovu ekstenzije prepoznati da se radi o PHP stranicama i proslediih instaliranom pretprocesoru. Potom e pretprocesor izvriti programski kod irezultat vratiti web serveru, koji nakon toga sve aljebrowser -u. Rezultat procesiranja su najee dinamiki kreiraneHTML stranice, koje se zasnivaju na podacima iz neke od baza podataka.

    U sluaju da i sami odravate nekiweb site , sigurno ste se sus reli sa problemom odravanja sajta i tokada broj stranica prevazie kritian broj. U tom sluaju, kada imamo veliki broj stranica, svaki

    update je vrlo mukotrpan. U tom momentu bi trebalo da se okrenete PHP-u ili ASP-u, a sve uzavisnosti od toga na kojoj platformi radi vahost provajder.Poto je pria o PHP-u zaista iroka, ovde emo stati, a priu emo nastaviti u sledeim prilozimaPrvo to emo obraditi je, kako osposobiti sopstveni kompjuter za PHP razvoj.

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    21/76

    20

    Poto je instaliran i web server i podrka za PHP, pre samog poetka potrebno je da startujeteApache server aktiviranjem fajla:

    C:\nusphere\apache\Apache.exe -s

    Ovo je default putanja do vaegweb servera. Nakon ove procedure moemo da krenemo u kreiranjevaih prvihPHP stranica.Za kreiranje PHP skriptova potreban vam je bilo kakav tekst editor. To moe da bude i onaj kojidolazi uz Windows - " Notepad ", ali vam mi za bilo kakav komotniji rad preporuujemo dva drugaeditora, a to su:

    Note Tab Light - koji moete preuzeti sa adrese www.notetab.com

    TextPad - koji moete preuzeti sa adrese www.textpad.com Kodiranje skriptova emo zapoeti od programerskog standarda, programa "Zdravo svete!" (tj."Hello World!") iz koga emo videti samu sintaksuPHP -a. Otvorite neki od editora i ubacite sledeikod:

    PHP pocetak

    Snimi emofajl, obavezno sa ekstenzijom "*.php" ili "*.php3", "*.phtml". P reporuueno je da tobude ".php", jer je to deo PHP standarda. Mada, fajl moemo snimiti i sa ekstenzijom .htm ili .html ,s tim to tada morate da podesimo server da i takve fajlove, pre slanja u browser , propusti kroz PHP parser. Fajl, za poetak, obavezno snimamou folder "C:\nusphere\apache\Htdocs", koji je root folder n aeg servera. Sada emo isprobati namali PHP skript, a ujedno emo i istestirati server.Otvori emo browser i u Address liniju ukucati "http://localhost/proba.php". Dobiemo ekran kao naslici, znai samo jednu reenicu. Izvorni kod emo videti preko menija "View > Source", a rezultatparsiranja e biti:

    9.Prvi skript

    http://www.krstarica.com/lat/magazin/programiranje/www.notetab.comhttp://www.krstarica.com/lat/magazin/programiranje/www.notetab.comhttp://www.krstarica.com/lat/magazin/programiranje/www.notetab.comhttp://www.krstarica.com/lat/magazin/programiranje/www.textpad.comhttp://www.krstarica.com/lat/magazin/programiranje/www.textpad.comhttp://www.krstarica.com/lat/magazin/programiranje/www.textpad.comhttp://www.krstarica.com/lat/magazin/programiranje/www.textpad.comhttp://www.krstarica.com/lat/magazin/programiranje/www.notetab.com
  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    22/76

    21

    PHP pocetak

    Zdravo svete!

    Kao to smo i videli u primeru, svaki PHP skript poinje sa "".Skriptovi se ugnjeavaju u standardne HTML stranice, ali mogu biti i u eksternim fajlovima. Ovdesmo za ispisivanje teksta u browser -u iskoristili funkciju "echo", a cilj skripta je osnovno

    poznavanje sa PHP sintaksom.

    Nakon prvog skripta ("Hello World!"), preiemo na objanjavanje najjednostavnijih funkcija, tone koje slue za "slanje" obinog teksta u HTML (odnosno browser korisnika). Za "slanje" tekstaPHP obezbeuje tri vrste funkcija, a mi smo u prolom prilogu iskoristili funkciju "echo ". Za primeru bacite sledei kod u neki ".php" fajl, i poaljite ga serveru (localhost \fajl.php):

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    23/76

    22

    printf ("Ne zaboravite zagradu sa

    funkcijom printf.");

    ?>

    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 vidimoupotrebili smo sve tri funkcije:

    print - najjednostavnija funkcija za slanje teksta u prozor browser -a. Funkcija moe da senavodi i bez, i sa zagradama.

    echo - funkcija slina prethodnoj, samo to ovde moete da kombinujete vie stringova, kobavezno odvajamo zarezima. Sa ovom funkcijom se ne koriste zagrade.

    printf - funkcija koja najee slui za formatiranje brojki kao intedera, decimala itd. Ovfunkcija obavezno zahteva upotrebu zagrada.

    Varijable se u PHP -u predstavljaju tako to se ispred naziva varijable postavlja znak dolara ($). Pridefinisanju varijabli moramo paziti i na upotrebu malih- velikih slova, poto su nazivi varijabliosetljivi na upotrebu "malih/velikih" karaktera ( case-sensitive ). Pored ovoga moramo paziti i na

    karakter kojim poinjemo naziv varijable. Iza znaka dolara mogu da idu samo slova alfabeta ili podvuena crta (underscore ), a iza njih mogu da idu i slova, cifre, ili linije. Evo i primera pravilnog

    11.Definisanje varijabli

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    24/76

    23

    definisanja PHP varijabli:

    Rezultat koji e server vratiti e biti:

    Milan,Prokic

    pocetak

    U verziji jezika PHP3 , varijablama se uvek dodeljuje i vrednost. Pri ovome, kada jednoj varijabli

    dodelimo vrednost neke druge varijable, njoj se dodeljuje samo vrednost prve varijable, bez

    referenci. Ovo znai, da na primer, kada jednoj varijabli dodelimo vrednost druge varijable, i za

    promenimo vrednost prvoj varijabli, data promena nee uticati na vrednost druge varijable. Sapojavom verzije PHP4 , dobija se mogunost i dodeljivanja vrednosti varijablama sa referencom.Ovo znai, da varijabla kojoj smo dodelili vrednost druge varijable, uvek referencira na prvu, tj.uvek ima njenu vrednost. Ovo znai, da ako promenimo vrednost originalnoj varijabli, promenii vrednost druge varijable, ali i obrnuto. Za dodeljivanje vrednosti sa referencom, ispred naziva

    varijable postavlja karakter "ampersand" ( &). Evo i primera

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    25/76

    24

    // Nadgradnja varijable $druga

    echo $prva;

    // I varijable $prva je promenjena

    echo $druga;

    ?>

    U ovom primeru, varijabli "druga" dodeljujemo vrednost varijable "prva", i to sa referencom

    (&$prva). Zatim drugoj varijabli dodeljujemo novu vrednost, a samim tim promena se zbog

    reference vri i kod prve varijable. Na kraju e ovaj mali skript dva puta "odtampati" jedan ististring (vidi sliku).

    Pored ovih varijabli koje su korisniki definisane, postoje i tzv. "predefinisane" varijable od straservera ili PHP pretprocesora. Sam PHP pretprocesor obezbeuje veliki broj predefinisanih varijabkoje su dostupne svakom skriptu. Poto ovih varijabliima stvarno dosta, veliki broj nije dovoljno nidokumentovan, a i veliki broj zavisi od sistemskog okruenja tj. od: servera, verzije servera, ver

    pretprocesora i drugih faktora.

    Serverske predefinisane varijable kreira, kao to smo rekli server, pripodizanju sistema. Radinjihovog boljeg iskorienja prikazaemo vam one najvanije. Prva meu njima je svakako varkoja sadri podatak o serveru i njegovoj verziji- varijabla " SERVER_SOFTWARE ". A evo i kakomoemo da dobijemo podatak o serveru:

    Pokrenite "Apache" web server i pokrenite bilo koji tekst editor.

    U novi "*.php" fajl unesite sledei kod:

    Snimite fajl i pozovite ga preko servera u browser , radi pretprocesiranja.

    Kao rezultat dobiete podataka o serveru i n jegovoj verziji. Osim varijable SERVER_SOFTWARE" jo neke bitne varijable su:

    SERVER_NAME - koja daje naziv host servera pod kojim se dati skript izvrava. Ukoliko sskript izvrava pod virtuelnim hostom, ovo e biti vrednost definisana za virtuleni host

    11.1.Predefinisane varijable

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    26/76

    25

    (localhost ).

    SERVER_PROTOCOL - daje naziv i verziju web protokola preko koga se potrauje datastranica. Na primer "HTTP/1.1".

    SERVER_PORT - varijabla kojom dobijamo podatak o portu na serverskoj maini koji se

    koristi za komunikaciju. Podrazumevani port, pri instalaciji je 80.Pored serverskih varijabli postoje i predefinisane varijable koje kreira sam PHP parser. Jedna od

    ovih varijabli je i PHP_SELF - varijabla koja sadri relativnu putanju do tekueg dokumenta, uokviru koga se nalazi skript.

    Do sada smo nauili kako se varijable definiu i upoznali smo se sa vrstama varijabli. Sledi vrlo

    vana pria koja se tie varijabli, a to je oblast delovanja varijabli i njihov "vek trajanja". Oblastdelovanja varijable predstavlja deo programskog koda un utar koga data varijabla egzistira. VeinaPHP varijabli ima lokalni karakter, to znai da je data varijabla "vidljiva" samo unutar jedneprocedure (ili funkcije), a nije "vidljiva" i za druge procedure u PHP skriptu.

    U sledeem PHP primeru videemo dveoblasti delovanja varijabli:

    Prethodni skript nee prouzrokovati nikakav izlaz (znai, nee biti tampana jedinica) jer naredb"echo" referencira lokalnu varijablu "$a", a lokalnoj "verziji" ovoj varijabli nije dodeljena nikakva

    vrednost. Zbog ovoga, kada elimo da unutar funkcije upotrebljavamo globalne varijable moramo ih

    11.2.Oblast delovanja varijabli

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    27/76

    26

    tako i definisati (globalne unutar funkcije):

    Rezultat gornjeg skripta bie "3". Deklarisanjem varijabli "$a" i "$b" kao globalne unutar funkcmi smo izvrili referenciranje na promenljive koje se nalaze van funkcije. Pri tome, nema nikakvogranienja u broju globalnih varijabli kojima ete manipulisati unutar jedne funkcije. U sluajuu gornjem primeru, u funkciji "Sabiranje()", niste definisali varijable kao globalne - rezultat bi bio

    "2".Prethodni primer moemo napisati i na drugi nain.

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    28/76

    27

    ?>

    Ovde se pristup spoljnim varijablama vri preko ugraenog PHP definisanog niza "$GLOBALS

    Niz $GLOBALS je asocijativni niz naziva globalnih varijabli, gde indekse predstavljaju nazivi

    varijabli, te se preko njih dolazi do vrednosti samih globalnih varijabli.

    Jo jedna bitna mogunost kada govorimo o oblasti delovanja varijabli, je i mogunost njihovogdef inisanja kao statikih varijabli ("Static "). Statike varijable egzistiraju samo u lokalnoj funkciji, tim to ne gube svoju vrednost kada programom napustimo datu funkciju. Pogledajmo sledeiprimer:

    Ova funkcija je uglavnom beskorisna poto svaki put kada se pozove (u naem sluaju dva putavrednost varijable "$a" postavlja na nulu i tampa nulu. Instrukcijom "$a++" vrimo poveanjevrednosti vari jable za jedan, ali to ovde nema nikakvu funkciju, zbog toga to nakon ove instrukcfunkcija zavrava, a pri njenom ponovnom pozivu vrednost se vraa na nulu. Da bi funkcija"Brojac()" stvarno bila korisna, varijablu "$a" moramo definisati kao statiku:

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    29/76

    28

    echo '
    ' ;

    Brojac () ;

    ?>

    Sada e nakon svakog poziva funkcije, vrednost varijable "$a" uveati za jedan (kao na slici).Ovakvim definisanjem vrednost lokalne varijabl e uvamo u memoriji i nakon zavretka datefunkcije.

    Kao to znamo, iz drugih programskih jezika, konstante predstavljaju identifikatore dodeljenihvrednosti koji se ne menjaju tokom izvravanja programa. I sam naziv konstanti je logian, jer "promenljive" (varijable) programer moe menjati, dok se vrednost konstanti ne moe menjati. u sebi nosi nekoliko predefinisanih konstanti, a naravno obezbeuje i mehanizam za definisanjenovih konstanti tokom run-time -a. Inae vrlo su sline varijablama, s tim to se za razliku od njihdefiniu uz pomo funkcije "define()" i kasnije im ne moe biti dodeljena druga vrednost.U sledeim redovima predstaviemo vam neke od predefinisanih konstanti, koje moete koristitsvakom trenutku:

    PHP_VERSION - konstanta koja sadri vrednost verzije PHP parsera koja se koristi.

    PHP_OS - konstanta koja sadri string- naziv operativnog sistema na kome se radi PHP

    parser. Na primer: Linux TRUE - vrednost true - 1.

    FALSE - vrednost false - 0.

    Da bismo isprobali ove konstante, kreiraemo mali PHP skript koji e "odtampati" vrednost ovikonstanti:

    Rezultat e zavisiti odnae konfiguracije.

    12.Definisanje konstanti

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    30/76

    29

    Kao to smo rekli, pored predefinisanih moemo definisati i nae korisnike konstante. Zadefinisanje konstanti se koristi ugraena funkcija "define() ", ija je sintaksa sledea:

    int define (naziv_konstante, dodeljena_vrednost [, int

    mala_slova])

    Ovom sintaksom definiemo konstante, koje su vrlo sline varijablama, osim u sledeem:

    Ispred identifikatora konstanti ne ide znak "$".

    Konstantama moete pristupiti sa bilo kog mesta u skriptu, bez obira na oblast prostiranja

    Kada se jednom definiu, ne mogu biti redefinisane ili nedefinisane.Argumenti "naziv_konstante" i "dodeljena_vrednost" predstavljaju, sam naziv konstante i njenu

    vrednost, a argument "mala_slova" odreuje osetljivost na upotrebu malih-velikih slova. Po default -u konstanta je osetljiva na upotrebu malih-velikih slova (nije isto "KONSTANTA" i "Konstanta"), a

    ako argumentu dodelite vrednost "1" - onda nee biti. Za primer definisaemo dve konstante iizvriti ispis njihovih vrednosti:

    Skript e rezultovati ispisom vrednosti dodeljenoj konstanti "RECENICA".

    esto emo na stranicama automatizovanih PHP- om, imati formulare. Najee e se raditi oanketama, formularima za komentare, glasanje i slino. Na svu sreu, kada se jedan ovakav form prosledi PHP skriptu, sve varijable definisane na formi bie automatski dostupne PHP skriptu. Ovo

    znai da skript moe da prihvati i varijable koje nisu definisane u samom PHP skriptu. Na primimamo jednostavan formular, koji se metodom " POST " alje na obradu PHP skriptu pod nazivom"primer.php":

    12.1.Prihvat varijabli iz formulara 22.06.2001

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    31/76

    30

    IME:

    Kada ovaj formular popunimo i kliknemo na dugme "Posalji", metodom "POST" elementi formulara

    e biti prosleeni PHP stranici "primer.php" na dalju obradu. Stranica "primer.php" e automats primiti sadraj iz prosleenog polja "ime" u varijablu "$ime". Evo kako bi mogao da izgleda sk"primer.php":

    Znai, kada popunimo polje "IME" na stranici sa formularom, i kliknemo na dugme za slanje,sadraj ovog polja e primiti varijabla "$ime" u PHP skriptu na stranici "primer.php", te e se uz pomoinstrukcije "echo" prikazati vrednost date varijable.PHP skriptovi takoe mogu i da prihvataju spoljne nizove varijabli iz formulara. Na primer, moimati grupu povezanih varijabli na formularu u niz, ili moete iskoristiti ovu mogunost za prihvvrednosti iz viestrukogSELECT OPTION objekta:

    Ime:

    Email:

    Boja kose:

    Crna

    Smedja

    Plava

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    32/76

    31

    U sluaju da je ukljuena PHP mogunost "track_vars ", bilo pri samoj konfiguraci ji ili pomoudirektive: , sve varijable poslate POST i GET metodama bie lanovi iglobalnih nizova $HTTP_POST_VARS i $HTTP_GET_VARS (u zavisnosti od upotrebljene metode).

    Izrazi su jedan od najbitnijih pojmova svakog programskog jezika, pa i samog PHP-a, jer skoro sve

    to napiemo u programskom kodu predstavlja " izraz " (engl. expression ). Najjednostavniju formuizraza predstavljaju varijable i konstante (koje smo upoznali u prethodnim prilozima), odnosno

    dodelj ivanje vrednosti istima. Kada napiemo "$x=5", vi tada dodeljujete vrednost "5" varijabli"$x". Nakon ove dodele, oekivaemo da "$x" ima vrednost 5. Neto malo kompleksnije izraze predstavljajufunkcije . Na primer, razmotrimo sledeu funkciju:

    function dodeli () {

    return 5;

    }

    Ukoliko n am je blizak koncept funkcija, moemo pretpostaviti da ova funkcija slui dodeli vrednost(u ovom sluaju vrednosti 5). Probajmosada napisati:

    $x=dodeli()Ovim izrazom varijabli "$x" dodeljujemo vrednost 5, to vam je isto kao da ste napisali "$x=5".

    Funkcije predstavljaju izraze, koje u sebi sadre druge izraze, a slue za vraanje neke vrednostnaem sluaju ova funkcija vraa vrednost 5, a inae funkcije ne slue samo za jednostavno vraneke statike vrednosti, ve uglavnom za neka izraunavanja. Ove vrednosti pri tome ne moraju budu samo numerike (integer ), ve mogu da budu bilo koji tip podataka. PHP pri tome podrava,osim pomenutog integer -a, i skalarne vrednosti, stringove i realne brojeve. PHP, t akoe, podrava idva kompozitna tipa (tipovi sastavljeni od drugih tipova): nizove i objekte. Naravno, pri tome, svaki

    od nabrojanih tipova podataka moe biti dodeljen nekoj varijabli ili moe biti vraen od stranefunkcija.

    Jo jedan dobar primer izraza predstavljaju operacije uveanja (increment ) i smanjenja ( decrement ).Onima koji poznaju sintaksu jezika C sigurno su poznate ove dve operacije za promenu vrednosti,

    iji su operatori:++ i --. Ako bi u PHP- u napisali "$x++", ovo ne bi bio izraz poto prethodno

    13.Izrazi (expressions)

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    33/76

    32

    varijabli nismo dodelili nikakvu vrednost. Pored ovih operacija, u PHP- u su vrlo uobiajeni ikomparacioni izrazi. Rezultat ovih izraza mogu biti samo vrednosti 0 ili 1, odnosno FALSE ili

    TRUE . PHP podrava sledee komparacione operatore:> (vee),< (manje), == (jednako), != (nejednako), >= (vee ili jednako) i

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    34/76

    33

    17.Projekat

    Kako bi prikazali u konkretnom primeru sve tehnike PHP-a i MySQL- a koje su objanjene dosada

    napravi emo jedan sajt u PHP-u koji emo povezati sa MySQL bazom. U pitanju e biti aerodrom.Struktura baze podataka data je na slede oj slici:

    Slika 1: Veze baze podataka

    Baza podataka sadrzi devet tabela: Avion, Let, Odredisni aerodrom, Polazni aerodrom, Prevoznik,

    Putnik, Radnik, Rezervacije i Vreme polaska.

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    35/76

    34

    Slika2:Pocetna stranica

    Na samom po etku, administrator mora da se uloguje kako bi pristupio sajtu, koji e koristiti zadalju administraciju.Login Form

    Molimo Vas da unesete Vase korisnicko ime i lozinku.

    Korisnicko ime

    Lozinka


    Ovaj kod poziva php stranu login-exec.php koji zapravo vri login korisnika.

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    36/76

    35

    session_start();

    //Include database connection details

    require_once('config.php');

    //Array to store validation errors

    $errmsg_arr = array();

    //Validation error flag

    $errflag = false;

    //Connect to mysql server

    $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

    if(!$link) {

    die('Failed to connect to server: ' . mysql_error());

    }

    //Select database

    $db = mysql_select_db(DB_DATABASE);

    if(!$db) {

    die("Unable to select database");

    }

    //Function to sanitize values received from the form. Prevents SQL injection

    function clean($str) {

    $str = @trim($str);

    if(get_magic_quotes_gpc()) {

    $str = stripslashes($str);

    }

    return mysql_real_escape_string($str);

    }

    //Sanitize the POST values

    $login = clean($_POST['login']);

    $password = clean($_POST['password']);

    //Input Validations

    if($login == '') {

    $errmsg_arr[] = 'Login ID missing';

    $errflag = true;

    }

    if($password == '') {

    $errmsg_arr[] = 'Password missing';

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    37/76

    36

    $errflag = true;

    }

    //If there are input validations, redirect back to the login form

    if($errflag) {

    $_SESSION['ERRMSG_ARR'] = $errmsg_arr;

    session_write_close();

    header("location: login-form.php");

    exit();

    }

    //Create query

    $qry="SELECT * FROM members WHERE login='$login' AND

    passwd='".md5($_POST['password'])."'";

    $result=mysql_query($qry);

    //Check whether the query was successful or not

    if($result) {

    if(mysql_num_rows($result) == 1) {

    //Login Successful

    session_regenerate_id();

    $member = mysql_fetch_assoc($result);

    $_SESSION['SESS_MEMBER_ID'] = $member['member_id'];

    $_SESSION['SESS_FIRST_NAME'] = $member['firstname'];

    $_SESSION['SESS_LAST_NAME'] = $member['lastname'];

    session_write_close();

    header("location: member-index.php");

    exit();

    }else {

    //Login failed

    header("location: login-failed.php");

    exit();

    }

    }else {

    die("Query failed");

    }

    ?>

    Posle uspenog logovanja, korisniku se otvaraglavna stranica.

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    38/76

    37

    Slika3: Glavna stranica

    Odavde korisnik moe otvoriti bilo koju tabelu u bazi, takoe moe da se izloguje sa nalogai moenapraviti novi nalog preko Registracije. Kao primer manipulacije koristiemo bazu Avion.

    Slika4: Stranica za manipulaciju tabelom Avion

    Kao to se vidi na slici, administrator moeda vidi tabelu klikom na Prikaz tabele, pretrai klikomna Pretraga, obrie red odabirom opcije Brisanje, izmeni podatke klikom na Izmena, unesenoveredove klikom na Unos i moe se izlogovati sa naloga. Za prikaz tabele koristi se php fajl avion_citanje.php:

    Avion

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    39/76

    38

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    40/76

    39

    echo "";

    }

    ?>

    Nazad

    Kada se sve to uita dobijamo ovakav prikaz:

    Slika5: Prikaz tabele

    Za pretragu tabele koriste se 2 php fajla. Prvi je avion_pretraga.php:

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    41/76

    40

    function Form1_Validator(theForm)

    {

    var alertsay = ""; // define for long lines

    // alertsay is not necessary for your code,

    // but I need to break my lines in multiple lines

    // so the code won't extend off the edge of the page

    // check to see if the field is blank

    if (theForm.T1.value == "")

    {

    alert("Unesite tip aviona, registracioni broj, serijski broj, vlasnika ili broj sedista

    aviona kojeg trazite sa najmanje 2 karaktera");

    theForm.T1.focus();

    return (false);

    }

    // require at least 3 characters be entered

    if (theForm.T1.value.length < 2)

    {

    alert("Unesite najmanje 2 karaktera u polje za pretragu");

    theForm.T1.focus();

    return (false);

    }

    }

    //-->

    Pretraga

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    42/76

    41

    Pretraga

    Aviona


    Unesite tip aviona, registracioni broj, serijski broj,

    vlasnika ili broj sedista aviona kojeg trazite !!!


    Nazad

    Ovaj kod nam prikazuje formu za unos upita:

    Slika6: Prikaz forme za pretraivanje

    Drugi fajl (avion_pretraga2.php ), zapravo vri pretragu baze:

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    43/76

    42

    $T1 = $_POST['T1'];

    // 1. Kreiranje konekcije

    $connection = mysql_connect("160.99.37.123", "vts","vtsnis10");

    if (!$connection) {

    die("Database connection failed: ".mysql_error());

    }

    // 2. Selektovanje baze podataka

    $db_select = mysql_select_db("nemanja_ignjatovic",$connection);

    if (!$db_select) {

    die("Database selection failed: ".mysql_error());

    }

    ?>

    Pretraga

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    44/76

    43

    Avion.Vlasnik LIKE '%$T1%' OR Avion.Broj_sedista LIKE '%$T1%' " , $connection);

    if (!$result) {

    die("Selektovana baza nije uspela: ".mysql_error());

    }

    echo "

    Avion_ID

    Tip_Aviona

    Serijski_broj

    Registracioni_broj

    Vlasnik

    Broj_sedista

    ";

    // echo "
    ";

    echo "Rezultat pretrage: \"$T1\"";

    // 4. Koriscenje povratnih informacija

    while ($row = mysql_fetch_array($result)) {

    echo "" . $row['Avion_ID'] . "";

    echo "" . $row['Tip_Aviona'] . "";

    echo "" . $row['Serijski_broj'] . "";

    echo "" . $row['Registracioni_broj'] . "";

    echo "" . $row['Vlasnik'] . "";

    echo "" . $row['Broj_sedista'] . "";

    echo "";

    }

    ?>

    Nazad

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    45/76

    44

    I, kada unesemo upit na primer Nikola kod e nam izbaciti izvod iz tabele koji sadri ovuvrednost:

    Slika7: Pretraga po kriterijumu

    Za brisanje podataka iz tabele, opet su zaduena 2 fajla, prvi jeavion_brisanje.php:

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    46/76

    45

    theForm.T1.focus();

    return (false);

    }

    }

    function otvori(){

    window.open("avion_citanje.php", "Moja strana", "toolbar=no, location=no,

    directories=no, status=no, scrollbars=yes, width=550, height=600");

    }

    //-->

    Forma za brisanje

    Brisanje aviona

    Unesite indetifikacioni broj aviona:



    Nazad

    Brisanje aviona iz tabele pomou njihovog

    indetifikacionog broja

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    47/76

    46

    To je fajl koji ispisuje formu za brisanje podataka, koja izgleda ovako:

    Slika8: Forma za brisanje podataka

    Drugi kod (avion_brisanje2.php) brise podatak na osnovu unetog identifikacionog broja:

    Distribuirane baze podataka

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    48/76

    47

    Nazad

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    49/76

    48

    mysql_close($connection);

    ?>

    Ako je sve u redu, i identifikacioni broj bude sadran u tabeli, ceo red e biti obrisan:

    Slika9: Brisanje podatka

    Unos podataka koristi takoe dva fajla. Prvi jeavion_unos.php.

    Unos podataka

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    50/76

    49

    theForm.Avion_ID.focus();

    return (false);

    }

    // require at least 3 characters be entered

    if (theForm.Avion_ID.value.length < 1)

    {

    alert("Unesite najmanje 1 karakter u polje \"Ime\".");

    theForm.Avion_ID.focus();

    return (false);

    }

    alertsay = "Vasi podaci ce biti upisani u bazu. "

    // alertsay = alertsay + "Ovo je test stranaThis is just a test page. There is no

    submission page."

    alert(alertsay);

    return (true);

    // replace the above with return(true); if you have a valid form to submit to

    }

    //-->

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    51/76

    50

    return true;

    // decimal point jump

    else if (dec && (keychar == "."))

    {

    myfield.form.elements[dec].focus();

    return false;

    }

    else

    return false;

    }

    //-->

    Unos podataka za avion

    Avion ID

    Tip Aviona

    Serijski broj

    Registracioni broj

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    52/76

    51

    Vlasnik

    Broj sedista

    Nazad

    Unos aviona u tabelu pomou njihovog

    indetifikacionog broja

    Napomena: U polja (Avion ID, Serijski

    broj, Registracioni broj i Broj sedista) se mogu upisati samo brojevi.

    Ovaj kod sadri formu koja podatke prosleuje drugom fajluavion_unos2.php. Forma izgledaovako:

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    53/76

    52

    Slika10: Forma za unos podataka

    Ova forma takoe sadri java skript kako bi se onemoguilo pisanje slova u odreena polja. Drfajl vri unos podatka:

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    54/76

    53

    die("Konekcija nije uspela!!!: ".mysql_error());

    }

    // 2. Selektovanje baze podataka

    $db_select = mysql_select_db("nemanja_ignjatovic",$connection);

    if (!$db_select) {

    die("Niste konektovani na bazu!!!: ".mysql_error());

    }

    ?>

    Unos podataka

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    55/76

    54

    $result = mysql_query("INSERT INTO Avion (Avion_ID, Tip_Aviona, Serijski_broj,

    Registracioni_broj, Vlasnik, Broj_sedista)

    VALUES ('$Avion_ID', '$Tip_Aviona', '$Serijski_broj', '$Registracioni_broj',

    '$Vlasnik', '$Broj_sedista')", $connection);

    if (!$result) {

    die("Database selection failed3: ".mysql_error());

    }

    // Postavljanje upita za pregled unetog podatka

    $result = mysql_query("SELECT * from Avion WHERE Avion_ID = '$Avion_ID' ",

    $connection);

    if (!$result) {

    die("Database selection failed: ".mysql_error());

    }

    echo "Avion $Tip_Aviona je upisan u bazu.";

    ?>

    Nazad

    Kada se kod uspeno izvri dobijamo notifikaciju:

    Slika11: Upis podatka u bazu

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    56/76

    55

    I na kraju opcija za izmenu podataka koristi 3 php fajla. Prvi, avion_izmena.php , izitava tabelu samalom opcijom za izmenu odreenog reda:

    Unos podataka

    Izmena podataka za avion

    Izmena

    podataka

    Tip_Aviona

    Serijski_broj

    Registracioni_broj

    Vlasnik

    Broj_sedista

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    57/76

    56

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    58/76

    57

    Slika12: Tabela za izmenu podataka

    Drugi fajl (avion_izmena2.php ) izvlai podatke iz tabele i upisuje ih u formu kojom ih moemo

    promeniti:

    Unos podataka

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    59/76

    58

    if (window.event)

    key = window.event.keyCode;

    else if (e)

    key = e.which;

    else

    return true;

    keychar = String.fromCharCode(key);

    // control keys

    if ((key==null) || (key==0) || (key==8) ||

    (key==9) || (key==13) || (key==27) )

    return true;

    // numbers

    else if ((("0123456789").indexOf(keychar) > -1))

    return true;

    // decimal point jump

    else if (dec && (keychar == "."))

    {

    myfield.form.elements[dec].focus();

    return false;

    }

    else

    return false;

    }

    //-->

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    60/76

    59

    // Retrieve data from database

    $sql="SELECT * FROM $tbl_name WHERE Avion_ID='$id'";

    $result=mysql_query($sql);

    $rows=mysql_fetch_array($result);

    ?>

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    61/76

    60

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    62/76

    61

    Slika12: Forma za izmenu podataka

    Ova forma takoe sadri java skript koji ne dozvoljava unos slova u odreenapolja. Sada moemopromeniti podatak:

    Slika13: Menjanje podataka

    Trei fajl (avion_izmena3.php ) vri izmenu podataka u tabeli:

    Unos podataka

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    63/76

    62

    $Avion_ID = $_GET['id'];

    $Tip_Aviona = $_POST['Tip_Aviona'];

    $Serijski_broj = $_POST['Serijski_broj'];

    $Registracioni_broj = $_POST['Registracioni_broj'];

    $Vlasnik = $_POST['Vlasnik'];

    $Broj_sedista = $_POST['Broj_sedista'];

    // update data in mysql database

    $sql="UPDATE $tbl_name SET Tip_Aviona='$Tip_Aviona', Serijski_broj='$Serijski_broj',

    Registracioni_broj='$Registracioni_broj' , Vlasnik='$Vlasnik',

    Broj_sedista='$Broj_sedista' WHERE Avion_ID='$Avion_ID'";

    $result=mysql_query($sql) or die("zajebalo");

    // if successfully updated.

    if($result){

    echo "Uspesna izmena podataka";

    echo "
    ";

    echo "Vidi rezultate";

    }

    else {

    echo "ERROR";

    }

    ?>

    Nazad

    Kada kliknemo na Izmeni, dobiemo obavetenje:

    Slika14: Obavetenje

    Klikom na Vidi rezultate vraamo se na poetnu tabelu:

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    64/76

    63

    Slika15: Promenjeni podaci

    Ovde vidimo da su se podaci promenili.

    Korisnik se jednostavno moe izlogovati klikom na Logout polje koje poziva sledeiphp kod:

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    65/76

    64

    Logged Out

    Logout

    Uspesno ste se izlogovali.

    Kliknite ovde za Login

    Nakon klika se moemo uveriti da smo zaista izlogovani:

    Slika16: Promenjeni podaci

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    66/76

    65

    11. Pravljenje baze podataka

    Baza je napravljena u Wamp-u preko Command Prompt-a. Dakle, terminal je u pitanju bez

    grafickog okruzenja. U ovom radu sam se odluio da pravim bazu podataka nekog aerodroma. B

    podataka e sadrzati devet tabela:Avion, Let, Odredisni aerodrom, Polazni aerodrom, Prevoznik,Putnik, Radnik, Rezervacije i Vreme polaska.

    Poinjemo tako to, na samom poetku, proverimo koje sve baze postoje komandomSHOW DATABASES :

    Poto smo se uverili da ne postoji odgovarajua baza koju bismo mogli da koristimo, poinjempravljenjem nove baze komandom CREATE DATABASE nemanja_ignjatovic ;

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    67/76

    66

    Sada emo opet proveriti da li je baza uspeno napravljena:

    Poto smo se uverili da je baza uspeno kreirana, poinjemo sa radom tako to emo ukucatiUSE nemanja_ignjatovic;

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    68/76

    67

    Kreemo sa pravljenjem prve tabele Avion. Ukucaemo sledee:

    Komandom CREATE TABLE pravimo tabelu pod nazivom Avion, koji se pise pod navodnicima.

    Tabela sadri 6 kolona, od kojih je Avion_ID primarni klju,koji smo izabrali komandom PRIMARY KEY ( Avion_ID ). Za svaku kolonu biramo tip podatka komandom: CREATE TABLE

    `Avion` ( `Avion_ID` int(10) NOT NULL AUTO_INCREMENT)

    Sada moemo proveriti da li tabela postoji komandom SHOW TABLES, a komandom DESCRIBE AVION , moemo videti njenu strukturu:

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    69/76

    68

    Sada moemo popuniti tabelu podacima kucanjem sledeih komandi:

    INSERT INTO `Avion` VALUES (1,'Boeing',4321453,123,'Nikola Nikolic',54);

    INSERT INTO `Avion` VALUES (2,'Spaceshipone',432532,213,'Natalija Nikolic',15);

    INSERT INTO `Avion` VALUES (3,'C130 Hercules',324432,412,'Milos Dejanovic',13);

    INSERT INTO `Avion` VALUES (4,'Cessna 210 centurion',432532532,41235,'Jovana

    Ivanovic',5);

    INSERT INTO `Avion` VALUES (5,'Messerschmitt Me 163',43124124,41245,'Stefan Potic',6);

    INSERT INTO `Avion` VALUES (6,'Boeing 727',51242121,52121,'Jovana Krstic',231);

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    70/76

    69

    Komandom INSERT INTO `Avion` ubacujemo podatke u tabelu, a komandom VALUES kucamotano koje podatke hoemo (u zagradi i pod navodnicima). Stanje tabele moemo proveriti kucanjem komandeSELECT * FROM avion;

    Kad smo zavrili sa ovom tabelom isto moemo uiniti sa ostalim tabelama.

    Za kreiranje tabele Odredisni_aerodrom koristimo slede i kod:

    CREATE TABLE `Odredisni_aerordom` ( `Odredisni_Aerordom_ID` int(10) NOT NULL AUTO_INCREMENT,`Ime` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,`Grad` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,`Zemlja` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,

    PRIMARY KEY (`Odredisni_Aerordom_ID`) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;

    Za popunjavanje iste ukucaemo:

    INSERT INTO `Odredisni_aerordom` VALUES (1,'Aerodrom Bari','Bari','Italija');

    INSERT INTO `Odredisni_aerordom` VALUES (2,'Aerodrom Haneda','Tokio','Japan');

    INSERT INTO `Odredisni_aerordom` VALUES (3,'Aerodrom Vnukovo','Moskva','Rusija');

    INSERT INTO `Odredisni_aerordom` VALUES (4,'Aerodrom Sarl de Gol','Pariz','Francuska');

    INSERT INTO `Odredisni_aerordom` VALUES (5,'Aerodrom Getvik','London','Velika

    Britanija')

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    71/76

    70

    Za kreiranje sledee tabele Polazni aerodrom koristimo:

    CREATE TABLE `Polazini_Aerodrom` (

    `Polazni_Aerodrom_ID` int(10) NOT NULL AUTO_INCREMENT,

    `Ime` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,`Grad` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,

    `Zemlja` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,

    PRIMARY KEY (`Polazni_Aerodrom_ID`)

    ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

    COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;

    Dok za popunjavanje iste kucamo:

    INSERT INTO `Polazini_Aerodrom` VALUES (1,'Aerodrom Nikola Tesla','Beograd','Srbija');

    INSERT INTO `Polazini_Aerodrom` VALUES (2,'Aerodrom Konstantin Veliki','Nis','Srbija');

    INSERT INTO `Polazini_Aerodrom` VALUES (3,'Aerodrom Vrsac','Vrsac','Srbija');

    INSERT INTO `Polazini_Aerodrom` VALUES (4,'Aerodrom Ponikve','Uzice','Srbija');

    Na redu je tabela Radnik, za kreiranje emo ukucati:

    CREATE TABLE `Prevoznik` (

    `Prevoznik_ID` int(10) NOT NULL AUTO_INCREMENT,

    `Ime` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,

    `Grad` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,

    `Zemlja` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,

    `Radnik_ID` int(10) DEFAULT NULL,

    PRIMARY KEY (`Prevoznik_ID`)

    ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    72/76

    71

    Popunjavamo sledeim naredbama:

    INSERT INTO `Prevoznik` VALUES (2,'Swiss Airlines','Bern','Svajcarska',NULL);

    INSERT INTO `Prevoznik` VALUES (3,'British Airways','London','Velika Britanija',NULL);

    INSERT INTO `Prevoznik` VALUES (4,'United Airlines','Cikago','SAD',NULL);

    Na redu je tabela Putnik. Kreiranje tabele:

    CREATE TABLE `Putnik` (

    `Putnik_ID` int(10) NOT NULL AUTO_INCREMENT,

    `Ime` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,

    `Prezime` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,

    `Adresa` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,

    `Grad` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,

    PRIMARY KEY (`Putnik_ID`)

    ) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8

    COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;

    Popunjavanje:

    INSERT INTO `Putnik` VALUES (1,'Milos','Djordjevic','Nikole Tesle 12','Beograd');

    INSERT INTO `Putnik` VALUES (2,'Marko','Jovanovic','Vladisava Petkovica Disa 13','Nis');

    INSERT INTO `Putnik` VALUES (3,'Jovan','Stefanovic','Milorada Veljkovica Spaje

    1243','Nis');

    INSERT INTO `Putnik` VALUES (4,'Kristina','Krstic','Generala Milojka Lesjanina 51','Nis');

    INSERT INTO `Putnik` VALUES (5,'Stefana','Andjelkovic','Nemanjina 321','Beograd');

    INSERT INTO `Putnik` VALUES (12,'marko','krsta','nis','leskovac');

    Sledea je tabela Radnik. Slian postupak kreiranja:

    CREATE TABLE `Radnik` ( `Radnik_ID` int(10) NOT NULL AUTO_INCREMENT,`Ime` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,`Prezime` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,`Maticni_broj` varchar(13) COLLATE utf8_unicode_ci DEFAULT NULL,`Datum_zaposljavanja` date NOT NULL DEFAULT '0000-00-00',

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    73/76

    72

    `Adresa` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,`Jezici` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,

    PRIMARY KEY (`Radnik_ID`) ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;

    Popunjavanje: INSERT INTO `Radnik` VALUES (1,'Stefan','Markovic','4325432654344','2004-11-10','Vojvode

    Momcila 123','Srpski, Engleski');

    INSERT INTO `Radnik` VALUES (2,'Ivana','Stankovic','5436546456547','1999-11-12','Ive

    Andrica 54/1','Srpski, Francuski');

    INSERT INTO `Radnik` VALUES (3,'Stanko','Kostic','4324325325324','2012-04-13','Laze

    Lazarevica 31','Srpski, Engleski');

    INSERT INTO `Radnik` VALUES (4,'Marko','Stefanovic','3453253253253','2011-01-

    03','Narodnih heroja 341','Srpski, Spanski');

    Sledea tabela, Rezervacije, se malo razlikuje zato to u nju ubacujemo sekundarni klju-Putnik_ID koji smo ubacili iz tabele Putnik i na taj nain povezali ove dve tabele- naredbomUNIQUE KEY :

    CREATE TABLE `Rezervacije` (

    `Rezervacija_ID` int(10) NOT NULL AUTO_INCREMENT,

    `Sifra_Leta` int(10) DEFAULT NULL,

    `Datum_leta` date DEFAULT NULL,

    `Br_sedista` int(10) DEFAULT NULL,

    `Putnik_ID` int(10) DEFAULT NULL,

    PRIMARY KEY (`Rezervacija_ID`),

    UNIQUE KEY `Putnik_ID` (`Putnik_ID`),

    UNIQUE KEY `PutnikRezervacije` (`Putnik_ID`) ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

    COLLATE=utf8_unicode_ci ROW_FORMAT=FIXED;

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    74/76

    73

    Popunjavanje tabele se ne razlikuje od ostalih:

    INSERT INTO `Rezervacije` VALUES (1,432432432,'2012-12-30',3,NULL); INSERT INTO `Rezervacije` VALUES (2,643643432,'2012-11-01',52,NULL); INSERT INTO `Rezervacije` VALUES (3,54332432,'2012-03-15',61,NULL); INSERT INTO `Rezervacije` VALUES (4,56546546,'2012-04-03',43,NULL);

    Sledea tabela je tabela Vreme_polaska, kucamo za kreiranje sledee:

    CREATE TABLE `Vreme_polaska` (

    `Vreme_ID` int(10) NOT NULL AUTO_INCREMENT,

    `Dan` date DEFAULT '0000-00-00',

    `Sat` time DEFAULT NULL,

    PRIMARY KEY (`Vreme_ID`)

    ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

    COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;

    Dok za popunjavanje kucamo:

    INSERT INTO `Vreme_polaska` VALUES (1,'2012-01-09','12:00:00');

    INSERT INTO `Vreme_polaska` VALUES (2,'2012-04-01','13:00:00');

    INSERT INTO `Vreme_polaska` VALUES (3,'2012-12-13','14:30:00');

    INSERT INTO `Vreme_polaska` VALUES (4,'2012-11-11','15:00:00');

    I, na kraju nam je ostala jo samo jedna tabela- Let - koja se pre svega sastoji iz vie sekundarnihkljueva. Za kreiranje kucamo:

    CREATE TABLE `Let` (

    `Let_ID` int(10) NOT NULL AUTO_INCREMENT,

    `Sifra_Leta` int(10) DEFAULT NULL,

    `Polazni_Aerodrom_ID` int(10) DEFAULT NULL,

    `Odredisni_Aerodrom_ID` int(10) DEFAULT NULL,`Vreme_polaska_ID` int(10) DEFAULT NULL,

    `Avion_ID` int(10) DEFAULT NULL,

    `Prevoznik_ID` int(10) DEFAULT NULL,

    `Cena_karte` decimal(19,4) DEFAULT NULL,

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    75/76

    74

    `Rezervacija_ID` int(10) DEFAULT NULL,

    PRIMARY KEY (`Let_ID`),

    UNIQUE KEY `AvionLet` (`Avion_ID`),

    UNIQUE KEY `Odredisni_Aerodrom_ID` (`Odredisni_Aerodrom_ID`),

    UNIQUE KEY `Odredisni_aerordomLet` (`Odredisni_Aerodrom_ID`),UNIQUE KEY `Polazini_AerodromLet` (`Polazni_Aerodrom_ID`),

    UNIQUE KEY `Polazni_Aerodrom_ID` (`Polazni_Aerodrom_ID`)

    ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

    COLLATE=utf8_unicode_ci ROW_FORMAT=FIXED;

    Na ovaj nain, upotrebom sekundarnih kljueva povezali smo tabele Odredisni_AerodromiPolazini_Aerodrom sa tabelom Let.

    Za popunjavanje koristimo uobiajni postupak:

    INSERT INTO `Let` VALUES (1,1233124,NULL,NULL,NULL,NULL,NULL,2142,NULL);

    INSERT INTO `Let` VALUES (2,42131241,NULL,NULL,NULL,NULL,NULL,3789,NULL);

    INSERT INTO `Let` VALUES (3,4521451,NULL,NULL,NULL,NULL,NULL,3124,NULL);

    INSERT INTO `Let` VALUES (4,32141,NULL,NULL,NULL,NULL,NULL,4122,NULL);

    INSERT INTO `Let` VALUES (5,53253253,NULL,NULL,NULL,NULL,NULL,6432,NULL);

    I, na samom kraju moemo videti stanje naredbom show tables;

  • 7/31/2019 Projekat- Distribuirane Baze Podataka

    76/76

    13.Zaklju ak

    U ovom radu je bilo pri e o tome ta je MySQL, u koje svrhe i kako se koristi. Potom govorilo o tome kako se kreira baza podataka, kako se ubacuje sadraj u bazu, kako se menja sadraj baze i kako se brie sadraj iz baze. Jedan deo rada obrauje kako se itaju podaci iz baze i kakodobiti ono to je potrebno. Upravo dobijanje podataka iz baze je i najkomplikovaniji deo SQL-a.SQL je posebno pogodan za veb aplikacije zbog svoje brzine, jer se pri itanju podataka iz baze neprenosi cela baza, ve samo traeni deo. Tek u kombinaciji sa PHP-om, brzina MySQLa dolazi doizraaja. Izbor alata za rad sa MySQL-om je veoma veliki, od onih bez grafi kog okruenja do alata

    sa grafi kim okruenjem. Kroz ovaj rad tako e je bilo re i o programskom jeziku PHP, MySQL bazi podataka kao I

    njihovom me usobnom povezivanju. Objanjeni su osnovni principi PHP-a, kao i prenos podatakasa jedne na drugu stranicu. Bilo je re i o korienju MySQL-a, kreiranju baza podataka, tabela,unosa, izmene i brisanja podataka. Dat je spisak programa koji mogu pomo i u radu sa bazamapodataka a jedan od njih je i prakti no prikazan. Na kraju je objanjeno povezivanjeMySQL-a iPHP-a u jednu celinu.

    SQL je posebno pogodan za veb aplikacije zbog svoje brzine, jer se pri itanju podataka izbaze ne prenosi cela baza, ve samo traeni deo. Tek u kombinaciji sa PHP-om, njegova brzina

    dolazi do izraaja.

    12.Literatura:

    1. Praktikum za laboratorijske vebe, Dr Borivoje Miloevi, 2011, Ni.