Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 152 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
152
Dung lượng
2,54 MB
Nội dung
Th.S: NGUYỄN MINH - LƯƠNG PHÚC nhóm tin học thự c dụng Kỹ thuật thủ thuật lập trình hướng đốì tưỢng P H P Khái niệm, kỹ thuật viết mã ♦ T rọii tậ p hạn có hội cọ x t đ ẻ n ân g cao Icỹ n ăiig lậ p trm li tliôiig q u a việc tliự c h n h s ủ dm iíỊ tín h cao cáp, ch ẳn g h n n h u vấii íiti sd d ứ liệii, MySQỊv, SQỊvite P D O c tia P H P ♦ Với phươiiq p h áp hiíớnQ d ản t n g ví d ụ b n Idiỗnp Iiliửng d ể dàiiíỊ n ắ m b ắ t Id iái mộiTL c ă n b ảii, nâng cao liơii ciiiiẹỊ Iiliit c ách SI^ dxuig côniỊ cxx lậ p trù ili New Edition ciia P H P đ ễ v iế t ch tíớ n g t r ì n h P I Ỉ P că n bảii ^ Mỗi chương cồn có n h iề u b i tậ p tliụ c liảiứá n ià b ạn n ê n làm th e o đ ể n ắm vũnữ, n ộ l dting đtíỢc tr ìn h bày, b ao g è m cài đ ặ t phlui m ề m , c ú p h p ngơn ngiì, c ẩ u trứ c d ữ K ệư ♦ Mà điểm đặc b iệ t ciia sách I>hươiig pliáỊ hướng d ẫ n r ẩ t đơn g iản cỢc kỳ d ề tiế p tìiư NHÀ XƯẤT BẢN HỒNG ĐỨC I v l NÓI ĐẦU B ộ s c h " K j' t l i u ậ t v th ủ t h u ậ t lậ i) tr ìn li liư n g đ ố i tư ợ n íị P H P ” đ ợ c b i ê n so ạn n h ằ m m ụ c đ íc h d n h clio n h ữ n g người m i b ắ t đ ầ ii biíớc c h â n vào t h ế giới c ủ a ng ô n n g ữ lậ p ù i h P H P K h ô n g giống n h n h ữ n g s c h Idiác, s c h n y Id iơ n g đ ị i h ỏ i b n p h ả i h ọ c q u a trư c v ấ n đ ề c ă n b ả n v ề lậ p tr ìn li W eb ha}' sỡ d ữ liệ u M đ iể m đ ặc b i ệ t c ủ a b ộ s c h c h ú ih p h n g p h p h n g d ẫ n r ấ t đ n g iả n v cự c Icỳ d ể tiế p ứ iu T liự c vậy, với p h n g p h p h ng d ẫ n b ằ n g v í d ụ b n s ẽ Id iô n g n h ữ n g d ễ d n g n ắ m b ắ t Id iá i n iệ m c ă n b ả n , m tliồ n g q u a đ ó s ẽ d ầ n trở n ê n q u e n tíiu ộ c với Id iái n iệ m n â n g cao h n c ủ n g n h c c h s d ụ n g cồng c ụ lậ p trìn h củ a P H P đ ể ch n g t r ì n h P H P c ă n b ả n H n n ữ a , với tr ọ n b ộ tậ p b n s ẽ có liộ i cọ x t đ ể n â n g cao k ỷ n ă n g lậ p t r ì n h tliơ n g q \ia việc tliự c lià iili s d ụ jig t í n h n ă n g cao cấ p , c h ẳ n g h n n h v ấ n tin sở d liệ u , M ySQ Ị/, S Q L ite v PD O c ủ a P H P , c c cô n g n g liệ XMIv, c c coolcie, s e s s io n lie a d e r, p liầ n m rộng c ủ a b ô n t h ứ b a S c h có b ố c ụ c rỗ rà n g th e o từ iig ch n g đ ề m ục, b tíớ c h iíớ n g d ẫ n c ụ ứ iể d ễ h ic ii M ỗi cliiíơ ng cịn có n h iề u b i tậ p ứ iự c h n li m b n n ê n m th e o đ ể nắm ^àỈIlg n ộ i d m ig d ợ c tr ì n h b ày , b ao cỊồtn c i đ ặ t p h ầ n n iè in , c ú p h p n g ô ii n g ữ , c ấ u ta*úc đ ữ liệ u , th tíờ n g I x m li đ i c u I d i i t n , c c lià n i c i s ẵ n , v n liiềa i t c Aại liữ íi íc h k h c H y vọng s c h s ẽ n iộ t tà i liệ u h ọ c tậ p h ữ u íc h ch o b n đ ọ c tro n g q u t r ì n h ti-ỏ tlià n h m ộ t c h u y ê n g ia v ề PH P T ấ c g iả C h n g 7: Làm v iệ c vớ i sỏ liệu S Q L PHẨN Làm viêc với liêu từ nguồn khác CbiửJ9ig 7: Làm v iệ c với cá c s d ữ liệu SQL Chươìig &• Làm việc với XML Chương 9: Làm việc với Cookie, Sessiơn, H ea d er Chươĩtg 10: X lý cá c lỗi Chiừýiìg 11: Bảo vệ an toàn PHP Cbươềig 12: M rộng PH P C h n g 7: Làm v iệ c v i sỏ liêu SQL Làm việc với sd liệu vò SQL Những kỹ k h i niêm Ị Ể! Hoc nbiÌỲìg kbái niệm sở d ữ liộn I'à Stnicliired Qiierỵ Langỉiage • Thêm, biên tập, xóa xem record sứ dụng MySQL SQLiie CO' sở ciữ liệit M Tniy tìm record sứ d ũ liệu iĩới PHP • ỉỉiộii lực bóa htli liệu ĩihập Cíta ngííời dũng sang mộ! sở ìiC>ti ì'ới PHP » Viết cbỉỉơtìg trình điền khiền bàng sở đ ữ liệu kbả chìtyển (portable) M ột lý cho th ô n g dụng PH P n h m ột ngôn ngữ v iết script Web hỗ trợ m ột dãy rộng hệ th ố n g liệu quan hệ Sự hỗ trợ làm cho n h p h t triển Web dễ dàng tạo Web site điều k h iển liệu tạo nguyên ứng dụng Web m ột cách n h an h chóng hiệu C h n g : Làm v iệ c với c s ỏ liệu SQL PH P hỗ trợ 15 máy sở liệu khác bao gồm Microsoft SQL Server, IBM DB2, PostgreSQ L, Oracle Cho đến P H P 5, hỗ trợ đă cung cấp qua extension sở iiệu riêng, extension có chức n ăn g tín h n ăn g riên g Tuy nhiên, điều làm cho n h p h t triể n khó th ay đổi từ m ộ t máy sở liệu san g m ột m áy sở đữ liệu khác PH P giải tìn h n ày b ằn g việc giới thiệu m ột API chung cho truy cập sở liệu: extension P H P D ata Objects (PDO), cung cấp m ột giao diện hợp n h ấ t để làm việc với sở Uệu %'à giúp n h p h t triể n xử lý sở liệu k hác n h au cách n h ấ t quán T rong P H P 5.3, extension PDO cải tiến th êm với hỗ trợ cho m áy sở liệu tối ưu h ó a th ê m cho an n in h hiệu suất Đ ể đ t k h ả n ăn g tương thích ngược, extension sở liệu riên g tiếp tục dược hỗ trợ Bởi b ạn thường tự n h ậ n thấy m ình chọn m ột extension riêng m ình (m có th ể n h an h đưa nhiều tín h n àn g hơn) PDO (đưa tín h k h ả chuyển tín h n h ấ t quán qua m áy sở liệu), chương n ày đề cập d ến h tùy chọn; chương giới thiệu PDO th ảo luận h a i sô’ extension riên g th ó n g dụng n h ấ t PHP, extension MySQL Im proved extension SQLite Giới ỉh iệu sở liệu SQL Trong thờ i đại In tern et, th ô n g tin khơng cịn trìn h bày tro n g tủ đựng hồ sơ T hay vào đó, lưu trữ dạng số số tro n g cấc kiểu liệu điện tử vốn "hộp chứa" lưu trữ liệu áp dặt m ột cấu trúc n h ấ t định th ô n g tin Những sở liệu điện tử không chiếm khơng gian v ật lý khơng gian gỗ kim loại tương ứng m chúng chứa đầy công cụ để giúp người dùng lọc truy tìm n h a n h thơng tin sử dụng tiêu chí khac ưhau Cụ th ế hầu h ế t sở liệu điện tử ngày sở liệu quan hệ (relational database) cho p h ép người dùng dịnh nghĩa mối quan hệ b ản g sở liệu khác n h au để tìm kiếm phân tích hiệu H iện có sẵn m ột số lớn hệ thông quản lý sở liệu, m ột số thương m ại m ột số m iễn phí Có lẽ b ạn nghe đến m ột vài hệ th ô n g này: Oracle, M icrosoft Access, My SQL, PostgreSQL N hững hệ th ô n g sở liệu ứng dụng p h ần mềm m ạnh, phong phú tín h n ăn g có k h ả n tổ chức tìm kiếm h àn g triệu record với tốc độ r ấ t cao; chúng dược sử dụng rộng rã i với doanh nghiệp v ăn phòng 10 C h n g 7: Làm việc với cờ s liệu v SQL phủ, thường cho mục đích r ấ t quan trọng Trước vào chi tiế t cụ th ể việc xử lý record sở liệu với P H P , trước tiê n cần p h ải hiểu rõ k h i niệm sở liệu Nếu b n làm quen với sở liệu này, p h ần sau dầy cung cấp m ột n ền tả n g v cho bạn th nghiệm với m ột tập thực tiễn tro n g S tructured Query Language (SQL) Thông tin hữu dụng để hiểu nội dung n â n g cao tro n g p h ần Tìm hiểu cớ sỏ liệu, record, v khóa (Prím a ry Key) Mọi sở liệu gom m ôt nhiều b ản g (table) N hữ ng b ản g n ày tạo cấu trúc liệu th n h h àn g cột, áp đ ặt tổ chủc lên liệu H ình 7.1 m inh h ọ a m ột bảng điển hình Bàng chứỉt sõ’ jiệ'j b án h ãn g oho vỊ !;rj k h ác n h au vt'i hàny record (bản ghi) chứa thòng tin cho m ôt vị rri va n ăm kỉiác Mồi recorđ p h ân chia trở th n h cột field (trường) với trường chứa m ột đoạn thông tin khác Cấu trúc dạng b ản g n ày làm cho dễ tìm kiếm trê n b ản g để tìm record khớp với tiêu chí (criteria) cụ thể: ví dụ, tấ t vị tr í có doanh sơ' lớn $10,000 doanh s ố cho t ấ t vị trí tro n g n ăm 2008 Các record tro n g b ản g không xếp theo b ấ t kỳ th ứ tự cụ th ể chúng có th ể p h ân loại theo thứ tự bảng chữ cái, th eo năm , theo tổng doanh số, theo vị trí theo b ấ t kỳ tiêu chí m b n chọn xác định Do để làm cho dễ n h ậ n dạng m ột record cụ th ể, cần p h ải th ê m m ộ t thuộc tín h n h ận d ạn g n h ấ t vào record chẳng h ạn m ột số serial m ã trìn h tự T rong ví dụ trước, record n h ậ n d ạn g b àn g m ột trường 'record ID' n h ất; trường ảược gọi p rim ary key (khóa chính) clio bảng ỊD Yưíìr Lĩcaiìơìi Sales {ĩ) 2007 ỏdấỉĩiỉi [ W fi •y 8574 2007 Chicaco ì 2007 Washincion 12929 Tị 2007 Ncw York 13636 2007 Lo*; Aiìícles S748 2.sAnkĩcles 12 2008 Ba^ion 4745 Hình 7.1 Một bảng mẫu 11 C h n g 7: Làm v iệ c với sở liệu SQL Thủ thuật M ộ t cách dễ dàng đ ể hiểu khái niệm m ộ t tương dồng H ăy xem m ộ t c sở liệu m ột th viện m ỗi bảng m ột kệ sách bên th viện D o m ột record dại diện diện tử m ột sách trê n m ộ t kệ sách với tựa dề sách khóa record Nếu thiếu tựã đề này, không th ể dễ dàng phân b iệ t m ột sách với m ột cuô'n sách khác (Cách n h ấ t d ể làm điều nàỵ m m ỗi c'n sách kiểm tra nội dung - m ộ t tiế n trình mâ't thời gian mà khóa ch ín h giúp bạn tránh được) M ột bạn đưa thông tin vào m ột bảng, bạn thường muốn sử dụng aó để tr ả lời câu hỏi cụ th ể ■ví dụ, vỊ trí có doanh số lớn $5000 tro n g 2008? N hững câu hỏi gọi query (mẫu truy vấn) k ế t tr ả sở liệu nhằm phản hồi lại query gọi tậ p hợp k ế t (result set) Các query thực th i sử dụng Structured Query Language Tìm hiểu m ối quan hệ khóa ngoại (Poreign Key) Bạn b iết rằ n g m ột sở liệu có th ể chứa nhiều bảng Trong m ột hệ thô ng sở liệu quan hệ, bảng có th ể liên k ết với m ột nhiều trường chung gọi khóa ngoại (foreign key) N hững kh ó a ngoại làm cho có th ể tạo mơ’i quan hệ m ột đô'i (one-to-one) m ột đối nhiều (one-to-many) bảng k hác k ế t hợp liệu từ nhiều b ản g để tạo tậ p hợp k ế t to àn diện Để m inh họa, h ãy xem xét hình 7.2 trìn h bày ba b ản g liên kết G a it t lD H oítoí Crim c Roni;mcc AitỉhorỉD AufỊiorS N ora Rohcrts BnoklD BookNahie j T h c S h io iiự ShuUer ĩslíìnd Piỉỉ SeoiaUưy Tha Overlook Sisters Safc HnrKnír T a n ik Musk* Blood Bix)thers G e tu rỉí) AuỉhorlD i ì ì l l *J 3 Hình 7.2 Các mơi quan hệ bảng 12 C h d n g 7: Làm việc v ò i c d sò liệu SQL H ình 7.2 m in h h ọ a ba bảng, chứa thông tin tá c giả (bảng A), th ể loại (bảng G), sách (bảng B) Các b ản g G B k h đơn giản: chúng chứa m ột d an h sách tê n th ể loại (genre) tá c giả, với record n h ậ n dạng m ột khóa n h ấ t Bỗng B phức tạp hơn: sách tro n g bảng liên k ế t với m ộ t th ể loại cụ th ể khóa genre (từ bảng G) với m ột tác g iả cụ th ể qua khóa author (từ b ản g A) B ăng cách dị th eo khóa đến b ản g nguồn tuơng ứng caa chúng, b ạn có th ể dễ d àn g n h ậ n dạng tác giả th ể loại cho m ộ t sách cụ thể Ví du, cú th ể tliây vằng tựa đề "The Shin.ing" v iết "Stephon ĩliiig" thuộc th ể loại "HoiTOr" Tương tự, b ắ t đầu từ dầu k ia có t}iể th ấ y rằ n g tác giả "M ichael Connelly" viết hai cuôn sách "The Overlook' "Trunk Music" N hững mố.l quaii hệ n(iư thấy ỉiình 7.2 tạo nen néii tản g m ột hệ th ố n g sd dử liệu quan hệ Liẻn k ế t bảng sử dụng khóa ngoại hiệu lựa chọn khác: k h i tạ o m ột b ản g thứ ngoại trừ bồn rửa n h bếp để chứa tấ t thơng tin th o t n h ìn trơ n g tiện lợi, cập n h ậ t m ột b ản g m ột tiến tr ìn h th ủ cóng (và dễ sai sót) để tìm trường hợp m ột giá trị cụ th ể th a y th ế b ằn g m ột giá trị P h â n ch ia th ông tin th n h b ản g độc lập liên k ế t bảng n ày b ằn g k h ó a ngoại bảo đám rằn g m ộ t m ẫu th ô n g tin cụ th ể xuất h iện m ột lầ n m ột lần sở liệu; điều loại bỏ p hần dư thừa, đơn giản hóa th ay đổi (bằng việc cục h ó a chúng sang m ột vị trí) làm cho sô liệu gọn dễ q u ản lý Tiến trìn h hợp lý hóa m ột sd liệu b ằn g việc d in h n g h ĩa thực thi môi quan hệ m ột đôi m ột m ột đôi nhiều b ản g th n h phần gọi chuẩn hóa sớ liẹu (d atab ase norm alization) m ột tá c vụ ch ín h m m ột kỹ sư sở liệu p h ả i đối m ậ t k h i tạo m ột sd liệu T rong tiế n trìn h chuẩn hóa, kỹ sư sở liệu n hận dạng mô'i quan hệ chéo phụ thuộc k hơng xác bảng tối ưu hóa việc tổ chức liệu cho query SQL thực thi với hiệu su ất tối đa Cũng có m ột sơ" dạng chuẩn giúp b ạn te s t p h ạm vi m ột sở liệu chuẩn hóa; dạng chuẩn n ày cung cấp nhữ ng hướng dẫn hữu dụng để giúp bảo đảm việc th iế t k ế sở liệu vừa n h ấ t quán cấu trúc vừa hiệu 140 C h n g 9: Làm việc với C oo kie , S ession, va H eader xem cookie sử dụng cơng cụ cài sẵn Ví dụ, tro n g Mozilla Firefox, b ạn có th ể xem nội dung tấ t cookie xác lậ p tr ê n hệ thóag thơng qua m enu Tools I O ptions ! Privacy I Show Cookies n h m inh họa tro n g h ìn h 9.2 P ro ject 9-1: Saving and R estoríng User P reíerences Set Y our ru ỉịb t P r t í t r t ũ M Nârr.e Seat seỉecbon A u le '" V i n d c w ^ C eo icĩ Menl $eiscb«a VsgíUnân ^NoB-vefleteh» ^ i^iíbebc i ’s ỉ in ỉc re s te ô m ^ c c i a l o B e rỉ o n Cỉuld I7 in Q^4ă)tIIIII ã I i CootMrum* ôôô , , rtvng |_, tecttcỊt ^ -Slt *•» iKMhOK Qj ioc^ioM iKdhMt í Mm ■ — I~ t I , d> M Ũ fẩf>»Jvt9et ired Ị Coiitrit: ramd-tiv«g ' Ị tế ^ Hu«: ÍVKc i0 Hítht; I S e n ổ r o i: A i iv t ) W ị u f (O n re U v ' u p rt* T h j» w , ĩ » w y Ị , £000 3l ^fnpvg Hỏi chuyên gia H ỏ i: C c b iế n s e s s io n c ủ a kh ô ng đ ợc lưu T ô i p h ả i m đ â y? Đ p : N ếu c c b iế n s e s s io n kh ô ng đ ợ c đ ă ng ký m ộ t c ch c h ín h x c , c ó m ộ t s ố kh ả n ă ng bạn cầ n xem x é t trư ó c từ b ỏ v gọi c ả n h s t sessio n : C h o n g 9: Làm v iệ c với C ookie, S ession, H ea d e r 143 » Theo m ặc định, PHP ìidi d ũ liệu session irên sen>er sang thư mục / nnp Tiiy nhiên, bạn sử dụng Microsofl vc^indoios, thư mục s ẽ k h ô n g l ổ n t i I>à c c s c s s io n s ẽ k h ĩì g đ í i ợ c Itữ i m ộ t c c h c b i n b x c D ể g i ả i q iiv ế t đ iể n n v , m f i l e c ấ n h ìn h PH P, p h p in t v b iê n tập biến 'session.sam_ph'đềpbảrì ánh tb tím ụ c tạm hệ thống • Theo tnậc địĩỉh, PHP xác lập cookie trẽn ihống ngỉíời dùng t'ớ i đ ị n h d a n h s e s s io n N ế ti t r i n h d i iy ộ t c ủ a n g ỉ í i d ù n g đĩ(Ợ c x c l ậ p đ ể lử chối tất cookỉe, định danh scssion nàv SẼ khơng đỉíợc xác ỉ ậ p v t h ô n g l i n s e s s io n s ẽ k h ô n g đ i ỉợ c d u y t r ì t t r a n g n y đ ế n t r a n g k h c D ể g i ả i q iiy ổ l đ i ề u n y , ih a v v o đ ó b n c ó ỉ h ể c h u y ể n đ ịn h d a n h s e s s io n tì( tr a n g n v đ ế n tr a n g k h c n h i í m ộ t p h ầ n c ủ a c h u ỗ i URL ( m ặ c d ù d i ề u n v k é m a n t o n b n ) b n g v i ệ c x c l ậ p biến 'session.tise_trans_sid' Jìle cấn hình PỉiP sang tnie u Mọi session PHP có giá trị timeoiit - thời bạn tính bàng giâv s e s s i o n v ẫ n " c ò n s ố n g " tr o n g b a o lă ii n ế u k h ô n g c ó b ấ t ^ h o t đ ộ n g ngicời dùng Trong m ơtsố tncờng bợp giá irỊ timeoni đĩcợc x c lậ p q iiá th ấ p c h o ứ n g d ụ n g d ẫ n đ ế n c c s e s s io n đ u ợ c t ự đ ộ n g b ủ y q u s m B n c ó t h ể đ i ể ỉ i c h ỉ n h g i t r ị H m e o u l n v b n g v iệ c ( b a y đ ổ i b i ế n 's e s s iO ìì.g c _ m a x liJ c tiin e ' tr o n g f i l e c ấ u h ì n h P H P Loại bỏ session biến session Để hủy đ ăn g ký (unregister) m ột biến session cụ th ể, việc hủy xác lập (unset) k ey tương ứng m ảng $_SESSION: N hư b ạn biết, gỏi m ột h ead er HTTP sau k h i sc rip t tạo đẩu xung quanh m ột lỗi Bạn có th ể trá n h lỗi n ày b ằn g việc trước tiê n te s t xem có h ead er đ gởi b ằn g h àm h ead er_ sen t P H P h ay không Xem x ét ví dụ sau m inh họa: