Home > PHP-tecaj > PHP tecaj: cetvrta lekcija

PHP tecaj: cetvrta lekcija

Prosinac 26th, 2008

Zahvat na baze podataka

Jedno od glavnih podrucja u kojima se primjenjuje PHP je “on-line” koristenje banki podataka (“database” engl., “Datenbanken” njem.).

Sta je banka podataka (BP))?

Jednostavno receno: BP sadrzava odgovarajuce “elemente” (“redove” sa istovjetnim vrstama podataka npr. “prezime, ime, ulica, broj kuce, postanski broj, mjesto”) .

I sad u svakom redu stoje razliciti upisi (“promjenjljive“) koje odgovaraju tipu podataka…. tako bi ime bilo jedna “rijec“, dok bi broj kuce ili postanski broj imali tip “cijeli broj“.

Redovi – “upisi” mogu biti pozvani, citani, mijenjani i sl., moguce je dodavanje novih upisa, brisanje starih itd.

Svi ovi postupci nazivaju se jednim imenom ” upiti
“.

Najcesce koriscena vrsta BP su SQL (skr.od
Structured Query Language
) – BP koje mogu da se
obradjuju uz pomoc jezika SQL.

PHP se koristi (povezuje) sa vise vrsta BP, posebno
omiljena je svakako MySQL.

Prednosti MySQL banke podataka su da je relativno brza
i besplatna .

Da bi izveli neki SQL-upit sa PHP-om, moramo prije
svega otvoriti BP – drugim rijecima povezati se s njom.
(Sto bi bilo identicno sa citanjem iz fajla i upisivanje
u fajl
).

Nakon toga bila bi poslata SQL- naredba na BP, preuzet
odgovor od BP i na kraju bi morali jos zatvoriti BP.

Prije svega, podsjeticemo se na osnovna SQL pravila.

Naravno, rad sa SQL-om i BP jedino je moguc ako znamo
sta i kako treba da ukucamo u nekoj SQL naredbi.
SQL-banke podataka se sastoje od jedne
ili vise tkz. tabela.

Jedan elemenat u BP odgovara tacno jednom
redu u tabeli.

Primjer: Ocjenivanje kafana u Mahali.
Donjoj. :)

Tabela kafane :

ID
Ime
Vrsta
Ocjena
Komentar
1
Slozna braca
restoran
10
Muzika uzivo
2
Zelena dolina
kafana
8
Domaci specijaliteti
3
……..
4

Sad bi mogli napraviti vise tabela, tabele
povezati itd.

Radi jednostavnosti ogranicicemo se samo
na ovu jednu tabelu.

U sustini koristimo se najcesce sa cetiri
vrste upita:

  • procitati: SELECT
  • ubaciti : INSERT
  • prepisati (promijeniti postojeci tekst) : UPDATE
  • izbrisati: DELETE

Sad idemo sa zeljama i pozdravima slusalaca
:)

Ako hocemo da pogledamo sva imena ( Ime)
kafana iz BP to postizemo sa SQL-naredbom:

SELECT Ime FROM
kafane;

Odgovor bi bio :

  • Slozna braca
  • Zelena dolina

Ako hocemo da vidimo ime ( Ime ) i vrstu
( Vrsta ) kafana onda bi SQL-naredba bila:

SELECT Ime,Vrsta
FROM kafane;

Odgovor bi bio :

  • Slozna braca restoran
  • Zelena dolina kafana
  • … …

Cijeli “element” tj. cijeli red dobili
bi sa: SELECT * FROM kafane;

Odgovor bi bio

  1. Slozna braca restoran 10 Muzika uzivo
  2. Zelena dolina kafana 8 Domaci specijaliteti
  3. … … … …

Podatke koje hocemo da vidimo mozemo specificirati po
volji.

Npr. sa:

SELECT * FROM kafane
WHERE Ocjena=10;

dobijamo samo kafane koje u koloni Ocjena
u BP imaju upisanu vrijednost 10.

Odgovor bi bio

  • 1 Slozna braca restoran 10 Muzika uzivo

Sa:

SELECT * FROM kafane
WHERE Ocjena=10 ORDER BY Ime;

Odgovor bi bio:

  • Slozna braca 1 restoran 10 Muzika uzivo

dobijamo kafane sa ocjenom 10, poredane po imenu..

Nove “redove” mozemo dodti sa:

INSERT kafane (Ime,Vrsta,Ocjena,Komentar)
VALUES (‘Jablan’,'kafana’,’9′,’Jagnjece pecenje’);

Znaci ovim bi dodali kafanu Jablan u konkurenciju
sa ocjenom 9 koja ima dobro jagnjece pecenje (ono da
bas valja dobili bi ocjenu 10 :) . (U orginalnoj dokumentaciji
nije navedeno, ja pretpostavljam da i ID moramo rucno
urediti da se automatski penje za jedan broj, iskoristiti
postojecu ili po zelji napisati funkciju koja to radi).

Postojece “elemente
mozemo promijeniti (“update”-enovati
:) ) sa:

UPDATE kafane SET
Ocjena=’6′,Komentar=’Domaci specijaiteti su bajati’
WHERE ID=2;

Ovoliko za pocetak i u osnovnim crtama
o SQL-u.

SQL je vrlo mocan jezik, prava “masinerija
za ove upite, pogotovo kad se radi o kombinovanju upita
za i iz vise tabela istovremeno ( join, outer join,..
).

O ovome egzistira jedna posebno, gotovo
matematicka teorija.

Gore navedene SQL naredbe bi sada trebali
iskoristiti u vezi sa PHP-om.

Za primjer bi htjeli pokazati sve elemente
iz tabele kafane u fajlu pod imenom www2 .

To bi onda bili slijedeci koraci:

Prije svega moramo uspostaviti vezu izmedju
PHP-a i BP-servera (to bi bio server na kojem lezi BP)
:

$veza = @mysql_connect(“localhost”,”korisnik”,”");

localhost znaci da se povezujemo
sa istim kompjuterom na kojem e nalazi i web-server.
U nasem slucaju to funkcionise jer BP i web-server leze
na istom racunaru.

Kao sto vec mozete pretpostaviti, isto
tako bi bilo moguce povezivanje sa BP koja lezi na bilo
kojem racunaru u internetu – naravno uz uslov da raspolazemo
odgovarajucim pravom zahvata na taj racunar.

korisnik je vazece korisnicko ime
za ovu BP (odredjeno od strane administratora BP).

“” (navodnici na kraju
naredbe u zagradi) znace da ovaj korisnik ne treba lozinku
(password).

Da li je veza uspostavljena mozemo provjeriti
sa:

if (!$veza)

{

echo “Nije moguce uspostavljanje veze sa BP!\n”;

exit;

}

Ako vec imamo uspostavljenu vezu, mozemo
poceti sa upitima:

Radi bolje preglednosti, upisacemo upit
u jednu promjenjljivu (varijablu):

$pitanje = “SELECT
Ime,Vrsta FROM kafane”;

Ovaj upit se onda salje na server BP.
Rezultat koji on vrati memorisacemo u promijenjljivoj
$rezultat:

$rezultat = mysql_db_query(“www2″,$pitanje,$veza);

Prva promijenjljiva sadrzava ime BP koju
pitamo, druga sadrzava SQL naredbu i treca promjenjljiva
sadrzava vezu koju smo uspostavili sa mysql_connect
.

Sad slijedi nesto tezi dio posla:

Treba da procitamo “redove”
koji su upisani u promjenjljivoj $rezultat.

Da smo koristili neku drugu SQL naredbu
( INSERT, UPDATE ili DELETE ) bilo bi mnogo jednostavnije.

Mogli bi jednostavno provjeriti je li
sta uradjeno ili nije, je li naredba izvrsena ili nije…

Znaci odgovor bi bio ISTINA (TRUE)
ili LAZ (FALSE).

Ali posto nasa SQL naredba ima u sebi
SELECT , mi bi htjeli i da vidimo ono sto smo
selektirali” tj.izabrali.

Iz elemenata (“redova“)
sadrzanih u tabeli kafane mi smo trazili da vidimo kolone
Ime i Vrsta.

Sada cemo ih citati i to red po red:

list($Ime,$Vrsta)
= mysql_fetch_row($rezultat);

Promjenjljiva $rezultat poslije
upita sadrzava dvije kolone (u jednoj je ime u drugoj
vrsta).

mysql_fetch_row($rezultat) nam
vraca tacno jedan red.

Na pocetku stoji jedna vrsta pokazivaca
(pointer engl. Zeiger njem.) na prvi red.

Izvodjenjem naredbe mysql_fetch_row($rezultat),
ovaj pokazivac ce da pokazuje na iduci red itd.

Ako bi htjeli da pokazemo sve redove koji
su selektirani u tabeli kafane i memorisani u promjenjljivu
$rezultat, onda bi to izveli uz pomoc jedne while
- petlje:

while (list($Ime,$Vrsta)
= mysql_fetch_row($rezultat))

{

echo “$Ime je dobar(dobra) $vrsta <BR>\n”;

}

Znaci, ono sto zelimo pokazati prebacujemo
red po red u HTML tekst.

Na kraju je jos preporucljivo zatvoriti
vezu sa BP:

mysql_close($veza);

Ovo bi bile najjednostavnije MySQL naredbe
u PHP-u , ali i one su dovoljne za “pametna
rjesenja i uz “pametnu” upotrebu .

Za daljnje naredbe morate sami malo pomuciti
(savjet: pogledajte Mirzin SQL tecaj)

Popularity: 7% [?]

PHP-tecaj , ,

  1. Ishmael
    Siječanj 16th, 2009 at 14:53 | #1

    Pomoci ove lekcije sam sastavio ovo. Ali ocigledno nesto nisam vidjeo neki dio. Pa ako mi ko moze pomoci i pokazati gdje sam pogrijesio. Hvala

    Ovako sam ja to zamislio:

    <?php

    $veza = mysql_connect(“localhost”,”usernm”,”passnm”) or die (mysql_error ());
    mysql_select_db(“skladiste”) or die (mysql_error ());

    $pitanje = “SELECT ime,prezime,maticni FROM radnici”;
    $rezultat = mysql_db_query($pitanje,$veza);

    list($ime,$prezime,$maticni) = mysql_fetch_row($rezultat);

    while (list($ime,$prezime,$maticni) = mysql_fetch_row($rezultat))

    {

    echo “$ime $prezime $maticni \n”;

    }

    mysql_close($veza);

    ?>

  2. Siječanj 16th, 2009 at 23:40 | #2

    @Ishmael
    pozdrav ishmael,

    koju gresku dobijas? sta konkretno ne radi?

  3. Ishmael
    Siječanj 19th, 2009 at 07:33 | #3

    @admin
    Javjalo mi stalno gresku da ove dvije linije sa mysql_fetch_row($rezultat) da nisu uredu al sam malo svrljao po php.net(zakon stranica – majka svih php stranica :D ) i napravio sam ovako i radi savrseno:

    <?php

    $result = mysql_query(“SELECT id, ime, prezime, maticni FROM radnici”, $conn);
    while (list($id, $ime, $prezime, $maticni) = mysql_fetch_row($result)) {
    echo ” \n” .
    ” $id\n” .
    ” $ime\n” .
    ” $prezime\n” .
    ” $maticni\n” .
    ” \n”;
    }

    ?>

    Al ipak hvala ovaj tutorial mi je dosta pomogao.
    Ishmael

  1. No trackbacks yet.