You are on page 1of 47

LAP TRNH WEB NG VI

PHP / MySQL
GUESTBOOK CATALOG FORUM SHOPPING CART

PHAN 1
Tong Phc Khai (tong hp& bien dch)

Gii thieu
Chung ta hay thc hien mot chuyen i than thoai, trong chuyen i nay chung ta se kham pha ngoai hnh cung nh noi tai cua MySQL va PHP mot cach that t m. ay la mot cuoc hanh trnh ay nhng thu v va bat ng. Okie, co le toi co ve hi lac quan phai khong cac ban. Neu nh ban ong quan iem vi toi tren mot phng dien nao o, trong cuoc hanh trnh nay ban se co ngay s giup moi khi gap phai nhng s nham chan. Hay oi mat s that ngay nhe: Tro chi lap trnh ng dung khong phai luc nao cung de nuot au. Trong bat ky cuoc tham hiem nao th chac chan cac ban se phai co nhng giay phut nan long, o la luc gap phai s co loi cu phap hoac oi khi la nhng oan ma khong cho ket qua nh mong muon. Nhng ngoai nhng viec o ra, toi ngh la co mot ly do that chnh ang en cac ban en vi chung toi ay. Lap trnh Web ang la mot cuoc chi ay ha hen hien nay cung nh tng lai. Bat ke ban co kien thc c s lap trnh cho bat ky loai ngon ng nao nh Visual Basic, Cobol, hay ban ch biet ve HTML va JavaScript, th hom nay ban van co c hoi e nam bat cac kinh nghiem mi me ve lap trnh ng dung Web. Toi ngh la khong co s ket hp nao tot hn gia PHP va MySQL. So lng ngi s dung ngon ng nay cang gia tang, PHP va MySQL a tr thanh rat thong dung, nhng oi hoi lng ngi biet cac cong cu lap trnh nay cung tang theo. Mot chut xu na toi se noi ro cho ban biet tai sao lai phai s dung PHP va MySQL. Nhng trc het toi muon ban hay khao sat qua kien truc s bo cua ng dung Web. V ch khi ban nam bat c ieu nay th toi mi co the tiep tuc trnh bay

Lap trinh Web dong voi PHP / MySQL

Page 1

chi tiet rang tai sao PHP va MySQL la trung tam cua moi trng phat trien ng dung Web.
Trc khi tiep tuc, toi ngh rang ban a oc nhng g toi a gii thieu va hieu no. Chung ta tiep tuc i thoi!

Kien truc c ban

Kien truc can ban nhat e trang Dynamic Web hoat ong c la no phai lam viec tren mo hnh client/server. Nom na la moi th client hay server eu am ng mot chc nang rieng e hoan thanh cong viec chung o la cho ra mot trang Web ong. Cac ban co le a quen thuoc vi chng trnh WinWord e soan van ban, no co the hoat ong oc lap tren bat ky may tnh nao chang can quan tam ti cai g la client hay cai g la server. ng dung Web th khac han, phai co mot mo hnh server co the la mot may tnh lam server thoi, nham tap trung hoa viec x ly d lieu. Con cac client, con c hieu nom na la may tnh cua ngi s dung phai c noi mang vi server, gia s cac may nay truy cap vao mot Website chang han, th co ngha ho a truy cap vao server, sau o lay d lieu t server ve the hien len may mnh. Cung mot luc co the co hang tram ngi (client) truy cap vao cung mot Website c x ly tap trung tren server, tng t nh mot am tre xum nhau gianh phan cua mnh t mot cai banh. Cac ng dung ma ban phat trien tren nen MySQL va PHP s dung tnh nang single client o la trnh duyet Web. Tuy nhien, khong phai ay ch la ngon ng duy nhat e phat trien ng dung Web. oi vi nhng ng dung phc tap oi hoi multi-client hoac can cac tnh nang bao tr (chung ta se ban tnh nang nay sau), th ng dung Java applet se hu dung cho viec nay. Ch tr trng hp ban can s dung ng dung thi gian thc nh ng dung chat chang han, th ban Java Applet mi can thiet. ay chung ta khong ban ti lap ng dung cho chuyen tan gau ma ch tap trung vao ng dung duyet Web nen khong ung cham g ti Java Applet ca. Nh ban a biet ngon ng khi thuy cho viec duyet Web la HTML. HTML cung cap hang ta nhng the lenh (Tag) cho phep the hien trang Web theo nhieu kieu cach khac nhau. Neu ban cha co kien thc c s ve HTML th co the chay ra ngoai mua ngay mot quyen sach hoac download tren internet xuong cac bai hoc hng dan. Ban khong nen bo ra qua nhieu thi gian e hoc ve HTML. Ngoai HTML ra cac trnh duyet Web con cho phep cac add-in ho tr nhieu th khac nh RealPlayer, Flash, Shockwave, hoac ho tr ve Javascript hoac XML.

Client

Lap trinh Web dong voi PHP / MySQL

Page 2

Nhng ay chung toi ch tap trung tren nhng g can thiet cho s hoi nhap cua ban o la HTML.

Server
Hau het cac ng dng Web eu hoat ong tap trung tren Server. Mot ng dung ac trng goi la Web Server se am trach viec giao tiep vi cac trnh duyet. Mot C s d lieu (CSDL) tren Server se lu tr tat ca nhng thong tin ap ng yeu cau cho cong viec cua ng dung Web. Ke tiep, ban can phai co mot ngon ng lam vai tro "chu be lien lac" gia Web Server va CSDL tren server. Ngon ng nay cung thc hien cac cong viec x ly thong tin en va i t Web Server. Va d nhien la cac th nay se chang hoat ong c neu nh khong chay tren mot He ieu Hanh (HH). Cac th nh Web Server, Ngon ng lap trnh, CSDL phai hoat ong tot tren mot HH nao o.

He ieu hanh
Co rat nhieu chung loai HH. Windows 98/XP va Linux co le rat pho bien vi tat ca moi ngi. Co trng hp ban lam viec tren HH ma t ai biet ti va ban ch co an tng thch s dung no ma thoi. Hay gac qua nhng y tng o neu nh ban that s muon i tren con ng thiet ke web. Hay trang b cho mnh kien thc ve HH WinNT /2000 /2003 va Unix i. Viec lam nay se rat co ch hn la chuyen bao moi ngi nen i hoc mot khoa ve AS/400.

Lap trinh Web dong voi PHP / MySQL

Page 3

Ban se s dung loai nao trong cac th noi tren ay? Okie, ay la mot cau hoi hn rac roi ay. Cau tra li ay la tuy thuoc ban la "tn o" cua HH nao. Neu nh ban van cha ro rang ve ieu nay, hay e toi noi cho ban nghe ve "chien tranh giao phai HH". Neu ban cha hieu c toi ang noi g, th ay la cac kien thc c ban: PHP va MySQL thuoc nhom phan mem ng dung co ten goi la open source (nguon m). Viec nay co ngha la ngi dung se xem c ma nguon cua cac ng dung s dung PHP/MySQL. Chung tan dung c mo hnh phat trien da vao nguon m, cho phep ngi nao cam thay thch no eu co the gop phan vao viec phat trien cac d an. Trong trng hp cua PHP, cac lap trnh vien tren toan the gii tham gia vao viec phat trien ngon ng va khong trong ch mot khoan li nhuan nao. Phan ln nhng ngi tham gia cong viec eu co niem am me viec tao ra mot san pham phan mem tot, ho se cam thay thch thu khi thay ngi khac s dung cac cong cu cua ho nh toi va ban chang han. Phng phap nguon m nay ban au ch con la nhng vong lan quan ma thoi, nhng ve sau a tr thanh ay tiem lc khi co s ra i va tr nen pho bien cua bo nguon m Linux. Hau nh cac nguon m eu mien ph, ban co the download, cai at va s dung chung ma khong can phai i s cho phep hay phai tra tien cho bat ky ai. Phng thc nay th Microsoft, Oracle hay mot so cac cong ty lap trnh nao khac khong the ap ng c. Neu ban khong phai la tn o cua phai nguon m, th hay chon cong cu c coi la beo b: NT/2000/2003. Neu cong ty cua ban a s dung san pham cua Microsoft nhieu nam roi th moi viec se tr nen de dang neu ban muon duy tr lam viec vi moi trng nay. Neu ban la thanh vien cua nhom lap trnh Visual Basic, co le ban se gan bo vi NT/2000/2003. Ngay ca trong trng hp nay, khong co tr lc nao ngan can ban trong cong viec phat trien vi cong cu PHP va MySQL. Ban cung co the th nghiem PHP/MySQL tren nen HH Windows 95, 98, XP.

Web Server
Chc nang cua Web Server co ve khong phc tap may. No ch tai cho, chay tren nen cua HH, lang nghe cac yeu cau ai o tren Web gi en, sau o tra li nhng yeu cau nay, va cap phat nhng trang Web thch ng. Thc te th no khong qua n gian nh vay, bi v nhiem vu cua Web Server la phai cung cap tnh on nh cho moi trng Web cho nen oi hoi nay phai c ap ng mot cach rat nghiem tuc.

Lap trinh Web dong voi PHP / MySQL

Page 4

Co nhieu loai Web Server khac nhau, nhng chu yeu tren th trng ch thng s dung Apache va IIS (Internet Information Server cua Microsoft). INTERNET INFORMATION SERVER (IIS) c gan lien vi moi trng Windows va no la thanh phan khong the thieu cua Active Server Pages (ASP). Neu ban chon con ng cua Microsoft th co le ban a hieu ro ve IIS. Co mot s tch hp nhat nh gia mot ngon ng lap trnh va mot Web Server. Cung vay, PHP4 c tch hp rat toi oi vi IIS. Trc ay, co mot so van e can phai ban ve tnh on nh cua PHP/IIS vi viec truyen tai ln, nhng PHP va IIS cung a c cai thien lien tuc nen viec nay khong con ang phai ban tam. APACHE la mot kieu mau Web Server rat pho bien. Giong nh Linux, PHP, MySQL no la mot d an nguon m. Khong co g ngac nhien khi ngi ta thay Apache c ho tr rat tot tren moi trng Unix, nhng ch kha tot trong Windows. Apache tan dung c tnh nang cua third-party. Bi v ay la nguon m nen bat ky ai co kha nang eu co the viet chng trnh m rong tnh nang cua Apache. PHP hoat ong vi t cach la mot phan m rong cua Apache, va ngi ta goi la mot module cua Apache. Apache co tnh on nh va toc o ang phai noi. Tuy nhien, cung co mot so s phan nan ve no la khong ho tr cong cu o hoa trc quan, ieu co the giup ngi ta lam viec mot cach de dang hn. Ban phai thc hien cac thay oi oi vi Apache bang cach s dung dong lenh, hoac s cac tap tin text trong folder chng trnh Apache. Neu lan au en vi Apache th ban se gap mot chut la lam. Mac du Apache ch lam viec tot tren Unix, nhng cung co nhng phien ban chay tot tren he Windows. Khong mot ai, ke ca cac nha phat trien Apache e ngh rang Apache nen c chay tren mot server Windows ban ron. Neu ban quyet nh chon HH Windows cho server th ban nen s dung IIS. Neu ban th nghiem ng dung tren Windows va sau o em upload va chay tren Unix/Apache cua nha cung cap host th cung khong he han g, ng dung cua ban van chay ngon lanh.

Middleware
PHP thuoc lp ngon ng lap trnh goi la middleware. Cac ngon ng nay hoat ong can ke vi Web Server e thong dch cac yeu cau t tren World Wide Web, sau o nhan cac tra li t Web Server chuyen tai en trnh duyet Web nham ap ng cac yeu cau o. Middleware la ni ma ban se thc hien cac khoi lng rat ln cong viec chnh yeu cua ban. Vi ho tr nay Web Server cua ban se khong phai can ang qua

Lap trinh Web dong voi PHP / MySQL

Page 5

nhieu khoi lng cong viec. Nhng khi ban phat trien ng dung cua ban, ban se ton nhieu thi gian viet ma chng trnh e cho chng trnh cua ban co the hoat ong c. Ngoai PHP ra co mot so ngon ng khac co chc nang tng ng nh ASP, Perl, ColdFusion.

He CSDL quan he

Relational Database Management Systems (He Quan tr C S D Lieu Quan he - RDBMSs) cung cap phng thc tuyet vi e lu tr va truy xuat lng thong tin ln va phc tap. No a ra i kha lau. Thc te, no co trc Web, Linux va WindowsNT, cho nen khong co g ngac nhien khi co qua nhieu he CSDL e chon la. Tat ca cac CSDL nay e da tren c s SQL (Structure Query Language). Mot so he pho bien nh Oracle, Sysbase, Informix, Ms SQL Server, IBM's DB2. He nguon m thong dung hien nay la MySQL ma quyen sach nay e cap en, ngoai ra con co hai he nguon m khac la PostgresSQL a mot thi thay the MySQL va Interbase la bo nguon m cua Borland gii thieu vao thang 8/1999.

Tai sao s dung PHP va MySQL


Tai sao co qua nhieu chon la nh vay ma chung ta lai phai ch lay ra cap bai trung PHP/MySQL ma thoi? Toi se giai thch ieu nay phan sau.

Noi ve PHP
Cac ngon ng lap trnh xem ra giong nh cac loai giay dep. Co loai co ve bat mat vi mot so ngi nay, nhng lai kho a vi ngi khac va ngc lai. Mot so ngi ch thch s dung mot hieu giay nao o a quen thuoc va ngon ng lap trnh cung tng t nh vay. ay toi muon ngu y vi cac ban la khi lap trnh Web, cac ngon ng lap trnh eu cho ket qua gan giong nhau. Cau hoi ngon ng nao tot nhat khong phai la van e no khong co kha nang thc hien mot so chc nang nao o ma thng la no co lam cho ban thc hien cong viec mot cach nhanh chong va nhoc cong hay khong?

Toc o nhanh, de s dung

Chung ta hay ban ve toc o. Co 3 th ma toi chac chan khi ban ve viec so sanh toc o gia cac ngon ng lap trnh Web. Th nhat, ng dung viet bang C chay nhanh nhat. Th hai, cong viec lap trnh C kha la phc tap, va se ngon nhieu thi gian hn. Th ba, viec so sanh gia cac ngon ng la mot ieu kho khan. Tat ca nhng g toi biet la toi cam thay yen tam khi noi rang PHP cung nhanh nh
Lap trinh Web dong voi PHP / MySQL Page 6

cac ngon ng khac. Tr lai v du so sanh vi cac loai giay dep: Vina, ong Hai, Kien Hoa, Hong Thanh, Italy v.v., chan chan ban se chon loai tien dung nhat? Neu ban giong nh toi, ban se cam thay rang PHP co ay u cac ac tnh nh kha nang, cau truc va de s dung. Xin noi them, ay ch la cach nhn rieng cua toi th toi tin rang cu phap PHP tuyet hn ASP hay JSP. Va theo toi th viec go lenh PHP nhanh hn ColdFusion va no khong kho hoc nh Perl. Tom lai, toi cho rang PHP cung cap cac tnh nang manh me e thc hien ng dung Web mot cach nhanh chong.

Chay tren nhieu he ieu hanh

Nh a trnh bay phan kien truc web, toi co noi la PHP co the chay tren WindowsNT/2000/2003 va Unix vi s ho tr cua IIS va Apache. Nhng ngoai ra no co the chay tren mot so cac platform khac nh Netscape, Roxen, hay mot vai th khac. Nh chung ta biet ASP co the chay tren Unix, ColdFusion co the chay tren Solaris va Linux, JSP co the chay tren kha nhieu loai platform. oi vi PHP, no co the chay tot tren nhng platform ho tr cac chung loai tren.

Truy cap bat ky loai CSDL nao


ng dung cua ban d nh se truy cap nhng loai d lieu dch vu nao? LDAP, IMAP mail server, DB2, hay XML parser hay WDDX. Bat ke ban can en th g th PHP cung san sang ho tr thong qua cac ham c xay dng san no se lam cong viec cua ban tr nen rat de dang va tien li. Nhng neu nh co mot so th cha c xay dng san th sao? Ta tiep tuc sang phan sau se ro. Neu nh ban cam thay b ng oi vi viec phat trien nguon m, ban co le se ngac nhien oi vi chat lng cua loai phan mem nay. Co hang ngan nhng chuyen gia lap trnh xuat sac i san va ho san sang bo thi gian ra e tao nhng phan mem tuyet vi va hau nh mien ph. oi vi ngon ng thnh hanh nh PHP th at han la cac rat nhieu cac nha lap trnh ang thc hien phat trien no hang ngay. S that co mot viec rat an tng la neu nh ban co mot s co ky thuat, ban co the gi email en mot nha phat trien PHP cac chi tiet s co o. Ch trong vong vai gi ban se nhan c s tra li thoa ang. Khi PHP4 c pho bien, no a tr thanh mot hien tng cua ngon ng lap trnh. No giup cho viec bo sung so lng ln cac ham chc nang mot cach de dang. Neu nh ngon ng a co san nhieu ham ac thu cho cong viec th ban se ton cong hn cho viec lap trnh cua mnh.

Luon c cai tien & cap nhat

c hng dan ky thuat bat c luc nao


Lap trinh Web dong voi PHP / MySQL Page 7

Hau het cac ngon ng eu ho tr active mailing list (hieu nom na la danh sach mail nhng thanh vien trc chien ho tr ky thuat) va cac development site (trang web ho tr giai quyet ky thuat). PHP cung khong ngoai le. Neu ban gap phai s co - gap nhng loi trong chng trnh va khong tm ra cach khac phuc se co hang tram ngi co ten trong danh sach mail luon san long kiem tra va khac phuc s co cho ban. Bo nguon m PHP that s a tao ra mot tnh cam cua ca cong ong. Khi ban gap phai kho khan oi vi no th luc nao cung co nhng ong mon chia se noi long o va giup ban khac phuc nham em lai niem vui cho ban.

Hoan toan mien phi$

Ban khong ngai g ve van e ban quyen khi ban sam mot may vi tnh va cai len o nhng phan mem nh Linux, Apache, PHP v tat ca eu mien ph.

Free!
Noi ve MySQL
Mac du MySQL c pho bien rat nhieu nhng no van co nhng oi thu ang gm ang canh tranh vi no. Nhng oi thu cua no co the troi hn ve mot phng dien ac thu nao o. Trong phan tren, chung ta a ban s qua MySQL. Trong phan nay, ban se c biet ve nhng ac iem cua nhng He quan tr CSDL khac ma MySQL khong ho tr. Vi nhng han che o a lam cho MySQL khong c chon e chay tren mot so cac moi trng. Neu ban ang co ke hoach bat au cho mot ngan hang chang han, th toi khuyen ban la MySQL khong thch hp cho ban. Nhng oi vi phan ong moi ngi va phan ln cac ng dung, MySQL la s chon la cua ho bi no rat thch hp cho nhng ng dung Web.

Va tui tien

Hay ngh ban can cai at Oracle. Hay chuan b hau bao cua mnh khoang 30.000 en 100.000 USD hoac tham ch con hn the na. ieu hien nhien la Oracle, Sysbase va Informix la nhng He Quan tr CSDL tuyet vi, nhng gia thanh qua cao, khong hp vi tui tien cua phan ong moi ngi.

Lap trinh Web dong voi PHP / MySQL

Page 8

MySQL hoan toan mien ph. Ban co the s dung ma khong can chuan b bat ky khoan tien nao.

Nhanh va manh

MySQL khong co ay u nhng c s vat chat cho mot He Quan tr CSDL chnh tong, nhng oi vi cong viec thng nhat cua phan ong moi ngi th no cung cap cung kha nhieu th. Neu cong viec cua ban la lu tr d lieu tren Web hoac lam mot trang Thng mai ien t c va, th MySQL co u nhng th ban can. oi vi nhng CSDL c trung bnh th MySQL ho tr tuyet vi ve toc o. Cac nha phat trien MySQL rat t hao ve toc o san pham cua ho. Vi cac ng dung ma toi gii thieu trong phan III va IV cua quyen sach nay, th ban kho co the kiem c mot He Quan tr CSDL nao at c toc o nhanh hn no.

MySQL c cai thien lien tuc vi mot tan so khong ng. Cac nha phat trien cap nhat no thng xuyen, ngoai ra con bo sung cac tnh nang rat an tng cho no moi luc moi ni. Hien tai, MySQL a c bo sung them ho tr transaction. Nh vay la MySQL a thc thu tr thanh mot He Quan tr CSDL chuyen nghiep.

Cai tien lien tuc

Good!
Thc hanh ng dung au tien
Phan m au nh vay la tam u. Bay gi chung ta hay tiep tuc sang phan viet mot ng dung th nghiem e biet c cach thc hoat ong cua ngon ng nay nh the nao. Co le oc qua phan gii thieu ban cung a co mot so khai niem nhat nh ve s hoat ong cua chung.

Cong cu can thiet


PHP Webserver

Co mot so thanh phan can thiet ma ban phai co trc het. Toi se gii thieu ngay sau ay va ban se biet mnh can en nhng g. ay la ng dung chay tren Web, cho nen ban ieu hien nhien la ban can phai co mot Web Server. Ban s dung Apache, ban cai len Winserver2000/ 2003

Lap trinh Web dong voi PHP / MySQL

Page 9

hoac 98, XP thong dung cua ban. Co mot so phien ban Apache co san bo cai at PHP trong o. Neu cha co ban phai cai at them PHP. Con na, ban phai cai MySQL. Nh vay bo ba Apache, PHP va MySQL luon ong hanh vi nhau. Ban xem them phan cai Apache server tren cac CD thc hanh PHP hoac xem tren cac Dien an Tin hoc . Sau khi cai at xong ban khi ong Apache. Neu t trnh duyet go vao http://localhost trang web thong tin cua Apache hien th th coi nh thanh cong. Lu y: Ban can phai xac nh th muc goc cua localhost e cha cac file .php cua ban sau nay (xem trong hng dan cai at Apache).

Text Editor

e soan thao cac dong lenh PHP ban can co mot chng trnh soan thao text n gian thoi, nh Notepad trong Windows chang han. Co mot so chng trnh soan thao ho tr PHP, cac dong lenh c ngi sang bang nhieu mau khac nhau nham lam cho viec lap trnh cua ban de dang hn. Ban co the vao cac website cua Allairre (www.allaire.com) hoac Editplus (www.editplus.com). Hien nay, chng trnh Dreamweaver MX cua Macromedia cung ho tr soan thao ma lenh PHP rat tot.

BAT AU LAM
Toi ngh la toi a khi au quyen sach vi nhng m ly thuyet suong. Bay gi chung ta hay bat tay vao thc i thoi. Nh ban a biet khi truy cap vao mot trang Web co the ban se c yeu cau hay chnh ban muon ghi lai y kien cung vi mot m cac thong tin nhan dang ve mnh nh ho ten, a ch website, email v.v. Tat ca cac thong tin nay se c lu tr vao mot CSDL tren Web. Nh vay, ngi quan tr Web hoac nhng ngi truy cap khac se biet thong tin ca nhan cung nhng y kien cua ban. Ngi ta goi thong tin nay la GuestBook (hieu nom na la So vang e khach vieng tham ghi chep). Bay gi chung ta bat tay vao viec tao mot GuestBook.

Tao mot Database (quan trong!)

Bay gi ban can biet phai lam g roi. Chuyen au tien la phai tao mot CSDL lu tr thong tin cua khach. e lam c ieu nay ban can phai dung en ngon ng SQL (thc te ban co the lam vi vai ong tac nhap chuot va vai ngon go phm, nhng hay tap lam quen vi SQL v no se hu dung ve sau). Ban se c hoc ky ve SQL trong cac chng sau. Do o ban ng lo lang khi cha hieu g ve no. Bay gi ban hay khi ong MySQL. Neu ban a cai at MySQL trong Windows th no se co bieu tng e khi ong hoac no se c t ong khi ong khi m

Lap trinh Web dong voi PHP / MySQL

Page 10

Windows len. oi vi MySQLAdmin version 1.1 cho phep ban lam viec trong 2 giao dien: Windows va Dos. oi vi giao dien Widows th bieu tng MySQL (bieu tng en giao thong) nam SystemTray, ban ch viec click chuot phai len no va chon Show me. Ca so lam viec cua MySQL hien len, tuy nhien trong ca so nay ch cho phep ban thc hien mot so thao tac co han oi vi CSDL. Hnh tren la cach tao Database mi trong MySQL theo giao dien Windows. Tuy nhien, toi khuyen cac ban nen dung tien ch PhpMyAdmin, chng trnh nay ho tr cac thao tac oi vi CSDL trong MySQL vi giao dien de s dung. Trong phan nay toi hng dan them ban thc hien thao tac vi Database trong giao dien dong lenh MSDOS bi v cac giao dien khac toi ngh t ban co the lam c. Bat man hnh dong lenh DOS len, chuyen sang th muc cai at MySQL co cha tap tin mysql.exe (/mysql/bin) va go vao mysql <Enter>. Tai dau nhau nhac lenh hay go lenh e tao ra mot database mi:
mysql> create database guestbook; Query OK, 1 row affected (0.00 sec) mysql>

Bay gi trong CSDL guestbook ban can phai co table cha thong tin cua khach. Ban hay dung lenh create table t dau nhac lenh:

mysql> use guestbook Database changed mysql> create table guestbook -> ( -> name varchar(40) null, -> location varchar(40) null, -> email varchar(40) null, -> url varchar(40) null, -> comments text null -> ) -> ; Query OK, 0 rows affected (0.00 sec) mysql>

Ban a co mot CSDL ten la guestbook va mot table trong CSDL nay cung ten la guestbook. Bay gi a en luc chung ta viet mot ng dung bang PHP e thc hien cac thao tac: xem, chen, sa, xoa cac thong tin trong CSDL guestbook.

Ban hay dung mot chng trnh soan thao van ban n gian nh Notepad chang han. at ten cho cac tap tin la .php, cac tap tin nay c lu tr trong th muc goc cua web local tren may ban (nen tham khao CD cai Apache e ro hn).

Viet lenh PHP

Cu phap c ban

Lap trinh Web dong voi PHP / MySQL

Page 11

ieu thu v oi vi PHP la cho phep ban xen ke gia lenh HTML va lenh PHP. Do o, PHP c xem nh la mot script giong nh Javascript hay Vbscript. Cac lenh cua PHP c goi trong the m: <? va the ong: ?> Bay gi ban hay th chay tap tin hi.php sau:
<? echo Hi,; ?> mom.

Khi chay ban se go vao: localhost/hi.php Ket qua cho ra la "Hi, mom". Ta thay ch "Hi," nam trong tag lenh PHP con ch "mom" thuoc ve HTML. Tuy nhien, PHP con lam c nhieu ieu khac na, cung giong nh cac ngon ng lap trnh khac, no co the lam viec vi cac loai bien, kieu d lieu, cha rat nhieu ham chc nang. Hay tm hieu v du sau:
<? echo hi, mom. ; $var = date(H); if ($var <= 11) { echo good morning; } elseif ($var > 11 and $var < 18) { echo good afternoon; } else { echo good evening; } ?>

Neu nh ban thay kho hieu th cung khong sao. Chung ta se biet tng tan hn phan sau. Trang ket qua se hien th cac li chao tuy thuoc vao gi giac hien tai. Toi a dung ham date cua PHP e lay ra c gi giac hien tai. Gia tr gi c em gan cho bien $var. Ke en la cac chon la c s dung e a ra li chao thch hp. Cac ban hay e y mot chut, cac lenh cua PHP eu c ket thuc vi dau cham phay (;). Trong phat bieu IF chung ta thay dau ngoac nhon { } cha cac lenh tuy se c thi hanh tuy thuoc vao ieu kien. Cac ieu kien th c bao trong dau ngoac n ( ). Ham date() va lenh echo ch la 2 trong hang tram cac ham va lenh co trong PHP ma cac ban se c hoc mot so can thiet cua chung trong cac chng sau. Bay gi ban hay tm hieu them mot so lenh ve CSDL.

Lenh PHP e ket noi Database (quan trong)

Lap trinh Web dong voi PHP / MySQL

Page 12

Bi v PHP va MySQL hien tai tren may cua ban van con la hai the gii tach biet nhau. Do o, muon dung PHP e lam viec c vi CSDL ban can phai tao ra si day lien ket gia hai chien hu nay. V co the co rat nhieu database trong MySQL, do o ban can phai ch ra ban muon s dung database nao trong MySQL. Chung ta hay thc hien nh sau:
<? mysql_connect(localhost, khai,kkk) or die (Could not connect to database); mysql_select_db(guestbook) or die (Could not select database); ?>

Dong au tien thc hien viec ket noi vi Database Server ang nam tren may localhost, co username la khai, password la kkk. Neu ket noi thanh cong, no se thc hien bc ke tiep la ket noi vi database nam trong o la guestbook bang lenh mysql_select_db() Cac ban nen lu y la cac lenh tren ban s dung thng xuyen cho moi ket noi CSDL cua ban, do o toi khuyen ban nen lu no vao mot tap tin (dbconnect.php chang han), sau nay can th ch viec dung lenh include(dbconnect.php);

Nhap d lieu vao Database


Bi v hien tai database cua ban van cha co user nao, cho nen toi se hng dan ban viet cac lenh e thc hien viec nay. Nhng trc tien, ban can phai biet them mot chut t ve bien trong PHP. phan trc ban a xem qua mot v du trong o co cha bien, tuy nhien oi vi moi trng client/server, ban can phai lam viec vi bien data t client. Ban se thng xuyen lam viec vi form HTML (ban co the tm hieu ky hn phan Phuc luc A. Chung ta nen biet la moi phan t cua form eu co mot cai ten, va khi ban submit mot form nao o th cac ten cua cac phan t trong o tr thanh mot bien trong script PHP c form submit en. Vi form nh sau, khi c submit, cac bien $surname va $submit se c tao ra trong myscript.php. Gia tr $surname se mang gia tr ma user a nhap vao. Gia tr cua $submit se la chuoi "submit".
<form action=myscript.php> <input type=text name=surnmae> <input type=submit name=submit value=submit> </form>

Toi xin lu y vi cac ban la lap trnh Web khong giong nh cac dang lap trnh khac cho no khong trang thai tnh. e the hien mot trang, Web Server phai trc het nhan mot thnh cau t trnh duyet. Giao thc s dung cua chung la HTTP, Hypertext Transfer Protocol. Cac yeu cau se bao gom: trang web ma

Lap trinh Web dong voi PHP / MySQL

Page 13

trnh duyet se thay, form data, loai trnh duyet ang c s dung, a ch IP ma trnh duyet s dung. Da vao thong tin nay ma Web Server se quyet nh phuc vu nhng g. Mot khi server phuc vu yeu cau trang web, no se duy tr s ket noi vi trnh duyet. Thong thng, ban can biet cach thc e chuyen cac bien t trang nay sang trang khac. Ban se tm thay thao tac nay trong ng dung tiep theo. ng dung cua chung ta se giai quyet van e da theo 1 trong 3 cach thc: chuyen giao theo phan t form an, s dung cookies, s dung session. Bay gi tr lai script sau:
<form action=myscript.php> <input type=text name=surnmae> <input type=submit name=submit value=submit> </form>

Ban co the quyet nh cho hien th tren site nhng g da vao cac bien thong tin t form HTML. Thong thng, ban co the kiem tra neu form a c submit hay cha bang cach kiem tra bien $submit co cha gia tr "submit" hay khong. Hay bat tay vao cong viec i thoi. Trang au tien trong ng dung c goi la sign.php co cha mot form HTML. Action cua no la create_entry.php. Sau ay la chi tiet dong lenh:
<h2>Sign my Guest Book!!!</h2> <form method=post action=create_entry.php> <b>Name:</b> <input type=text size=40 name=name> <br> <b>Location:</b> <input type=text size=40 name=location> <br> <b>Email:</b> <input type=text size=40 name=email> <br> <b>Home Page URL:</b> <input type=text size=40 name=url> <br> <b>Comments:</b> <textarea name=comments cols=40 rows=4 wrap=virtual></textarea> <br> <input type=submit name=submit value=Sign!> <input type=reset name=reset value=Start Over> </form>

Khi ban ien ay u thong tin trong form, th cac thong tin se c chuyen oi ti create_entry.php. Chuyen au tien phai lam tren trang nay la kiem tra xem form a c submit cha. Neu roi, nhan lay gia tr a nhap vao trong form va s dung chung e tao mot query ong thi gi en MySQL. Ban ng lo lang la

Lap trinh Web dong voi PHP / MySQL

Page 14

khong biet cac lenh SQL, ieu trc tien la ch can biet la no se thc hien viec chen d lieu vao table cua guestbook. Tap tin create_entry.php nh sau:
<?php include(dbconnect.php); if ($submit == Sign!) { $query = insert into guestbook (name,location,email,url,comments) values ($name, $location, $email, $url, $comments); mysql_query($query) or die (mysql_error()); ?> <h2>Thanks!!</h2> <h2><a href=view.php>View My Guest Book!!!</a></h2> <?php } else { include(sign.php); } ?>

Trong lan au tien create_entry.php c goi, form sign.php se c hien th. Ke tiep, d lieu se c cap nhat vao CSDL. Hnh sau minh hoa cac form c hien th:
sign.php

create_entry.php

Hien th d lieu trong Database len man hnh Bay gi d lieu a c ghi vao CSDL guestbook . Ban can thc hien viec xem cac d lieu o. Nen nh la chung ta lai phai s dung dbconnect.php nh toi a noi vi ban trc ay. Ban can phai cho hien th tat ca cac record trong table thong tin cua khach vieng tham a nhap vao. Chung ta thc hien script sau va at ten la view.php:
<?php include(dbconnect.php); ?> <h2>View My Guest Book!!</h2> <?php $result = mysql_query(select * from guestbook) or die (mysql_error()); while ($row = mysql_fetch_array($result)) { echo <b>Name:</b>; echo $row[name];

Lap trinh Web dong voi PHP / MySQL

Page 15

echo echo echo echo echo echo echo

<br>\n; <b>Location:</b>; $row[location]; <br>\n; <b>Email:</b>; $row[email]; <br>\n;

echo <b>URL:</b>; echo $row[url]; echo <br>\n; echo <b>Comments:</b>; echo $row[comments]; echo <br>\n; echo <br>\n; echo <br>\n; } mysql_free_result($result); ?> <h2><a href=sign.php>Sign My Guest Book!!</a></h2>

Nh chung ta thay query trong MySQL truy cap tat ca cac hang trong database. Script thc hien viec nay bang cach s dung vong lap thong qua bien $row. Trong moi vong lap th moi field trong tng record c hien th. Vd: print $row["email"] se ghi ra man hnh oi vi record ang truy cap. Khi chay chng trnh, tat ca cac field cua tng record se c hien th:
view.php

Chng trnh nay upload len internet c cha?


Bay gi th ng dung au tien cua ban a hoan tat. Neu ban muon upload web va tao len tren Server e th nghiem th cung c thoi. Nhng muon e no tr thanh mot site guestbook ung ngha th cha c au! Ban con can phai lam nhieu th e d lieu ban khong b hacker quay pha. (Con tiep)
Lu y: Ban co the tm thay cac CD thiet ke web PHP tai cac ca hang CD (Ton That Tung, tp.HCM chang han). Tren CD co trnh cai at Apache, PHP, MySQL thong dung la FOX. Ngoai ra con co cac Website PHP mau. CAC LENH BAI HOC TREN TOT NHAT BAN NEN GO LAI, KHONG NEN COPY!
tongphuockhai@mail15.com - Kien thc la kho bau khong phai cua rieng ai. V vay ban ng ngan ngai khi chia se cho moi ngi.

Lap trinh Web dong voi PHP / MySQL

Page 16

LAP TRNH WEB NG VI

PHP / MySQL
GUESTBOOK CATALOG FORUM SHOPPING CART

PHAN 2
Tong Phc Khai (tong hp& bien dch)

Phng phap truy xuat CSDL

MySQL

1- T Command Prompt 2Bang lenh PHP 3- Dung phpMyadmin


e hieu c chng nay mot cach ro rang, trc tien ban can phai co mot so kien thc c ban ve C S D Lieu quan he. Neu ban a hoc qua mot khoa can ban ve MS Access trong chng trnh ao tao chng ch B chang han th han nhien ban co the tiep tuc. Con neu nh ban cha biet g ve no th toi se ban en no trong phan Phu Luc cua giao trnh nay hoac ban co the tm ngay mot tai lieu tham khao ve CSDL, de nhat la tai lieu va MS Access ... ... Toi chac rang bay gi ban a co kien thc ve CSDL va hieu biet Table la g roi! Co hang khoi cong viec ban se phai lam viec oi vi cac Table va ban se c hng dan can ke trong quyen sach nay. Ban se phai vt

Lap trinh Web dong voi PHP / MySQL

Page 17

qua mot so kien thc ve no e mi co the thanh thao trong thao tac vi Table. Nh ban biet ay: Con ng i en thanh cong khong co trai tham san au! Neu ban a tng lam viec vi MS SQL Server hay Access chung eu co ho tr viec tao CSDL rat la de dang vi giao dien trc quan. oi vi MySQL ban cung co the s dung cong cu trc quan o la phpMyadmin. Tuy nhien, ban phai hoc cach thao tac vi CSDL bang dong lenh, toi chac rang ieu nay se rat co ch cho ban. Muon chng trnh cua ban trong luc chay thao tac t ong vi CSDL th ban can hang ta lenh PHP/SQL e thc hien cac yeu cau cua chng trnh. Trc khi chung ta tao cac table trong CSDL cua MySQL, co mot vai th ban can phai hieu ro. Nhng khai niem c ban ma toi sap gii thieu sau ay rat quan trong. Ban hay chac rang mnh a nam ky ve chung trc khi thc hien viec thiet ke d lieu.
Viec au tien ban phai lam trong viec thiet ke mot table la quyet nh xem mot field co cho phep gia tr NULL hay khong. Trong CSDL quan he, gia tr NULL cua mot field ong ngha vi no co the chap nhan khong co d lieu trong o. Nen nh rang gia tr NULL khac vi gia tr cua mot chuoi khong co ky t trong o hoac so co gia tr 0. oi khi trong chng trnh, ban se thc hien mot so ong tac so sanh xem mot chuoi nao o co cha gia tr hay khong, no co the la mot cau lenh IF. Xet mot v du PHP nh sau:
$var //this is a variable used in the test if ($var == ) { echo Var is an empty string; } else { echo $var; } Neu ban thc hien viec so sanh xem gia tr so co phai 0 hay khong th cung thc hien tng t. ong tac so sanh tren se khong lam viec c oi vi gia tr NULL. Ban nen hieu rang NULL la khong cha bat ky gia tr g trong o, cho nen viec so sanh tr khong mang y ngha g ca. Trong chng 3 ban se thay rang oi vi gia tr NULL oi hoi lap trnh vien phai rat can nhac khi viet lenh lien ket table.

Null

Lap trinh Web dong voi PHP / MySQL

Page 18

Trong lenh SELECT cua SQL, co mot so cach e ban co the kiem tra neu nh mot field cha gia tr NULL. Trc het ban hay s dung ham Isnull(). Gia s tm mot record trong table ma gia tr midle_name la NULL, ban co the s dung query sau: select * from names where isnull(middle_name); Hoac lay cac record ma middle_name khac NULL:
select * from names where !isnull(middle_name);

Ban cung co the s dung is null va is not null:


select * from users were addr2 is null; select * from users where addr2 is not null;

e ro hn, ban hay xem chuyen g xay ra khi toi co gang lien ket hai table sau: Khach_hang ten ho_lot ba_xa Trung Le Anh 1321 Khai Tong Phuoc Null Hon_nhan ba_xa ten ho_lot 1321 Diem Nguyen Thuy Neu ban muon tm ten cac khach hang va ten nhng ba xa cua ho, ban se phai lien ket 2 table nay thong qua field ba_xa. (Xin ban ch lo lang khi cha hieu ve cu phap, ban se hoc ngay phan tiep theo thoi).
SELECT * FROM khach_hang, hon_nhan WHERE khach_hang.ba_xa = hon_nhan.ba_xa Viec thc hien nay ch ung oi vi Trung, nhng se co van e oi vi Khai bi v anh ta hay con oc than va ba_xa cua anh ta la NULL. Trong chng 3 ban se khao sat ky hn ve van e nay.

Ngi ta noi rang u iem vt troi cua He quan tr CSDL quan he la no thc hien cac viec tm kiem hay sap xep nhng khoi lng d lieu khong lo mot cach rat nhanh chong. S d no thc hien c viec nay la do no co cha mot c cau lu tr d lieu goi la INDEX. INDEX cho phep database server tao c mot field ac trng tm kiem vi toc o kho ng. Cac INDEX ac biet ho tr mot hoac mot nhom cac record trong mot table cha so lng ln cac record. Chung cung ho tr toc o cho cac ham lien ket hoac tach nhom d lieu nh min(), max(), ban se tm hieu Chng 3. Vi cac tnh nang vt troi nay, tai sao ngi ta lai khong tao index trong tat ca cac field cua mot table? Co mot so ieu tr ngai nh sau: Th nhat, index co se lam cham mot so tien trnh trong CSDL. Moi lan bao tr cac index Database Server phai mat kha nhieu thi gian. Co mot vai trng hp chnh cac index lam cho chung cham han. Neu

Index

Lap trinh Web dong voi PHP / MySQL

Page 19

nh tren table cua ban tat ca cac record eu giong y nh nhau th khong co ly do g e ban tao index. Cac index d tha ch lam cho ton them khong gian a cua ban ma thoi. oi vi mot table co gan khoa chnh (primary key) th thong thng field co khoa nay c dung vao viec tm kiem cho nen index se c gan t ong tren field nay. Ban se gap lai rat nhieu cong viec tao index cac phan tiep theo sau.

Lenh CREATE Database

Trc khi tao c mot Table th ieu tat yeu la ban phai tao c mot Database cai a. Viec nay de dang va nhanh chong thoi. Lenh CREATE c s dung nh sau:
mysql> create database database_name; Neu nh ban thac mac rang sau khi tao database no se nam trong th muc nao tren o a cua ban th ban hay tm trong ..\mysql\data xem co khong.

Khi at ten cho database, hay at ten cho field va index g ay tranh trng tranh trng hp at nhng cai ten kho nh hoac de b lan lon. oi vi mot so he thong Unix chang han co s phan biet ch HOA/thng th CSDL chay tren no cung anh hng theo. Ban hay chon mot quy c cho rieng mnh trong viec at ten e khoi nham lan ve sau. Chang han ten cua table va field eu at ch thng chang han. Nen nh la khong c s dung khoang trang. Bay gi ban tm hieu ca hai cach tao database: Cach th nhat tao thu cong t dau nhac dong lenh DOS, cach th hai s dung cac lenh trong PHP. Cach th nhat toi a co trnh bay chng gii thieu va ban a tao mot database ten la guestbook. Cu phap tao nh sau:
mysql> create database guestbook;

Cach th hai la s dung lenh trong PHP, ban co the dung ham mysql_create_db() hoac mysql_query(). Nhng nen nh trc khi tao ban phai thc hien c ket noi vi database server.
$conn = mysql_connect(localhost,username, password) or die (Could not connect to localhost); mysql_create_db(my_database) or die (Could not create database); $string = create database my_other_db; mysql_query($string) or die(mysql_error());

Lenh USE Database


Sau khi a tao c mot database mi trong database server ban se bat au chon no e s dung cho cong viec cua mnh. Cach thc hien nh sau: 1. Command Prompt:
mysql> use database_name;

2. Trong PHP:
$conn = mysql_connect(localhost,username, password)

Lap trinh Web dong voi PHP / MySQL

Page 20

or die (Could not connect to localhost); mysql_select_db(test, $conn) or die (Could not select database);

Lenh CREATE Table


Lu y: Lenh nay thc hien sau khi a co lenh CREATE Database. Mot khi ban a tao va chon database, viec tiep theo la tao mot table. Ban se s dung lenh Create Table nh sau:
create table table_name
( column_1 column_type column_attributes, column_2 column_type column_attributes, primary key (column_name), index index_name(column_name) )

oi vi thuoc tnh cac field (cot) chung ta can ban ve: - null hoac not null - default Neu ban khong nh ngha NULL hay NOT NULL th NULL se c chon lam gia tr mac nh. Hay xet v du sau:
create table topics2 ( topic_id integer not null auto_increment, parent_id integer default 0 not null, root_id integer default 0, name varchar(255), description text null, create_dt timestamp, modify_dt timestamp, author varchar(255) null, author_host varchar(255) null, primary key(topic_id), index my_index(parent_id))

Trong v du tren ban tao ra mot table co ten topics2, co tat ca 8 field va co 2 index, mot index cho khoa chnh va mot cho parent_id. Type cua cac field tren lan lt la integer, varchar, text, timestamp. Gia tr ng sau defaul la gia tr mac nh ban gan cho mot o trong record khi khong nhap lieu vao. Bay gi chung ta ap dung cac lenh nay vao mot chng trnh PHP e tao table, ham mysql_query () c s dung:
$conn = mysql_connect(localhost,username, password) or die (Could not connect to localhost); mysql_select_db(test, $conn) or die(could not select database); $query = create table my_table (col_1 int not null primary key, col_2 text); mysql_query($query) or die(mysql_error());

Lap trinh Web dong voi PHP / MySQL

Page 21

* Lu y: username va password tuy thuoc vao MySQL cua ban.V du:


$conn = mysql_connect(localhost,minhtrung, zadfdfaked) or Thong thng cac nha cung cap host PHP s dung localhost, tuy nhien mot so hosting khong s dung localhost nh Yahoo chang han. Do o ban can xem hng dan cua nha cung cap host.

Kieu d lieu
Bay gi chung ta hay ban ve cac kieu d lieu (type) gan cho field trong table. Co rat nhieu kieu khac nhau chung ta se lan lt khao sat tng kieu mot.

Kieu chuoi van ban

MySQL co 7 kieu danh cho d lieu kieu chuoi van ban: char varchar tinytext text mediumtext longtext enum CHAR Cach s dung: char(length) Length co gia tr toi a la 255. Gia s ban s dung khai bao char(10) th ban ch c phep nhap vao toi a 10 ky t ma thoi. VARCHAR Cach s dung: varchar(length) Kieu nay cung gan giong nh kieu CHAR co o dai toi a cung la 255. iem khac biet cua varchar la no ch la bien lu tr o dai, cho nen no se khong thay oi khi gia tr cua cua o d lieu dai hay ngan. MySQL se sinh ra mot ky dung lam bien cha o dai cua field kieu varchar. ong thi MySQL se thc hien chc nang loai bo cac khoang trong trong moi o d lieu neu nh khong c s dung het. USING CHAR OR VARCHAR Co s khac nhau trong viec s dung CHAR va VARCHAR. Sau ay la phng hng la chon cua ban. Gia du ban tao mot field la A CH va ban d tnh o dai toi a la 150. Co nhng trng hp a ch rat ngan v du: 1 Le Li, Q.1, TPHCM. Ban ch s dung co 20 ky t, nh vay con trong rat nhieu ky t khong dung en. Trong trng hp nay ban nen s dung kieu VARCHAR (150). Trng hp field cua ban la MA SO chang han, va ban cho o dai toi a la 6 theo quy c tao ma cua ban v du: KH0001 . Trong trng hp nay cac o khac eu c nhap theo chuan nh san luon luon la 6 ky t cho nen khong viec g ban phai s dung

Lap trinh Web dong voi PHP / MySQL

Page 22

VARCHAR e MySQL phai nhoc cong theo doi o dai cua cac o moi khi nhap vao. Ban ch s dung VAR(6) la c.
Trong trng hp ban chon kieu d lieu la varchar(4) th MySQL se t ong oi lai la kieu char.

TINYTEXT Cach s dung: tinytext ay la mot trong bon kieu text nh phan. Tat ca 4 kieu nay (tinytext, text, mediumtext, largetext) eu la kieu bien tng t nh varchar. Chung kh khac nhau ve o dai cua cho phep cua ky t ma thoi. Tuy nhien, oi vi TINYTEXT th cho phep o dai toi a la 255, giong nh varchar(255). Cho phep tao index tren toan bo cac ky t cua field nay. TEXT Cach s dung: text Cho phep o dai toi a la 65,535 ky t. Co the tao index tren 255 ky t au. MEDIUMTEXT Cach s dung: midiumtext Cho phep o dai toi a la 16,777,215 ky t. Co the tao index tren 255 ky t au. LONGTEXT Cach s dung: longtext Cho phep o dai toi a la 4,294,967,295 ky t. Co the tao index tren 255 ky t au. Tuy nhien loai nay khong thong dung bi v MySQL ch ho tr chuoi 16 trieu bytes. ENUM Cach s dung: enum (value1, value2, value3 ...) [default value] Vi enum ban co the gii han cac gia tr c nh san cho mot field. Cho phep ban nh trc toi a 65.535 gia tr. Thong thng ngi ta dung kieu nay cho field cha gia tr Yes hoac No. V du:
create table my_table ( id int auto_increment primary key, answer enum (yes, no) default no );

SET Cach s dung: set (value1, value2, value3 ...) [default value] Kieu nay nh ngha mot tap hp hang loat cac gia tr nh trc. Tuy nhien, cach nay t c dung bi v no pha v cau truc thiet ke CSDL (mot field co qua nhieu kieu) va cac ban se khong thay toi s dung trong quyen sach nay.

Kieu d lieu so

MySQL co tat ca 7 kieu so. Lu y rang cac kieu sau ay la giong nhau: int/ integer, double/double precision/real, decimal/numeric

Lap trinh Web dong voi PHP / MySQL

Page 23

int/integer tinyint mediumint bigint float double/double precision/real decimal/numeric oi vi tat ca kieu so, gia tr ln nhat cho phep la 255. oi vi mot so kieu cho phep ban the hien cac so 0 ng au. Gia s ban co mot field co o dai la 10 th so 25 trong o d lieu se c the hien 0000000025. Field so con c nh ngha la co dau (signed) hoac khong dau (unsigned). Mac ch la co. INT/INTEGER Cach s dung: int(display size) [unsigned] [zerofill] Neu ban dung khong dau th gia tr cua field cho phep la t 0 en 4.294.967.295. Neu dung co dau th gia tr t 2.147.483.648 en 2.147.483.647. Kieu Int se s dung auto_increment (t ong theo chieu tang) e nh ngha khoa chnh cua table.
create table my_table ( table_id int unsigned auto_increment primary key, next_column text );

e y rang ban s dung khong dau (unsigned) bi v auto_increment khong dung cho cac gia tr am. TINYINT Cach s dung: tinyint(display size) [unsigned] [zerofill]

Neu khong dau, tinyint se cha cac gia tr nguyen t 0 en 255. Neu co dau th t -128 en 127. MEDIUMINT Cach s dung: mediumint(display size) [unsigned] [zerofill] Co dau: co gia tr t -8.388.608 en 8.388.607 Khong dau: co gia tr t 0 en 1677215 BIGINT Cach s dung: bigint(display size) [unsigned] [zerofill] Co dau: -9.223.372.036.854.775.808 en 9.223.372.036.854.775.807 Khong dau: from 0 to 18.446.744.073.709.551.615 FLOAT Cach s dung 1: FLOAT(precision) [zerofill] Vi cach s dung nay, cho phep cha cac so thap phan khong dau. So lng phan thap phan co the la <=24 oi vi loai single va 25 en 53 oi vi loai double. Cac version trc ay cua MySQL, luon chia lam 2 loai:

Lap trinh Web dong voi PHP / MySQL

Page 24

Cach s dung 2: FLOAT[(M,D)] [ZEROFILL] ay la loai single va gia tr co the la t -3,402823466E+38 en -1,175494351E-38, so 0, va t 1,175494351E-38 en 3,402823466E+38. M la phan nguyen, D la phan thap phan. ???? DOUBLE/DOUBLE PRECISION/REAL Cach s dung 1: DOUBLE[(M,D)] [zerofill] Cho phep gia tr t -1,7976931348623157E+308 en -2,2250738585072014E-308, so 0 va 2,2250738585072014E-308 en 1,7976931348623157E+308. M la phan nguyen, D la phan thap phan. Cach s dung 2: DECIMAL[(M[,D])] [ZEROFILL] Cac so trong phan thap phan c lu tr nh ky t. Moi so c xem nh mot ky t chuoi. Neu D = 0 th se khong co phan thap phan. Gia tr thap phan giong nh dang Double. ????

Kieu d lieu ngay, gi


MySQL co 5 dang ngay gi: date _ time datetime _ year timestamp time year

Ngay va gi trong MySQL rat uyen chuyen, no co the chap nhan kieu chuoi hoac so hay xet v du sau:
create table date_test( id int unsigned auto_increment, a_date date );

Sau o dung insert e a gia tr ngay vao a_date:


insert into date_test (a_date) values (00-06-01); insert into date_test (a_date) values (2000-06-01); insert into date_test (a_date) values (20000601); insert into test6 (a_date) values (000601);

MySQL tng thch vi viec nhan gia tr ngay la kieu chuoi hn. Cho nen "000501 la chon la thch hp hn la viec nhap mot so nguyen. S dung gia tr chuoi cho ngay giup ban se tranh c mot so s co ve sau.

MySQL co ho tr mot so ham giup ban trong viec rut trch d lieu dang ngay. DATE Cach s dung: date nh dang cua ngay nh sau: YYYY-MM-DD. Cho phep ban cac gia tr t 1000-01-01 en 9999-12-31. DATETIME Lap trinh Web dong voi PHP / MySQL Page 25

Cach s dung: datetime [null | not null] [default] nh dang cua ngay gi nh sau: YYYY-MM-DD HH:MM:SS. Cho phep ban cac gia tr t 1000-01-01 00:00:00 en 9999-12-31 23:59:59. TIMESTAMP Cach s dung: timestamp(size) ay la kieu d lieu ghi nhan t ong gi giac sa oi gan nhat oi vi mot record, bat khi khi nao no c tao ra, hoac cap nhat eu xay ra viec ghi nhan nay. Size cua no co the nh ngha trong khoang t 2 en 14. Bang sau trnh bay cac size. Gia tr mac nh la 14. Size nh dang 2 YY 4 YYMM 6 YYMMDD 8 YYYYMMDD 10 YYMMDDHHMM 12 YYMMDDHHMMSS 14 YYYYMMDDHHMMSS TIME Cach s dung: time Lu tr dang gi theo nh dang HH:MM:SS va co gia tr t 838:59:59 en 838:59:59. Ly do ma gia tr nay ln nh vay la e no co the cha c cac ket qua tnh toan gi giac. YEAR Cach s dung: year[(2|4)] Cha d lieu dang nam. Neu s dung hai ky t e bieu th nam th bieu dien c t Co gia tr t 1970 cho en 2069, nen nh: 70 en 99 bieu th t 1970 en 1999, con 01 en 69 bieu th t 2001 en 2069. Dung 4 ky t th bieu dien c t 1901 en 2155.

Tao ch muc INDEX

Bat au t phien ban 3.23.6 cua MySQL ban co the tao index tren bat ky field nao. Cho phep 1 table co 16 field cha index. Cu phap nh sau:
index index_name (indexed_column) Mac du index_name la tuy chon, nhng ban nen luon luon cho no mot cai ten. Sau nay no rat can thiet khi ban muon xoa bo index cua mot field nao o trong lenh SQL cua ban. Neu ban khong cho ten th MySQL se chon ten index cua field au tien.

Lap trinh Web dong voi PHP / MySQL

Page 26

Con mot cach na e tao index la khai bao khoa chnh tren field o. Chu y rang bat ky field auto_increment (sort t ong) cung phai c index, va ban nen khai bao no la khoa chnh. Trong v du sau id_col c index:
create table my_table ( id_col int unsigned auto_increment primary key, another_col text ); Khoa chnh co the cung c khai bao giong nh cac index khac ngay sau khi nh ngha mot field: create table my_table ( id_col int unsigned not null auto_increment, another_col text, primary key(id_col) );

Index co the trai rong ra hn mot cot. Neu nh query s dung 2 hang phoi hp vi nhau trong khi thc hien viec tm kiem, ban co the tao mot index bao gom luon ca 2 vi cac lenh sau:
create table mytable( id_col int unsigned not null, another_col char(200) not null, index dual_col_index(id_col, another_col) );

Index nay se c s dung cho viec tm kiem va tren id_col va tren another_col. Cac index nay lam viec t trai sang phai. Do o index nay se c s dung cho viec tm kiem exclusive tren id_col. Tuy nhien, no se khong exclusive cho viec tm kien tren another_col. Con mot ieu ve index na la ban co the tao no ch tren mot phan cua field. Bat au t phien ban 3.23 cua MySQL ban co the tao index cac field kieu index tinytext, text, mediumtext va longtext tren 255 ky t au. oi vi char va varchar, ban co the tao index tren mot so ky t au cua field. Cu phap cua no nh sau:
index index_name (column_name(column_length))

V du:

create table my_table( char_column char (255) not null, text_column text not null, index index_on_char (char_column(20)), index index_on_text (text_column(200)) );

Mot index co the am bao gia tr duy nhat ton tai trong moi record cua table bang cach s dung lenh unique.
create table my_table( char_column char (255) not null, text_column text not null, unique index index_on_char (char_column));

Lap trinh Web dong voi PHP / MySQL

Page 27

Cac loai Table

MySQL ho tr cac dang talble sau: ISAM, MyISAM, BDB va Heap. ISAM la dang table a xa va trong cac ng dung mi khong c s dung. Dang table mac nh la MyISAM. Cu phap e khai bao loai table nay la:
create table table_name type=table_type( col_name column attribute );

Table dang MyISAM co toc o tot va tnh on nh cao. Khong can thiet phai nh ngha mot dang table mi nao khac tr phi ban can dung loai khac cho v mot ly do ac biet nao o. Heap la dang table thng tru trong bo nh. Chung khong c lu tr trong a cng hay cac thiet b dung e tr tin. Cho nen neu b mat ien heap se mat theo. V c tr trong bo nh nen heap co toc o truy cap cao. Tuy nhien ban ch dung cho cac table tam thi trong luc chay chng trnh.

Lenh Alter table

Neu nh ban muon thay oi cac thanh phan cua table ban se s dung lenh alter table. Ban co the thc hien cac thay oi nh: oi ten table, field, index; them hoac xoa field va index; nh ngha lai cac field va index. Cu phap c ban cua lenh nay la:
alter table table_name

Cac lenh con lai tuy thuoc vao thao tac ma chung ta se ban tiep theo ay:

oi ten Table
Cu phap nh sau:

alter table table_name rename new_table_name If you have MySQL version 3.23.27 or higher you can make use of the rename statement.The basic syntax is rename table_name to new_table_name

Them va xoa cot trong Table

Khi them field vao trong table, ban se can phai co nhng nh ngha can thiet cho field o. T phien ban 3.22 cua MySQL cho phep ban chon v tr e at field mi vao trong table. Chc nang nay khong bat buoc.
alter table table_name add column column_name column attributes

V du: alter table my_table add column my_column text not null Cach s dung nh v mot field trong table: S dung lenh first e chen field mi vao v tr au cua table. After e chen vao v tr sau cung tren table:
alter table my_table add column my_next_col text not null first alter table my_table add column my_next_col text not null after my_other_column

e xoa mot field, ban thc hien lenh sau:

Lap trinh Web dong voi PHP / MySQL

Page 28

alter table table_name drop column column name


Khi thc hien lenh alter oi vi mot table, ban ch nen thc hien mot thao tac oi vi table ma thoi. V du: Ban thc hien viec xoa mot index, sau o tao mot index mi, th khong nen gop chung vao mot lenh alter ma nen thc hien 2 lan.

Them va xoa Index

Ban co the them index bang cach s dung lenh index, unique va primary key, tng t nh viec s dung lenh create vay.
alter table my_table add index index_name (column_name1, column_name2, ...) alter table my_table add unique index_name(column_name) alter table my_table add primary key(my_column)

Ban cung co the bo index bang cach s dung lenh drop:


alter table table_name drop index index_name alter table_name test10 drop primary key

oi thuoc tnh cua cot (field)


Thay oi cach thanh to cua field bang lenh change hoac modify:
alter table table_name change original_column_name new_column_name int not null

Lenh sau la sai:

alter table table_name change my_col2 my_col3;

Neu ban muon ch oi thuoc tnh cua field th dung lenh change va tao field mi cung ten nhng thay oi thuoc tnh. Gia du ban oi field col_1 t kieu char(200) sang varchar(200): alter table table_name change col_1 col_1 varchar(200) Vi MySQL phien ban 2.22.16 tr i ban co the dung lenh modify:
alter table table_name modify 1 col_1 varchar(200)

Lenh Insert

Bay gi ban a biet tat ca nhng kien thc can thiet e tao va thc hien cac thay oi tren nh dang table, bay gi ban se tm hieu cach thc e nhap thong tin vao table. Ban se thc hien viec nay bang lenh INSERT:
insert into table_name (column_1, column2, column3,...) values (value1, value2, value3 ...)

Neu trong mot fiedl cho phep gia tr NULL ban co the khong can a vao trong lenh INSERT. Nh ban thay cac chuoi ten field va gia tr eu c at trong dau ngoac n (). Ngoai ra gia tr kieu chuoi phai c bao boc bi dau nhay n. Nh vay neu nh trong chuoi co cha dau nhay n va dau ngoac n th sao? e tranh trng hp lam lan gia dau chuoi va dau phan nh ngha lenh SQL co cac qui nh rang muon a ky hieu ac biet vao chuoi th phai at chung sau dau \

Lap trinh Web dong voi PHP / MySQL

Page 29

(single quote) (double quote) \ (backslash) % (percent sign) _ (underscore) Ban co the thoat ra khoi dau nhay n bang cach s dung 2 dau ngoac n ong m (). Ban s dung cac ky t ac biet sau e thc hien mot thao tac ac thu trong cau lenh: \n (newline) \t (tab) \r (carriage return) \b (back space) Nen lu y mot ieu la, ban khong can phai lo lang ve cac ky t thoat ay trong khi lap trnh PHP. Ban se gap c nhng ham va xac lap trong PHP dung e thc hien viec nay mot cach t ong. Ham addslashes() va cac xac lap trong php.ini se ho tr viec nay.

Lenh Update

Lenh UPDATE co mot chut khac biet so vi cac lenh ma chung ta a khao sat, no thc hien thong qua lenh WHERE. Cu phap thong thng la:
update table_name set col_1=value1, col_2=value_2 where col=value

Xin nhac lai lan na, neu ban muon them vao mot chuoi, ban can phai bao no trong cac dau nhay n va dau thoat. Nen nh rang lenh WHERE trong cau lenh UPDATE co the thc hien bat ky phep so sanh nao pha sau no. Thong thng no hay c dung e nh xac nh mot record n vi khoa chnh. Trong table folks sau ID la khoa chnh. id fname lname salary Liu 25,000 1 Don Corleone 800,000 2 Don Juan 32,000 3 Don Johnson 44,500 4 Don Cau lenh sau se tac ong en Don Corleone:
update folks set fname=Vito where id=2

Nh ban thay, neu nh ban dung lenh UPDATE da tren field fname th that khong nen chut nao, v ban co the cap nhat tat ca cac field trong table nay. Ban cung co the dung UPDATE e thc hien viec ieu chnh tang lng oi vi nhan vien chang han:
update folks set salary=50000 where salary<50,000 update folks set fname=Vito where fname=don

Lap trinh Web dong voi PHP / MySQL

Page 30

Lenh drop table/drop database


Lenh DROP dung e xoa table hoac ca database. Nen nh mot ieu la mot khi ban thc hien lenh nay roi th ban khong the khoi phuc lai d lieu cua ban. Hay can trong!
drop table table_name drop database database_name

Lenh DROP TABLE c chuyen oi sang PHP thong qua ham mysqlquery(). Neu ban muon xoa database trong PHP, ban can s dung ham mysql_drop_db(). Se c trnh bay can ke cac phan sau!

Lenh show tables

e trnh bay mot danh sach cac table co trong database, ban s dung lenh SHOW TABLES. e thc hien c lenh nay ban nen lu y la phai chon database trc a bang lenh USE DATABASE Hnh sau la ket qua cua viec thc hien lenh SHOW TABLES t dau nhac lenh.
Lenh Show table Trong PHP, ban co the cho hien th mot danh sach table bang cach s dung ham MYSQL_LIST_TABLES():

<? mysql_connect(localhost, root, ); $result = mysql_list_tables(test); while($row = mysql_fetch_array($result)) { echo $row[0] . <br>\n; } ?>

Cac lenh cho ket qua giong nhau. Bay gi ban hay dung lenh CREATE a hoc e tao mot table sau o dung mot trong hai lenh tren e cho hien th cac field cua no:
create table topics ( topic_id integer not null auto_increment primary key, parent_id integer default 0 not null, root_id integer default 0, name varchar(255), description text null, create_dt timestamp, modify_dt timestamp, author varchar(255) null, author_host varchar(255) null, index my_index(parent_id) )

Lenh show columns /show fields

Hnh sau trnh bay ket qua cua lenh SHOW FIELDS thc hien t dau nhac lenh:
Lenh Show Fields

Lap trinh Web dong voi PHP / MySQL

Page 31

Ban co the cho ra ke qua tng t trong PHP bang cach s dung ham MYSQL_FIELD_NAME(), MYSQL_FIELD_TYPE(), va MYSQL_FIELD_LEN(). Tat ca cac cac ham nay c trnh bay can ke cac phan sau.

$db = mysql_connect(localhost,root, ) or die (Could not connect to localhost); mysql_select_db(test, $db) or die (Could not find test); $db_name =topics; $query = select * from $db_name; $result = mysql_query($query); $num_fields = mysql_num_fields($result); //create table header echo <table border = 1>; echo <tr>; for ($i=0; $i<$num_fields; $i++) { echo <th>; echo mysql_field_name ($result, $i); echo </th>; } echo </tr>; //end table header //create table body echo <tr>; for ($i=0; $i<$num_fields; $i++) { echo <td valign = top>; echo mysql_field_type ($result, $i) . <br> \n; echo ( . mysql_field_len ($result, $i) . )<br> \n; echo mysql_field_flags ($result, $i) . <br> \n; echo </td>; } echo </tr>; //end table body echo </table>;

S dung phpMyAdmin
Toi khong loai tr trng hp ban la tn au cua DAU NHAC LENH. Co kha nang la ban khong thch GIAO DIEN O HOA v co the ban cho rang giao dien nay danh cho nhng tay m ma thoi. Nhng toi khuyen ban rang ban hay tap lam viec vi GIAO DIEN O HOA. Ban than toi xuat than t thi dau nhac co lo, va co the noi neu nh nham mat toi van go c tat ca cac ky t tren phm nhanh hn ca viec nhn e go chung. Tuy nhien, tri phu cho ban oi mat ban hay biet hng thu kha nang cua no ng nen bo qua! Va toi cung vay! c vay th chung ta hay bat tay vao viec s dung chng trnh phpMyAdmin. ay la chng trnh co giao dien o hoa ho tr moi truy cap tren CSDL MySQL. Neu nh ban cha co th hay chay ra cac ca hang ngoai Bui Th Xuan hay Ton That Tung kiem ngay mot a i. Khong thoi th download tren cac website phpMyAdmin. Chng

Lap trinh Web dong voi PHP / MySQL

Page 32

trnh nay rat de s dung. Neu nh ban cam thay kho th hay xem phan Phu Luc cua quyen sach, toi co hng dan chi tiet trong o.
phpMyAdmin

Lap trinh Web dong voi PHP / MySQL

Page 33

Tom tat

Trong chng nay ban a tm hieu tat ca cac lenh can thiet e tao va thao tac vi CSDL trong moi trng MySQL. Ban a biet muc ch cua index. Biet cac kieu d lieu va muc ch s dung theo tuy trng hp. Ngoai ra toi cung gii thieu mot chng trnh quan ly CSDL co giao dien o hoa phpMyAdmin giup ban thao tac thu cong tren CSDL mot cach de dang. Trong phan III va IV ban se tm hieu ky hn va thc hien nhng ng dung quan trong cua CSDL trong chng trnh. (Con Lu y: Ban co the tm thay cac CD thiet ke web PHP tai cac ca hang CD (Ton That Tung, tp.HCM chang han). Tren CD co trnh cai at Apache, PHP, MySQL thong dung la FOX. Ngoai ra con co cac Website PHP mau. CAC LENH BAI HOC TREN TOT NHAT BAN NEN GO LAI, KHONG NEN COPY!
tongphuockhai@mail15.com - Kien thc la kho bau khong phai cua rieng ai. V vay ban ng ngan ngai khi chia se cho moi ngi.

tiep)

Lap trinh Web dong voi PHP / MySQL

Page 34

LAP TRNH W EB NG VI

PHP / MySQL
GUESTBOOK CATALOG FORUM SHOPPING CART

PHAN 3

Tong Phc Khai (tong hp & bien dch)

BIEN (variables)
va cac phep x ly tren bien

PHP

1- Bien va cach s dung Bien 2- X ly d lieu t FORM 3- Tm hieu sau hn ve Bien

Ban oc than men, Va qua toi a soan xong phan 1 va phan 2 cua giao trnh t hoc PHP/MySQL. Toi a nhan c email cua nhng ban quan tam, ch i phan 3 cua giao trnh nay. ang le phan 3 a cho ra i sm nhng v ban ron qua nhieu cong viec (hien toi ang phu trach va co rat nhieu cong viec trong nhom Hanosoft - software Han Nom) nen viec bien soan sach t hoc nay t nhieu b tr hoan. Do hoan canh tren, chac chan cong viec bien soan nay khong tranh c nhng sai sot. Nhng du sao i na, biet c cac ban co the ap dung giao trnh nay vao thc te th toi phan nao cung lay o lam s khch le cho rieng mnh. ung ly ra phan 3 nay la danh tron cho viec noi ve ngon ng SQL nhng phan 2 a ban ve CSDL roi, neu phan nay neu cung ban ve no th co ve hi nham phai khong cac ban? Vi y ngh nay toi a danh tron phan 3 e noi ve bien trong PHP. Han nhien toi biet mot so ban mong moi nhng g trong ay co the ap dung lien th chan hn. Nhng theo toi ngh trc tien het ban can phai nam ro moi ngoc ngach cua PHP va MySQL th mi co the thiet ke c nhng chng trnh at tieu chuan. Do vay mong cac ban hay kien nhan khi oc nhng chng hng dan suong nh the nay! ng nan long va nen ghi nh ay la coi re cho cac ng dung thc te cua cac ban. e bat au chng nay t nhat ban cung phai co chut nh kien thc ve C S Lap Trnh. Toi ngh neu ban a hoc qua mot khoa lap trnh can ban th ban co the hieu c. Neu khong, oi hoi ban can phai ong nao hoac tm toi hi nhieu. Nao, chung ta bat au i thoi! PHP x ly cac bien rat linh ong. No co the nhan biet c kieu cua bien va lam cho cu phap Lap trinh Web dong voi PHP / MySQL Page 35

cau lenh n gian hn. Ai a tng lap trnh vi C, Java hoac Perl se cam thay rat de dang khi s dung PHP. Tuy nhien viec de dai nay cung gay ra mot so tr ngai nhat nh. Tat ca nhng bien khai bao trong PHP eu c bat au vi dau o la ($). Du cho bien cua ban kieu chuoi, nguyen hay thap phan hoac tham ch la mang th chung khong co g khac biet nhau. PHP ch theo doi d lieu cha trong bien thay oi nh the nao thoi. Noi chung, khi lam viec vi PHP ban se quan tam en 3 v tr khac nhau cua bien o la: (1) khai bao ngay trong ma lenh PHP, (2) chuyen tiep t mot trang HTML hoac (3) la bien san co trong cua he thong PHP.
Chung ta se tm hieu ve tng loai tren phan tiep theo. Nen lu y rang bien cung co the c chuyen tiep t cac ni khac nh t cac URL hoac t cac SESSION.

Gan bien trong mot Script

Ban khong can phai khai bao EXPLICIT cho bien nh trong mot so ngon ng khac. Ch can khai bao ten bien la no se san sang lam viec. Ban hay xet cac v du sau e hieu cach khai bao bien trong PHP uyen chuyen nh the nao: $a = "Toi thich hoc PHP"; //day la bien chuoi $b = 4; //day la bien so $c = 4.837; //day la bien so thuc $d = "2"; //day cung la bien chuoi
e y rang dau = la dau dung e gan. Con khi thc hien phep so sanh bang th ban dung hai dau bang (= = ). V du: IF ($x= =1)

PHP rat thong minh trong viec bien oi kieu. V du, ban thc hien phep cong mot so nguyen vi mot chuoi cha ky t so (trong v du tren la $b va $d). $a = "Toi thich hoc PHP"; //day la bien chuoi $b = 4; //day la bien so $c = 4.837; //day la bien so thuc $d = "2"; //day cung la bien chuoi $e = $b + $d; echo $e; PHP se nhan ra rang ban muon xem chuoi trong $d (chuoi "2") nh la mot so nguyen. The la no se hoan chuyen sang tr nguyen va thc hien phep toan cong cho ra ket qua la $e = 6. Ngoai ra, PHP con co the hieu c cac chuoi va so va ch nh v du sau: $a = 2; $b = "2 con heo con"; $c = $a + $b; Ket qua cho ra la $c = 4. Neu mot so nguyen hay thap phan ng v tr au mot chuoi th PHP co the hieu c nh v du tren. Tng t, PHP thc hien tng t oi vi cac kieu so khac nhau: $f = 2; //$f la mot so nguyen $g = 1.444; // $g la mot so thuc $f = $f + $g; //$f tu bien doi thanh so thuc Viec x ly nay that la hay, nhng no co the dan en mot so rac roi o la se co nhng luc ban khong biet tai thi iem nao ban se lam viec vi kieu cua bien la kieu g. Toi se trnh bay trong phan Kiem Tra Bien.

Qui nh ve chuoi

Trong cac v du tren, ban thay tat ca cac chuoi eu c bao trong dau nhay oi. Co hai cach khac e ban the hien mot cho PHP hieu o la chuoi. Trong mot chuoi ma ban a bao lai bang cap nhay oi "...", xong ban chen mot bien vao gia, th PHP van hieu c bien o. V du: $my_name = "Jay";

Lap trinh Web dong voi PHP / MySQL

Page 36

$phrase = "Hello, my name is, $my_name"; echo $phrase; Ket qua cho ra la: Hello, my name is, Jay. That khac thng phai khong cac ban?! (ang le ra dau nhay " th hai phai sau ch is roi at mot dau cong chuoi vi bien $my_name) Trong trng hp sau ay, toi muon xuat ra mot chuoi: Toi ang ky hosting het $20 th phai lam sao? Bi v trong chuoi nay co cha $, ieu nay se lam cho PHP hieu o la mot bien mi. Chung ta xem cach giai quyet nh sau: Neu nh trong chuoi ban muon co cha cac ky t ac biet nh: dau nhay oi "", dau slash \, dau o la $ , ban phai s dung en ky t chuyen (goi la dau escape) o la dau slash (\).
Toi quen oc dau / la "dau suyet trai" va \ la "dau suyet phai".

Gia s, e xuat ra man hnh mot dong ch: <form action="mypage.php" method="get">, nh ban thay trong o cha ti 4 dau nhay oi - thuoc dang ky t ac biet. Ta phai s dung ti 4 dau suyet phai nh sau: echo "<form action=\"mypage.php\" method=\"get\">"; Th en khi chay chng trnh mi mong cho ra ket qua nh mong muon. Tac dung cua dau nhay n oi vi PHP: Ban se thay dau nhay n trong PHP co tac dung hn dau nhay oi nh the nao! Neu chuoi cua ban co cha cac bien (bat au bang $), ban bao lai bang dau nhay n th bien o se b bien thanh chuoi luon, ch khong c hieu la mot bien nh cach bao bang dau nhay oi: $my_name = "Jay"; echo Hello, my name is, $my_name; Ket qua cho ra la Hello, my name is, $my_name ch khong phai Hello, my name is Jay. Cuoi cung, trong PHP4 ban co the s dung dau Here Documents. ay la mot loai ky hieu tng t hai loai nhay n va nhay oi. Trong mot so trng hp khi s dung no ban se cam thay rat tien li. Here Docs xac nh gii han au chuoi vi 3 dau nho hn <<< va ky hieu nhan dang (trong sach nay toi s dung ky hieu nhan dang EOQ) Chuoi c ket thuc cung vi ky hieu nhan dang nh vay va kem theo la dau cham phay (;). Sau ay la v du chuoi Toi thich hoc PHP c gan cho bien $mystring c xac nh bang cach s dung Here Doc. $my_string = <<<EOQ Toi thich hoc PHP. EOQ; S dung Here Doc, cac bien se ch anh hng trong chuoi cho nen khi the hien dau nhay oi trong chuoi th khong can s dng dau escape. $element = <<<EOQ <textarea name="$name" cols="$cols" rows="$rows" wrap="$wrap">$value</textarea> EOQ; Nh v du tren cac ban thay khong can phai hao ph nhieu dau suyet (\), chung ta van co the co c mot chuoi cha cac ky hieu dang bien khong co tam anh hng ra ben ngoai. Cac phan t mang s dung khoa lien hp (ban se tm hieu phan tiep theo) khong the s dung Here Doc c. V du sau ay se xuat hien loi: $array = array ("fname"=>"jay", "lname"=>"greenspan"); $str = <<<EOQ print my string $array["fname"] EOQ;

Mang (array) trong PHP

Mang la mot dang cua bien trong o co cha nhieu gia tr. V du mot dang n gian cua mang la thang: $thang = array("Gieng", "Hai", "Ba", "Bon", "Nam", "Sau", "Bay", "Tam", "Chin", "Muoi", "Muoi Mot", "Muoi Hai"); Lap trinh Web dong voi PHP / MySQL Page 37

Mang nay co cha 12 phan t, va ban co the nh v chung bang th t trong mang, bat au bang v tr 0. Do o lenh echo $thang[0] se cho ra la Gieng va echo $thang[11] se cho ra Muoi Hai. e truy xuat c tat ca cac phan t trong mang, ban co the tnh ra chieu dai cua mang va thc hien vong lap: for ($i=0; $i<count($months); $i++) { echo $thang[$i] . "<br>\n" ; } Chi tiet ve vong lap se c trnh bay cac phan sau. Ban co the gan gia tr vao mang vi mot phep toan n gian nh sau: $dogs = array(); $dogs[0] = "kiki"; $dogs[1] = "lulu"; Neu ban khong xac nh ch so ben trong ngoac vuong th gia tr se c gan cho phan t cuoi mang. Trong v du sau "nana se c gan vao $dogs[2]: $dogs[] = "nana";

Mang lien hp

Cung giong nh cac ngon ng khac, PHP tan dung kha nang cua mang lien hp (associative array). Co the ban cam thay mi me vi khai niem nay. e toi noi s qua mot chut: Moi phan t trong mang lien hp mang khoa(key) rieng. Cac phan t cua mang se c truy cap thong qua khoa. ieu nay giong nh cach thc truy xuat trong cac query khi lam viec vi Database. Trong v du sau, ban se thay cac phan t first_name, last_name, e-mail s dung cac key: $person = array ( "first_name" => "Jay", "last_name" => "Greenspan", "e-mail" => "jgreen_1@yahoo.com" ); Neu nh ban muon them phan t vao mang, ban co the gan tiep mot gia tr khac. Dong lenh sau se them mot so nguyen vao trong mang, do o mang nay se cha tat ca 4 phan t. $person["age"] = 32; Neu ban muon truy cap ca khoa va gia tr cua mot mang lien hp, ban se dung list() = each() nh sau: while (list($key, $value) = each($person)) { echo "<b>key :</b> $key, value = $value <br>\n"; } Cac chng sau nay toi se noi ky ve list() = each() mot cach chi tiet hn. Tren c ban each() truy xuat c ca khoa va gia tr cua phan t trong mang. List() gi cac gia tr va gan vao $key va $value. Tien trnh nay tiep tuc cho en khi moi phan t trong mang c truy cap. Neu ban muon duyet qua het mang ban can phai s dung reset($person). Neu ban ch muon s dung gia tr cua phan t trong mang ma thoi hoac ban muon s dung mang khong lien lp va van muon s dung cau truc list()=each() ban phai thc hien nh sau: while (list( , $value) = each($person)) { echo "value = $value <br>\n"; } Hoac ban ch muon truy xuat khoa, ban se lam nh sau: while (list($key) = each($person)) { echo "key = $key <br>\n"; }

Lap trinh Web dong voi PHP / MySQL

Page 38

Hay nhan nh ve mang trong PHP nh sau: - Tat ca cac mang trong PHP eu la mang lien hp. Tai v sao? Bi v nhng mang khong phai la lien hp th PHP cung se t ong gan cho chung cac key. V du: $x= array ("pug", "poodle"), PHP se t gan cho $x cac khoa la cac con so nguyen theo th t bat au t so 0. Ban se c tm hieu ky chng 6.

Mng a chiu

PHP cung ho tr mang a chieu. Mang a chieu thng s dung nhat o la mang hai chieu. Chung cha thong tin da tren hai khoa. Gia s, neu chung ta cha thong tin hai ngi tr len th mang hai chieu se ho tr viec nay rat tot. Chung ta se xac lap mot mang $people. Trong mang $people lai cha mang cho tng ca nhan: $people = array ( "khai" => array ("ho_lot" => "tongphuoc", "tuoi" => 30), "minh" => array ("ho_lot" => "leanh" , "tuoi" => 52) ); Ta thay $people cha cac thong tin cua 2 ngi, Khai va Minh. e truy cap mot tr trong bat ky thong tin cua ca nhan nao ban se phai dung ca hai khoa. V du e truy xuat tuoi cua Minh ban se thc hien lenh nh sau: echo $people["minh"]["tuoi"]; Ban co the truy cap tat ca cac phan t trong mang hai chieu bang cach s dung vong lap tren ca hai chieu cua mang: while(list($person, $person_array) = each($people)) { echo "<b>Ban biet gi ve $person</b><br>\n"; while(list($person_attribute, $value) = each($person_array)) { echo "$person_attribute = $value<br>\n"; } }

Bien gan t trnh duyet (web browser)


Quan iem chung cua viec s dung PHP cung nh cac ngon ng khac la cung cap kha nang nhap thong tin theo y muon cua khach. Thong thng cac thong tin nay c nhap vao thong qua mot form HTML. Nhng cung co the chung xuat phat t cac nguon khac nh: HTML, cookie, session.

Bien t Form cua HTML


Dang thong thng nhat e khach co the nhap thong tin rieng la thong qua mot form HTML. Trong phan phu luc A co trnh bay chi tiet ve cac tao mot form HTML. Neu ban cha biet g ve cach tao form nay th hay oc phan phu luc. Ban hay tao trang sign.php ch cha 100% ma lenh HTML nh sau (co the at la sign.htm cung c): <form action=mypage.php action=post> <input type=text name=email> <input type=text name=first_name> <input type=submit name=submit value=OK> <input type=submit name=reset value=Cancel> </form> Mot khi khach nhap chuot vao nut SUBMIT (chap nhan) th cac bien nh $email, $first_name, va $submit se c chuyen giao sang trang action la mypage.php. Sau o, trong trang mypage.php ban se x ly cac bien nay tuy thuoc vao muc ch chng trnh. e y rang phan ln cac ng dung trong sach nay eu s dung gia tr cua nut lenh SUBMIT. Trong trang mypage.php ban phai viet cac lenh e x cac thao tac cua ngi truy cap. Ban hay xem cach x ly trong trang mypage.php mau nh sau:

Lap trinh Web dong voi PHP / MySQL

Page 39

<?php if (isset($submit) && $submit=="OK") { echo "Cam on ban da gui thong tin cho chung toi."; } else { ?> <form action=mypage.php action=post> <input type=text name=email> <input type=text name=first_name> <input type=submit name=submit value=OK> <input type=submit name=reset value=Cancel> </form> <?php } ?> Ban hay xem ky v du tren, neu nh ngi truy cap nhap u thong tin va nhan nut OK t trang sign.php (cha toan ma lenh html), th no chuyen sang trang mypage.php va xuat ra dong thong bao: Cam on ban da gui thong tin cho chung toi. Ngc lai, neu nh nhan nut Cancel th no se thc hien ma lenh trong lenh Else va se hien th form e buoc nhap lai. Chu y: Ban hay xem lai cach thc submit trong v du GuestBook tap mot. Trong tap 1, neu ban khong chon Submit th chng trnh se goi lai trang sign.php la trang cha Form nhap lieu bang lenh include. Con ay khong goi lai trang sign.php na, bi v chung ta lam theo kieu khac la gan Form nhap lieu ngay trong file Action la mypage.php. Cac bien cung co the c truy xuat thong qua mang $HTTP_POST_VARS hoac $HTTP_GET_VARS, da vao method s dung trong form cua ban. Viec nay rat thuan tien, neu cac bien t cac forms co the mang cung ten vi bien trong script cua ban, hoac neu ban co cac bien cha nh ngha c chuyen giao th ban se tm c o. Ban co the truy cap bat ky phan t rieng biet nao nh a lam trong mang lien hp ($HTTP_POST_VARS["e-mail"]). Hoac ban co the tao vong lap duyet qua tat ca cac phan t cua mang: while (list($key, $value) = each($HTTP_POST_VARS)) { echo "variable = $key value = $value <br>"; }

Truyen mang

Co nhng trng hp khi viec chuyen giao bien khong the thc hien c. V du nh khi ban chon ca hai gia tr cho cung mot bien. Viec nay thng xay ra khi lam viec vi form co cha listbox va co the la ban se gi phm Ctrl e chon phan t th 2 trong list. Ta giai quyet bang cach s dung phep truyen mang. Cac lenh c s dung nh sau: <form action ="mypage.php" method="post"> <select name="j_names[]" size=4 multiple> <option value="2">John <option value="3">Jay <option value="4">Jackie <option value="5">Jordan <option value="6">Julia </select> <input type="submit" value="submit"> </form> e y rang trong trong lenh cau lenh select name, toi s dung dau ngoac vuong e bao PHP biet rang ay la mot mang. Neu khong s dung dau [ ] th se co ti 2 gia tr gan cho cung mot bien.

Lap trinh Web dong voi PHP / MySQL

Page 40

Mot khi c SUBMIT ban co the truy cap mang nh sau: if (is_array($j_names)) { echo "<b>the select values are:<br> <br>"; while(list($key, $value) = each($j_names)) { echo $value . "<br>\n"; } } Viec truyen mang rat thong dung khi ban Submit Form co mot loat cac checkbox (ten cac mat hang chang han). Khach truy cap co the se nhap chuot vao nhieu checkbox hoac khong co checkbox nao. Trong chng 8, co v du cho phep ngi quan tr co the s dung checkbox e chon va xoa cac phan t. Mang c chuyen giao t form co the co khoa lien hp, ngay ca oi vi mang nhieu chieu. Ten cua phan t form thng co ten la name = "array_name[element_name]". Hoac oi vi mang nhieu chieu la array_name[element_name] [subelement_name]".

Cookies

Cookie la nhng file nho cha mot so cac thong tin truy cap Web. Cac cookie do Websever phat sinh, lu gi lai, sau o se c oc nhng lan truy cap ve sau. Cookie n thuan ch la thong tin ghi nhan lai nhng ong tac truy cap web cua khach. Khi ton tai tren a cng, cookie tr thanh cac thnh cau cua giao thc HTTP, c gi en Webserver. e co the phat sinh mot cookie ban can phai s dung ham setcookie() nh sau: setcookie(name, value, time_to_expire, path, domain, security setting); Chung ta se tm hieu chi tiet ve cookie chng 6. Con bay gi ban tm hieu s lc cac chc nang thong qua mot v du: setcookie("my_cookie", "my_id",time()+(60*60*24*30),"/",".mydomain.com", 0) Lenh tren se phat sinh mot cookie vi cac chc nang sau: - Cha mot bien ten la my_cookie - Gia tr cua mycookie my_id - Cookie ton tai trong vong 30 ngay ke t ngay no phat sinh (time()+(30*24*60*60) ngay gi hien tai + 30 ngay c quy ra giay). - Cookie co tac dung en tat ca cac trang trong domain. Ban co the han che lai bang cac ch ra ng dan en mot so trang nao o trong domain. - No se hien dien trong tat ca cac website co a ch http://mydomain.com - Khong co xac lap ac biet nao ve bao mat. Mot khi cookie c xac lap, cac bien phat sinh t cookie co tac dung giong nh bien phat sinh t form ma chung ta a ban trc ay. Chung se hien dien vi chc nang la bien global. Sau khi script PHP xac lap cookie, cac script khac trong domain co the truy cap cookie mot cach t ong. Neu nh ban muon can than hn e $mycookie khong xung ot vi mot bien nao khac cung co ten $mycookie, ban co the truy xuat no thong qua mang HTTP_COOKIE_VARS va s dung lenh: HTTP_COOKIE_VARS["mycookie"]. Ban co the xac lap cookie cung cap kha nang truy xuat nh la mot mang: setcookie("mycookie[first]","dddd",time()+2592000,"/","192.168.1. 1", 0); Lap trinh Web dong voi PHP / MySQL Page 41

setcookie("mycookie[second]","my_second_id",time()+2592000,"/","1 92.168.1.1", 0); Ca hai bien tren eu co the truy cap en nh la mot mang lien hp.

Sessions
PHP4 cung giong nh ASP va ColdFusion eu co ho tr session, viec nay giup ch rat nhieu cho viec truy cap web. Vay session la g? n gian no ch la mot cach thc e duy tr va truyen bien trong khi chuyen tiep gia cac trang web. Chng trnh cua ban khai bao mot session c bat au vi ham start_session(). PHP ang ky mot SesssionID duy nhat, va thng th ID nay c gi en user thong qua mot cookie. PHP sau o tao mot tap tin tren server e theo doi s thay oi cua bien. Tap tin nay co ten giong nh ten cua SessionID. Mot khi session c tao, ban co the ang ky bat ky so lng bien. Cac gia tr cua nhng bien nay c lu gi trong tap tin tren server. Cung nh s ton tai cua cookie, cac bien trong session se hien dien tren bat ky trang nao c truy cap en trong pham vi mot domain. Viec xac lap nay rat thuan tien hn la chuyen tiep cac bien t trang nay sang trang khac thong qua cac phan t an trong form hay cookie. Session noi chung la kha n gian. Hay xem script sau se ang ky mot bien session ten la $my_var, va se gan cho no mot gia tr la "hello world". <? session_start(); session_register("my_var"); $my_var = "hello world"; ?> Tren nhng trang tiep theo bien $my_var se hien dien, nhng ch sau khi ban chay ham sesssion_start(). Ham nay bao PHP tm kiem mot session xem co ton tai hay khong, roi lam cho cac bien session tr thanh global. No co the s dung cau lenh IF e lam cho cac bien session hoan toan co the truy cap c. Hay xem xet v du sau: <?php session_start(); session_register("your_name"); //check to see if $your name contains anything if(!empty($your_name)) { echo "I already know your name, $your_name"; } //this portion will probaby run the first time to //this page. elseif(empty($your_name) && !isset($submit)) { echo "<form name=myform method=post action=$PHP_SELF> <input type=text name=first_name> first name<br> <input type=text name=last_name> last name<br> <input type=submit name=submit value=submit> </form>"; //if the form has been submitted, this portion will //run and make an assignment to $your_name. } elseif (isset($submit) && empty($your_name)) { $your_name = $first_name . " " . $last_name; echo "Thank you, $your_name"; } Sau khi chay chng trnh nay, chon refresh tren trnh duyet. Ban se thay script se nh c

Lap trinh Web dong voi PHP / MySQL

Page 42

rang ban la ai. Cac ham setcookie() va session_start() nen v tr gan au tap tin. Neu ban th chuyen en trnh duyet trc e xac lap mot cookie ban se nhan c mot thong bao loi.

Bien san co

Co rat nhieu bien san co cua PHP va Server. Ban co the liet ke mot danh sach ay u bang cach s dung lenh phpinfo() e xem. Ban hay tao mot file php va cho chay th xem: <?php phpinfo(); ?> Ban co the s dung cac bien nay bang nhieu cach thc khac nhau. Toi se trnh bay mot sau ngay sau ay, va se ch ra ban nen dung vao trng hp nao. Mot so bien en t PHP engine, mot so khac bat nguon t Webserver.

Bien san co cua PHP


PHP_SELF
Bien nay nhan gia tr la a ch hien tai cua tap tin .php ang c duyet. a ch nay se la a ch ay u t goc (bat au t http://) . Ban se s dung no khi muon truy cap lai chnh trang web ang thi thanh. Xet v du sau, ay la mot form tng t nh form sign.php ma cac ban a co dp xet qua. Neu khach thc hien thao tac khac vi submit th chnh form nay se c thi hanh lai: <? if(isset($submit)) { //Xuat ra thong bao tai day echo "Cam on ban da submit"; } else { ?> <form name=myform method=post action=<?=$PHP_SELF?>> <input type=text name=first_name> first name<br> <input type=text name=last_name> last name<br> <input type=submit name=submit value=submit> </form> <? } ?>

HTTP_POST_VARS
ay la mot mang cha tat ca cac bien c chuyen tiep thong qua POST method t mot form. Ban co the truy cap tng bien rieng re nh la mot phan t cua mang lien hp (v du: $PHP_POST_VARS["myname"]).

HTTP_GET_VARS

ay la mot mang cha tat ca cac bien c chuyen tiep thong qua GET method. Ban co the truy cap tng bien rieng re nh la mot phan t cua mang lien hp (v du: $PHP_GET_VARS["myname"]).

HTTP_COOKIE_VARS

Tat ca cac cookie chuyen en trnh duyet eu co the c truy xuat trong mang lien hp nay. No bao gom ca session cookie. Neu ban con thac mac cookie se thi hanh nh the nao th hay xem ham phpinfo() e biet c trnh duyet cua ban ang chuyen en server nhng g.

BIEN CUA APACHE


Lap trinh Web dong voi PHP / MySQL Page 43

Apache co san rat nhieu bien. Toi khong trnh bay ay u tat ca cac bien ra ay. Cac bien ban s dung, chung tuy thuoc vao xac lap hien tai cua ban nh the nao. Sau ay la mot so bien ma co le ban se s dung thng xuyen trong chng trnh cua ban.

DOCUMENT_ROOT

Bien nay tra ve ng dan cua Webserver. Bien nay c toi s dung trong xuyen suot quyen sach nay. Hay xet v du sau: include"$DOCUMENT_ROOT/book/functions/charset.php"; Bang cach s dung bien DOCUMENT_ROOT thay v dung ng dan tuyet oi, chung ta co the di chuyen toan bo mot th muc sang mot Apache Server khac ma khong lo lang rang ng dan se b sai lech trong include path. Nen nh rang neu nh ban khong s dung Apache Server th bien nay khong s dung c. Neu ban s dung include_path trong tap tin php.ini, ban khong can phai lo lang phai xac nh ng dan nh the nao bi v PHP se duyet het tat ca cac th muc va tm ra tap tin ban a ch nh.

HTTP_USER_AGENT

Bat ky ai a tng thiet ket Web site eu hieu rang tam quan trong cua viec nhan dang c trnh duyet cua ngi s dung la g. Mot so trnh duyet th khong s dung c JavaScript, mot so khac th oi hoi dang HTML n gian. Bien user_agent cung cap cho ban kha nang uyen chuyen oi vi tng trnh duyet khac nhau. Mot user_agent chuan co dang nh the nay: Mozilla/4.0 (compatible; MSIE 5.01; Windows 98) Neu ban phan tch chuoi nay ra ban se biet c nhng g ban can tm. Co the ban ch thch ham get_browser() cua PHP. Ve ly thuyet ma noi, ham nay nh ngha kha nang cho phep cua trnh duyet cua user ang s dung. Cho nen ban co the biet c la chng trnh cua ban ang phuc vu tot hay khong. Cac sach PHP co nhng hng dan ve cach cai at va s dung get_browser(), nhng toi khuyen ban khong nen s dung no. Bi v s dung get_browse ban se c bao rang IE 5 dung cho PC va Netscape 4.01 dung cho Mac co ho tr CSS (cascading stylesheets) va JavaScript. Nhng bat ky ngi s dung nao cung biet rang: viet lenh DHTML e chay tren ca hai moi trng trnh duyet nay la mot cong viec phc tap. Thong tin ban nhan c t get_browser() co the dan en nhng tnh nang gia trong bao mat. Cach tot nhat la ban s dung HTTP_USER_AGENT va thc hien quyet nh cua mnh da tren trnh duyet hoac platform xac nh nao o.

REMOTE_ADDR

Dung e lay a ch IP cua user. Tuy nhien co nhng user am hieu chuyen nay va co the ho thay oi IP cua may mnh. Cho nen khong lay g e am bao rang: mot a ch IP chan chan la cua mot user nao o. Ban s dung bien nay e theo doi s truy nhap cua mot user nhng no ch mang tnh tng oi thoi.

REQUEST_URI

Bien nay cung giong nh bien PHP_SELF. Ngoai ra no con cha them tham so trong a ch truy van . Neu ban truy cap vao a ch: http://www.mydomain.com/info/products/index.php?id=6 Th bien REQUEST_URI cua ban co gia tr la: info/products/index.php?id=6

SCRIPT_FILENAME
Bien nay cha toan bo ng dan cua tap tin.

Kiem tra bien


tren chung ta a noi nhieu ve Bien. Nh cac ban biet o, ten cua mot bien khong quan Lap trinh Web dong voi PHP / MySQL Page 44

trong bang gia tr ma no cha trong o. Nh toi a noi Bien trong PHP rat uyen chuyen. ieu nay phat sinh s bat li la ban se khong biet tai mot thi iem nao o th bien nay se mang gia tr g. Do o ban can phai thc hien thao tac kiem tra bien.

isset( )

Ham nay thc hien viec kiem tra bien co cha gia tr hay khong. No se tra ve gia tr TRUE hoac FALSE. Neu bien cha c xac lap th tr isset() se la false. Ban hay xem xet v du sau, no thi hanh mot query MySQL. Ban a biet rang mot field trong database co the cha tr null hoac chuoi rong. Vi viec s dung ham isset() ban se kiem tra va phan biet c hai gia tr tren. Trong oan lenh PHP ben di. Trong o bien $query la mot phat bieu SELECT lay d lieu submit t form cua user. $result = mysql_query($query) or die (mysql_error()); $number_cols = mysql_num_fields($result); echo "<b>query: $query</b><br>\n"; //layout table header echo "<table border = 1>\n"; echo "<tr align=center>\n"; for ($i=0; $i<$number_cols; $i++) { echo "<th>", mysql_field_name($result, $i), "</th>\n"; } echo "</tr>\n";//end table header //layout table body while ($row = mysql_fetch_row($result)) { echo "<tr align=left>\n"; for ($i=0; $i<$number_cols; $i++) { echo "<td>"; if (!isset($row[$i])) //test for null value {echo "NULL";} else {echo $row[$i];} echo "</td>\n"; } echo "</tr>\n"; } echo "</table>"; Lu y rang dau cham than (!) co ngha la phu nh. Tc la neu $var co gia tr null th: isset($var) cho ra gia tr False !isset($var) cho ra gia tr True

empty()

Ham empty() co ve ngc ngao so vi ham isset(). No se cho ra tr True neu $var co tr null, chuoi rong hoac so 0. Ham nay thng c s dung e kiem tra xem user co nhap tr vao trong form hay khong: if(empty($first_name)) { echo "Ban can phai nhap ten cua minh"; Lap trinh Web dong voi PHP / MySQL Page 45

exit; }

is_int( )

Ham nay e kiem tra bien co phai la so nguyen hay khong. Co 2 cu phap khac cho cung ket qua nh no la: is_integer va is_long(). Ban s dung ham nay khi khong chac rang bien la mot tr nguyen hay chuoi. V du: $a = "222"; $b = 22; is_int($a) cho ra tr False is_int($b) cho ra tr True Tng t ban se co mot loat ham kiem tra kieu cua bien sau ay:

is_double()
Kiem tra so kieu double (dau phay ong). Ham thay the: is_float() va is_real().

is_string( ) is_array( ) is_bool( )

Kiem tra kieu chuoi. Kiem tra kieu mang. Kiem tra kieu boolean (TRUE va FALSE)

is_object( ) gettype( )

Kiem tra bien kieu object. Ban se tm hieu kieu object trong cac phan sau. Ham nay se cho ban biet kieu cua bien nh: string, double, integer, array, hoac boolean. Ngoai ra no co tra ve cac kieu nh object, class. Ban se khao sat ky ve viec lap trnh hng oi tng trong cac phan sau e biet them ve object va class. Lu y tr cua han gettype() tra ve luon la mot chuoi: "string", "integer", "double" v.v. Ban hay xem v du sau: $str = "Day la mot chuoi"; $type = gettype($str); if ($type == "string") { echo "Dung vay"; }

oi kieu cua bien


Ban se s dung 3 cach e oi kieu cua bien.

Phng phap type casting

Phng phap nay rat n gian: Ban ch can ghi ten kieu ra, ong ngoac n lai, roi at trc bien. Tc khac bien se b oi theo kieu ma ban muon. Cach thc: (kieu) $bien V du: $a = 1; $b = (string)$a; //so 1 se bien thanh chuoi 1 Lap trinh Web dong voi PHP / MySQL Page 46

echo gettype($a), "<br>\n"; echo gettype($b), "<br>\n"; Ket qua cho ra la: integer string

S dung ham settype( )

Ham nay co 2 oi so. Th nhat la ten bien, th nh la kieu. u iem cua no la no co the cho ra ket qua FALSE neu nh viec hoan oi khong c. Cach thc: settype($bien, "kieu") V du: $a = 1; settype($a, "string");

S dung ham intval( ), doubleval( ), va stringval( )


Phng phap nay thng e ban ap dung nhanh trong khi tnh toan. Co le nhn ten ham ban cung biet c chc nang cua no roi. Hay xet v du sau: $a = "43";/ /43 la kieu chuoi $b = (intval($a) * 2);

Bien cua bien

Nghe qua co ve la la, nhng ay la mot "oc chieu" cua PHP. Vi cach thc nay ban se lay gia tr cua mot bien e hnh thanh ten cua mot bien mi. Cach thc: $$bien V du: $a = khai; $$a = Chao moi nguoi; Ban se thay trong v du tren mot bien mi c hnh thanh o la $khai cha gia tr la "Chao moi nguoi" Xet them v du sau, trong o $tacgia la mot mang lien hp. <? $tacgia = array ("ho"=>"Tong", "ten"=>"Khai"); while (list($field,$value) = each($tacgia)) { $field = "bien_$field"; $$field = $value; } echo $bien_ho, " ", $bien_ten; ?> Khi chay chng trnh, cac bien sau se c tao $bien_ho, $bien_ten va ghi ra man hnh: Tong Khai

Tom tat
Ban a tm hieu cac bien trong PHP. Ban thay PHP x ly cac bien linh hoat hn nhieu so vi cac ngon ng khac. Con mot van e kha quan trong oi vi bien o la scope ban cung se biet ky ve no trong cac phan sau cua giao trnh nay.

(Con tiep)

Lap trinh Web dong voi PHP / MySQL

Page 47

You might also like