traži:  
 php.com.hr > PHP i MySQL

PHP i MySQL
 


Evo nas napokon na zanimljivom dijelu ovog vodiča. Kroz slijedećih pra primjera ćemo napraviti HTML interface na bazu koju smo stvorili u dosadašnjim primjerima. Uz same primjere će biti diskretno opisana i jedna od metoda strukturiranja i planiranj aplikacija. Radit će se o vrlo jednostvnoj shemi jer se radi o vrlo jednostavnoj aplikaciji, no vi koji želite zagristi u kompleksnije projkete kasnije u vodiću će biti primjer kako isplanirati i strukturirati veće aplikacije. Za sada ćemo se držati osnova i jednostavnih primjera.
Spajanje na MySql server

Spajanje na MySql server je prva operacija koju moramo obaviti u skriptama koje ovise o podacima u bazi. Spajanje se mora uspješno obaviti tako da pri obavljanju svakog od koraka spajanja moramo provjeravati da li je operaciaj uspješno obavljena.

Kao što to obično biva sa serverima, oni se nalaze na mreži i njima se pristupa pomoću IP-a ili domene (hosta). Radi današnjih sigurnosnih trendova u većini situacija se MySql server i HTTP server nalaze na istom računalu, tj. na localhostu, te se MySql-u obično i pristupa na taj način. Uz podatak o hostu servera su nam još potrebni korisničko ime i lozinka da bi se uspješno spojili na server te komunicirali sa njim. Ukoliko koristite neki zakupljeni prostor te informacije će vam dostaviti hosting provider pri stvarajnu vašeg računa. Za naš lokalni rad ćemo koristiti korisnika root te lozinku koju smo za njega stvorili na početku ovog vodića.

Prije nego se bacimo na sam primjer stvorit ćemo direktorij na našem lokalnom HTTP serveru gdje ćemo spremati sve naše primjere te kroz njih napraviti cijelu aplikaciju koju smo počeli raditi stvaranjem prve baze i tablice u njoj.

Radi mogućih razlika u direktorijskim putevima između različitih srevrera (Apache, IIS idrugi) ja neću navoditi točne puteve do tih direktorija, već ću se truditi pisati sve adrese relativno na web root direktorij servera (u slučaju Apacheja npr „C:/apache/htdocs/“ ili IIS-a „C:/inetpub/wwwroot/“ ). Ukoliko će se negdje u primjerima stvoriti potreba na navođenjem potpune lokalne adrese (full local path) to će biti posebno nataknuto.

Također, svi primjeri će biti pisani i obrađeni na taj način da vam neće biti potreban nikakv code editor već ćete primjere moći pisati i u svom omiljenom editoru. Ovdje bi se želio zadržati na mitu notepada koa alata za kodiranje. Iako ćete na internetu na mnogo mjetsta naći „gurue“ koji govore da je notepad sve što vam treba ja se ne bi složio sa tom tvrdnjom. Pri kodiranju većih siteova nerijetko se nađete u situaciji da ispred sebe imate skriptu od 1000+ lijija koda, a PHP vam javlja MySql error u liniji 478. Pošto notepad nema ispi broja linije očito ej da ćete dosta vremena izgubiti tražeći pravu liniju. No uz tu osobinu dobrog code editora notepadu fale mnoge druge stvari koje ima svaki osrednji i bolji IDE (Integrated Developmnet Enviroment) poput rada na projektnoj bazi umjesto na bazi pojedinog dokumenta / skripte itd. Ovo govorima samo zato da se ne bi osječali manje vrijednima ili, ne daj bože, glupima kada čitate na usenetu da neko svoje PHP skripte piše u notepadu. Tu se samo radi o čovjeku koji voli sam sebi otežavati život a nije garancija njegovog znanja. To rečeno, idemo dalje.

U svojem web root folderu web servera stvorite direktorij imena „php_mysql“. U njega ćemo spremati sve dokumente iz slijedećih par primjera.

Primjer 1 : Spajanje na MySql server

U ovom primjeru ćemo napraviti file koji ćemo nazvati „dbspoj.php“ te ga pohraniti u direktori koji smo upravo stvorili. U njemu će se nalaziti kod koji će se spojiti na MySql server. Ovaj file ćemo koristiti u kasnijim primjerima kada ćemo raditi konkretne operacije nad bazom.

Otvorite svoj omiljeni code editor i utipkajte slijedeći kod.

<?

if (!$db=@mysql_connect("localhost", "root", "lozinka"))

{

die ("<b>Spajanje na mysql server je bilo neuspješno</b>");

}

if (!mysql_select_db("site_novosti", $db))

{

die ("<b>Greška pri odabiru baze</b>");

}

?>

Ukoliko ste MySql funckijama dali točne podatke rezultat skripte bi trebala biti prazna stranica.

Objašnjenje :

Idemo pogledati sve ključne dijelove ove skripte te što i kako svaki od njih radi.

Samo spajanje na server se obavlja pomoću mysql_connect funckije. Idemo se na trenutak na njoj zadržati. Funkciji se proslijeđuju tri argumenta. Prvi je host na kojem se nalazi server. Kao što sam već prije rekao, ovdje može doći IP ili hostname servera, no skoro uvijek se radi o alliasu localhost na IP 127.0.0.1 (barem kod većine komercijalnih hosting providera). Drugi argument je korisničko ime sa kojm se pokušavamo spojiti, a treći lozinka za tog korisnika.

Ukoliko su svi dani podaci točni, te je mysql pristupačan i operacionalan funckija će vratiti „spoj“ na bazu. Ovdje sam pojednostavio što funckija točno vraća, no ukratko se radi o vrijednsoti pomoću koje PHP kasnije može obavljatu komunikaciju sa serverom te ju je potrebno pohraniti u varijablu. Ukoliko je neka od informacija netočna ili se nešto desilo sa samim MySql serverom funckija vraća false.

Kao što vidite, kraj samog poziva mysql_connect funkcije se nalazi znak @. On služi za ignoriranje grešaka tj. onemogučuje PHP da ispisuje greške koje se dogode u naredbi iza njegovog pojavljivanja. U našem slučaju bi PHP ispisao grešku u kojoj je sadržano između ostaloga i korisničko ime sa kojim se pokušavamo spojiti na server, što je potencijalni sigurnosni rizik pa ne želimo cijelom svijetu obznaniti tu informaciju. Ukoliko vas zanima što se događa ukoliko njega ne bi tamo bilo izmejnite lozinku za korisnika u nešto što nije točno i maknite @. Normalno, pri izradi i testiranju skripte je nerijetko potrebno dobiti što detaljniji opis greške, pa je za to vrijeme @ nepotreban, no dobra praksa se zaštiti prije nego skriptu date cijelom svijetu na korištenje.

Još jedna vrlo bita stvar je provjeravati uspjeh operacije spajanja. Naime, radi se o tome da će sav ostali kod koji barata sa podaciam u bazi očekivati da smo se uspješno spojili na serevr. Ukoliko se ne spojimo taj kod će se ipak obavljati, normalno neuspješno, te će se vaša lijepa, brižno dizaunirana stranica pretvoriti u rugobu unakaženu PHP errorima. Da ne kažem da se opet izlažemo sigurnosnim rizicima jer će se pri ispisu tih grešaka opet prikazivati informacije koje su potencijalni sigurnosni rizici. Stoga je najbolje odmah pri spajanju provjeriti da li je operacija uspješno obavljena, te ukoliko nije prekinuti izvršavanje skripte pomoću die funckije sa ispisom greške koja nam govori u kojem koraku je stvar zapela.

Inače, pri izradi skripti, kod savijesnih programera, dobar dio kodova uvijek otpada na prihavćanje i obradu potencijalnih grešaka, od kojih se neke rijetko ili nikada neće dogoditi, tj. mora doći do ekstremnih uvijeta da se jave. No takvi kodovi imaju dozu kvalitete i sigurnosti koji se nepostojani kod brzopletih i ljenih programera te izazivaju frustraciju kod korisnika. Kao što vidite, u našem primjeru bi bilo dovoljno 2 reda da se obave sve operacije, no mi smo ih izveli u 4 (ako se izostavi formatiranje koda), što je duplo više.

Slijedeći korak pri spajanju na MySql server je odabir baze na njemu. Ako se sječate nešeg rada sa shell klijentom tamo smo također morali prvo odabrati bazu u kojoj smo stvorili tablicu. Tako i u našim skriptama moramo odabrati bazu sa čijim ćemo tablicama baratati kroz skriptu pomoću mysql_select_db funckije. Mysql_select_db funckija kao prvi argument dobija ime baze koju želimo koristiti, a kao drugi vezu tj spoj na MySql server gdje se ta baza nalazi. Pošto smo spoj (rezultat mysql_connect funckije) pohranili u varijablu $db nju proslijeđujemo na drugo mijesto.

Želio bih se na trenutak zadržati na tom drugom argumentu. On nije obavezni argument, tj. mogli smo ga izostaviti te mysql_select_db funckiju pozvati u mysql_select_db("site_novosti") obliku i sve bi i dalje radilo. Radi se o tome da PHP automatski pamti posljednju otvorenu vezu na MySql server te ju uvijek po defaultu koristi u svim mysql funckijama gdje je taj argument izostavljen (recimo u funkciji koja izvršava neki SQL upit na serveru). No, ukoliko se u našoj skripti spajamo na dva različita servera, ili ostvaramo dvije zasebne veze na isti server i ne koristimo taj argument u MySql funckijama PHP će uvijek koristiti onu vezu koja je zadnja otvorena. Takoda u toj situaciji moramo proslijeđivati onu varijablu koja u sebi sadrži onaj spoj na kojem želimo ivršiti neku operaciju. Praktični primejr ovakve situacije bi bio kopirannje baze na loklanom serevru u bazu na nekom remote serveru (iako za ovu operaciju postoje bolji, gotovi alati koje ćemo kasnije upoznati).

Uspjeh operacije odabira baze također moramo provjeriti jer ukoliko je tu nastala greška skripta će se nastaviti obavljati, ali kodovi koji komuniciraju sa MySql serverom će javljati greške, tako da je potrebno prekinuti rad skripte ako je nastala greška.

Sada kada smo se uspješno spojili na MySql server idemo vidjeti koja sve čuda možemo raditi sa MySql-om. Točni slijed slijedećih koraka pri izradi naše aplikacije nije unaprijed određen, no da bi slijedili neku logiku i sebi malo olakšlai sma proces razvijanja aplikacije krenut ćemo sa formom za upis podataka u bazu po logici da prvo moramo imati podatke u bazi da bi ih mogli pregledavati i uređivati.  



PHP i MySQL
 © 2004 - 2008 php.com.hr