Computer learning center

Những vấn đề chính sẽ được đề cập trong bài học: Giới thiệu PHP Cấu hình IIS, Apache Web Server Cài đặt PHP. o Cài đặt PHP. o Cấu hình ứng dụng PHP Giới thiệu PHP. o PHP Script. o Ghi chú trong PHP o In nội dung bằng PHP 1. GIỚI THIỆU PHP PHP viết tắt của chữ Personal Home Page ra đời năm 1994 do phát minh của Rasmus Lerdorf, và nó tiếp tục được phát triển bởi nhiều cá nhân và tập thể khác, do đó PHP được xem như một sản phẩm của mã nguồn mở. PHP là kịch bản trình chủ (server script) chạy trên phía server (server side) như cách server script khác (asp, jsp, cold fusion). PHP là kịch bản cho phép chúng ta xây dựng ứng dụng web trên mạng internet hay intranet tương tác với mọi cơ sở dữ liệu như mySQL, PostgreSQL, Oracle, SQL Server và Access. Lưu ý rằng, từ phiên bản 4.0 trở về sau mới hỗ trợ session, ngoài ra PHP cũng như Perl là kịch bảng xử lý chuỗi rất mạnh chính vì vậy bạn có thể sử dụng PHP trong những có yêu cầu về xử lý chuỗi. 2. CÀI ĐẶT PHP Cài đặt PHP trên nền Windows thì sử dụng php-4.0.6-Win32.zip, sau khi cài đặt ứng dụng này trên đĩa cứng sẽ xuất hiện thư mục PHP, trong thự mục này sẽ có tập tin php4ts.dll và php.exe cùng với thư mục sessiondata. Ngoài ra, trong thư mục WINDOW hoặc WINNT sẽ xuất hiện tập tin php.ini, tập tin này cho phép bạn cấu hình cho ứng dụng PHP. Chẳng hạn, khi sử dụng session, PHP cần một nơi để lưu trữ chúng, trong tập tin này mặc định là session.save_path = C:\PHP\sessiondata, nếu bạn cài đặt PHP với thư mục PHP trên đĩa D thì bạn cần thay đổi đường dẫn trong khai báo này. Tương tự như vậy, khi có lỗi trong trangPHP thì lỗi thường xuất hiện khi triệu gọi chúng, để che dấu các lỗi này thì bạn cần khai báo display_errors = Off thay vì chúng ở trạng thái display_errors = On. Ngoài ra, trang PHP cũng có thể trình bày một số warning khi chúng phát hiện cú pháp không hợp lý, chính vì vậy để che dấu các warning này thì bạn cũng cần khai báo trạng thái Off thay vì On như assert.warning = Off. 3. CẤU HÌNH ỨNG DỤNG PHP 3.1. Cấu hình IIS Sau khi cài đặt hệ điều hành Windows NT hay 2000 trở về sau, bằng cách khai báo mới một web site hay virtual site trong một site đang có theo các bước như sau: 1. Tạo một thư mục có tên myPHP đề lưu trữ các tập tin PHP 2. Khởi động IIS (tự động khởi động nếu Windows NT/2000)

pdf142 trang | Chia sẻ: banmai | Lượt xem: 1932 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Computer learning center, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
e 'IT%') 6. PHAÙT BIEÅU SQL DAÏNG JOIN Ngoaøi caùc phaùt bieåu SQL vôùi 4 daïng treân, trong phaàn keá tieáp, chuùng toâi trình baøy moät soá phaùt bieåu SQL daïng Select ñeåâ keát noái döõ lieäu giöõa caùc baûng coù quan heä vôùi nhau, nhöõng phaùt bieåu seõ trình baøy trong chöông 5 nhö: ¾ Khaùi nieäm JOIN ¾ Phaùt bieåu INNER JOIN ¾ Phaùt bieåu LEFTJOIN ¾ Phaùt bieåu RIGHT JOIN 6.1. Khaùi nieäm veà quan heä Ñeå phaùt trieån öùng duïng Web baèng baát kyø loaïi cô sôû döõ lieäu naøo, giai ñoaïn phaân tích thieát keá heä thoáng cöïc kyø quan troïng. Neáu keát quaû phaân tích khoâng toái öu thì öùng duïng ñoù khoâng theå ñaït ñöôïc giaù trò kyõ thuaät cuõng nhö giaù trò thöông maïi. Thieát keá cô sôû döõ lieäu khoâng toái öu, chuùng coù theå daãn ñeán vieäc chöông trình chaïy chaäm vaø khoâng beàn vöõng. Moät khi öùng duïng chaïy chaäm ñi do cô sôû döõ lieäu khoâng toái öu thì raát coù theå baïn phaûi thieát keá vaø xaây döïng laïi töø ñaàu toaøn boä caáu truùc cuûa chöông trình vaø cô sôû döõ lieäu. Xuaát phaùt töø lyù do naøy, khi xaây döïng moät öùng duïng thoâng tin quaûn lyù, chuùng ta caàn phaûi qua nhöõng böôùc phaân tích thieát keá heä thoáng kyõ löôõng ñeå coù ñöôïc moâ hình quan heä vaø ERD tröôùc khi ñeán caùc moâ hình chöùc naêng chi tieát. Tuy nhieân, trong lyù thuyeát moät soá kieán thöùc cô baûn baét buoäc baïn phaûi thöïc hieän theo moâ hình heä thoáng öùng vôùi nhöõng quan heä toaøn veïn, nhöng trong thöïc teá, do tính ñaëc thuø cuûa öùng duïng, thöôøng baïn phaûi thieát keá laïi moâ hình theo nhu caàu caân ñoái giöõa ñoä phöùc taïp vaø tính toái öu. Trong öùng duïng baùn haøng qua maïng Test ñaõ trình baøy trong chöông 3, khi quan taâm ñeán moät hôïp ñoàng treân maïng, ngoaøi nhöõng thoâng tin lieân laïc veà khaùch haøng, baïn caàn phaûi löu tröõ döõ lieäu khaùc nhö chieát haøng mua, phöông thöùc traû tieàn, phöông thöùc giao haøng,... Vaán ñeà ñöôïc thaûo luaän ôû ñaây, moãi hôïp ñoàng coù nhì6u maët haøng chi tieát. Trong tröôøng hôïp naøy, chuùng ta coù 6 thöïc theå lieân quan nhö sau, thöïc theå danh muïc Customers (thoâng tin lieân laïc cuûa khaùch haøng), Orders (hôïp ñoàng mua haøng), OrderDetails (chi tieát haøng mua), Items (danh muïc saûn phaåm). Giaùo vieân: Phaïm Höõu Khang COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Sô ñoà 8-1: Moâ hình quan heä Giaû söû raèng khi nhaäp soá lieäu vaøo cô sôû döõ lieäu, öùng vôùi hôïp ñoàng coù maõ 101, cuûa khaùch haøng coù teân Nguyeãn Vaên A, ... coù hai saûn phaåm chi tieát: 11 (Nöôùc ngoït) vaø 32 (xaø phoøng Lux). Trong tröôøng hôïp naøy baïn ñang coù moät maåu tin hôïp ñoàng trong baûng tblCustomers, moät maåu tin hôïp ñoàng trong baûng tblOrders vaø hai maåu tin trong baûng tblOrderDetails. Neáu muoán bieát thoâng tin hôïp ñoàng cuûa khaùch haøng A, roõ raøng baïn caàn duøng phaùt bieåu SELECT vôùi meänh ñeà keát hôïp töø 3 baûng treân. Keát quaû traû veà 2 maåu tin laø söï keát hôïp thoâng tin töø hai baûng tblCustomers, tblOrders vaø tblOrderDetails. Khi thöïc thi phaùt bieåu SQL daïng SELECT öùng vôùi cô sôû döõ lieäu nhö treân baïn phaûi duyeät qua hai maåu tin. Taát nhieân, khi vieát öùng duïng thì ñieàu naøy chaáp nhaän ñöôïc, vaø coù theå coi laø toái öu. Giaû söû raèng, öùng duïng naøy ñöôïc phaùt trieån treân WEB caàn löu taâm ñeán vaán ñeà toái öu toác ñoä truy vaán thì sao? Ngöôøi thieát keá cô sôû döõ lieäu trong tröôøng hôïp naøy phaûi thay ñoåi laïi caáu truùc ñeå taêng toác ñoä truy caäp qua maïng khi xöû lyù treân cô sôû döõ lieäu cuûa ngöôøi duøng. 1 - n 1 - n 1 - n Items Order Details Orders Customers 6.2. Khaùi nieäm veà meänh ñeà JOIN Trong haàu heát phaùt bieåu SELECT, phaàn lôùn keát quaû maø baïn mong muoán laáy veà ñeàu coù lieân quan ñeán moät hoaëc nhieàu baûng khaùc nhau. Trong tröôøng hôïp nhö vaäy, khi truy vaán döõ lieäu baïn caàn söû duïng meänh ñeà JOIN ñeå keát hôïp döõ lieäu treân hai hay nhieàu baûng laïi vôùi nhau. Khi söû duïng JOIN, baïn caàn quan taâm ñeán tröôøng (coät) naøo trong baûng thöù nhaát coù quan heä vôùi tröôøng (coät) naøo trong baûng thöù hai. Neáu moâ hình quan heä cuûa baïn khoâng toái öu hay khoâng ñuùng, quaûn trình söû duïng JOIN seõ cho keát quaû traû veà khoâng nhö yù muoán. Trôû laïi öùng duïng baùn haøng qua maïng trong giaùo trình naøy, khi xuaát moät hôïp ñoàng baùn haøng cho khaùch haøng, theo thieát keá trong cô sôû döõ lieäu chuùng ta coù raát nhieàu baûng lieân quan ñeán nhau. Chaúng haïn, neáu quan taâm baùn haøng thì baùn cho ai. Suy ra, lieân quan ñeán thoâng tin khaùch haøng, baùn saûn phaåm gì cho hoï thì lieân quan ñeán maõ saûn phaåm, neáu khaùch haøng traû tieàn thì lieân quan ñeán phieáu thu, neáu khaùch haøng coù coâng nôï thì lieân quan ñeán nôï kyø tröôùc... Trong phaân naøy, chuùng toâi tieáp tuïc thieát keá moät soá baûng döõ lieäu cuøng vôùi kieåu döõ lieäu töông öùng vaø quan heä giöõa caùc baûng ñöôïc moâ taû nhö sau: Giaùo vieân: Phaïm Höõu Khang COMPUTER LEARNING CENTER WWW.HUUKHANG.COM tblCustomers (danh saùch khaùch haøng) [CustID] int auto_increment Primary key, [CustName] [varchar] (50) NULL , [Address] [varchar] (100) NULL, [Tel] [varchar] (20) NULL, [FaxNo] [varchar] (20) NULL, [Email] [varchar] (50) NULL, [Contact] [varchar] (50) NULL [Country] [varchar] (3) NULL, [Province] [varchar] (3) NULL tblOrders (Hôïp ñoàng baùn haøng) [OrderID] [int] Not null auto_increment Primary Key, [OrderDate] [date] NULL , [CustID] int , [Description] [varchar] (200) NULL , [ShipCost] [float] NULL , [TranID] [tinyint] NULL , [PaymentID] [tinyint] NULL , [Amount] [float] NULL , [TotalAmount] [float] NULL , tblOrderDetails (Hôïp ñoàng baùn haøng chi tieát) [SubID] [int] auto_increment NOT NULL , [OrderID] int , [ItemID] int, [No] int, [Qtty] [int] NULL , [Price] int NULL , [Discount] [Float] NULL , [Amount] [Float] NULL tblItems (Danh saùch saûn phaåm) [ItemID] int auto_increment Primary key, [ItemName] [varchar] (200) NULL , [Unit] [nvarchar] (20) NULL , [Cost] [Float] NULL , [Active] [tinyint] NOT NULL , [Category] int Baïn coù theå tìm thaáy caùc baûng döõ lieäu coøn laïi trong döõ lieäu Test trong ñóa ñính keøm theo saùch. 6.3. Meänh ñeà INNER JOIN Phaùt bieåu SQL daïng SELECT coù söû duïng meänh ñeà INNER JOIN thöôøng duøng ñeå keát hôïp hai hay nhieàu baûng döõ lieäu laïi vôùi nhau, cuù phaùp cuûa SELECT coù söû duïng meänh ñeà INNER JOIN: SELECT [SELECT LIST] FROM INNER JOIN ON WHERE ORDER BY [ASC / DESC] Neáu baïn caàn laáy ra moät soá coät trong caùc baûng coù keát noái laïi vôùi nhau baèng meänh ñeà INNER JOIN thì cuù phaùp naøy vieát laïi nhö sau: SELECT [FIELD1,FIELD2, ...] FROM INNER JOIN Giaùo vieân: Phaïm Höõu Khang COMPUTER LEARNING CENTER WWW.HUUKHANG.COM ON WHERE ORDER BY [ASC / DESC] Ví duï 8-23: INNER JOIN vôùi moät soá coät chæ ñònh /* in ra danh saùch khaùch haøng mua haøng trong thaùng 10 */ Select CustName,OrderID, OrderDate,Amount, TotalAmount from tblCustomers inner join tblOrders on tblCustomers.CustID = tblOrders.CustID where month (OrderDate) = 10 order by CustName Keát quaû traû veà nhö sau: CustName OrderID OrderDate .. TotalAmount --------------------------------------------- CENTURY Hotel 13 2001-10-17 388800000 CENTURY Hotel 14 2001-10-18 518400000 CENTURY Hotel 16 2001-10-17 388800000 CENTURY Hotel 17 2001-10-18 14400000 CENTURY Hotel 18 2001-10-18 12960000 CENTURY Hotel 110 2001-10-18 216000000 Plaza Hotel 12 2001-10-17 403200000 Plaza Hotel 19 2001-10-17 86400000 Plaza Hotel 11 2001-10-17 576000000 Plaza Hotel 15 2001-10-17 288000000 Neáu baïn caàn laáy ra taát caû caùc coät trong caùc baûng coù keát noái laïi vôùi nhau baèng meänh ñeà INNER JOIN, cuù phaùp treân coù theå vieát laïi nhö sau: SELECT first_tablename.*, second_tablename.* [,next table name] FROM INNER JOIN ON [INNER JOIN ON ] WHERE ORDER BY [ASC / DESC] Ví duï 8-24: INNER JOIN vôùi taát caùc tröôøng lieân quan /* in ra danh saùch khaùch haøng mua haøng trong thaùng 10 */ Select CustID,CustName,OrderID, OrderDate,TotalAmount from tblCustomers inner join tblOrders On TblCustomers.CustID=tblOrders.CustID where month (OrderDate) = 10 order by CustName DESC Keát quaû traû veà nhö sau: Giaùo vieân: Phaïm Höõu Khang COMPUTER LEARNING CENTER WWW.HUUKHANG.COM CustID CustName .. OrderID ..TotalAmount ------ --------------------------------------- 13 Plaza Hotel .. 11 .. 576000000 13 Plaza Hotel .. 15 .. 288000000 12 Plaza Hotel .. 12 . . 403200000 12 Plaza Hotel .. 19 .. 86400000 16 CENTURY Hotel .. 13 .. 388800000 16 CENTURY Hotel .. 14 .. 518400000 16 CENTURY Hotel .. 16 .. 388800000 16 CENTURY Hotel .. 17 .. 14400000 16 CENTURY Hotel .. 18 .. 12960000 16 CENTURY Hotel .. 110 .. 216000000 Neáu trong nhöõng baûng caàn keát noái coù teân tröôøng (coät) gioáng nhau thì khi thöïc thi phaùt bieåu SQL daïng SELECT phaûi chæ roõ coät thuoäc baûng naøo. Trong tröôøng hôïp caû hai cuøng laáy döõ lieäu ra thì baïn caàn chuyeån aùnh xaï teân khaùc cho coät thoâng qua meänh ñeà AS, ví duï nhö: SELECT first_tablename.CustID as CUSTID, second_tablename.CustID as CUSTID FROM INNER JOIN ON WHERE ORDER BY [ASC / DESC] Neáu trong nhöõng baûng caàn keát noái ñoù coù teân tröôøng (coät) gioáng nhau vaø khoâng ñöôïc chæ roõ nhö tröôøng hôïp treân khi khai baùo trong cô sôû döõ lieäu SQL Server, khi thöïc thi phaùt bieåu SQL daïng SELECT baïn seõ bò loãi, chaúng haïn nhö: SELECT first_tablename.*, second_tablename.* FROM INNER JOIN ON WHERE ORDER BY [ASC / DESC] Server: Msg 209, Lecel 16, State Line 1 Ambiguous column name 'CustID' Tuy nhieân, vôùi phaùt bieåu treân baïn coù theå thöïc thi trong cô sôû döõ lieäu MySQL. Ngoaøi ra, phaùt bieåu SQL daïng SELECT söû duïng INNER JOIN baïn coù theå aùnh xaï (alias) teân cuûa baûng thaønh teân ngaén goïn ñeå deã tham chieáu veà sau. Thöïc ra phaùt bieåu ALIAS coù yù nghóa gioáng nhö AS vôùi teân coät trong baûng thaønh teân coät khaùc trong phaùt bieåu SELECT. Select p.*,s.* from tablename1 inner join tablename2 On tablename1.field1 = tablename2.field2 Ví duï 8-25: INNER JOIN vôùi aùnh xaï teân baûng /* in ra danh saùch khaùch haøng mua haøng trong thaùng 10 */ Giaùo vieân: Phaïm Höõu Khang COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Select c.CustName, s.OrderID,s.OrderDate, s.TotalAmount from tblCustomer c inner join tblOrders s On c.CustID=s.CustID where month (s.OrderDate) = 10 order by c.CustName DESC Keát quaû traû veà nhö sau: CustName OrderID OrderDate .. TotalAmount ----------------------------------------------CENTURY Hotel 13 2001- 10-17 .. 388800000 CENTURY Hotel 14 2001-10-18 .. 518400000 CENTURY Hotel 16 2001-10-17 .. 388800000 CENTURY Hotel 17 2001-10-18 .. 14400000 CENTURY Hotel 18 2001-10-18 .. 12960000 CENTURY Hotel 11 2001-10-18 .. 216000000 Plaza Hotel 12 2001-10-17 .. 403200000 Plaza Hotel 19 2001-10-17 .. 86400000 Plaza Hotel 11 2001-10-17 .. 576000000 Plaza Hotel 15 2001-10-17 .. 288000000 Taát nhieân, baïn cuõng coù theå vieát phaùt bieåu treân öùng vôùi töøng coät muoán laáy ra baèng caùch khai baùo teân coät. 6.4. Meänh ñeà Left Join Tröôøng hôïp baïn mong muoán keát quaû laáy ra trong hai baûng keát hôïp nhau theo ñieàu kieän: Nhöõng maåu tin baûng beân traùi toàn taïi öùng vôùi nhöõng maåu tin ôû baûng beân phaûi khoâng toàn taïi baïn haõy duøng meänh ñeà LEFT JOIN trong phaùt bieåu SQL daïng SELECT, cuù phaùp coù daïng: select from lefttablename LEFT JOIN righttablename on lefttabkename.field1=righttablename.field2 Where Order by ASC/DESC Chaúng haïn, baïn choïn ra taát caû caùc saûn phaåm (vôùi caùc coät) coù hay khoâng coù doanh soá baùn trong thaùng hieän taïi. Moät soá saûn phaåm khoâng baùn trong thaùng seõ coù coät Amount coù coät Amount giaù trò NULL. Ví duï 8-26: SELECT duøng LEFT JOIN /* in ra danh saùch saûn phaåm baùn trong thaùng 10 */ select ItemID,ItemName,Amount from tblItems left join tblOrderDetails on tblItems.ItemID=tblOrderDetails.ItemID order by Amount Keát quaû traû veà nhö sau: ItemID ItemName Amount ---------------------------------------------- 12 ASW-60VP NULL Giaùo vieân: Phaïm Höõu Khang COMPUTER LEARNING CENTER WWW.HUUKHANG.COM 13 ASW-60VT NULL 14 ASW-660T 120V TW 29340 NULL 14 ASW-685V 120V TW 29440 NULL 15 ASW60VP 220V 34571 NULL 16 ASW-45Z1T1 2960000 17 ASW-45Y1T 127V 14400000 18 ASW-45Y1T 220V 72000000 19 ASW-45Y1T 220V 86400000 20 ASW-45Z1T 15200000 ... 6.5. Meänh ñeà Right Join Ngöôïc laïi vôùi phaùt bieåu SQL daïng SELECT söû duïng meänh ñeà LEFT JOIN laø phaùt bieåu SQL daïng SELECT söû duïng meänh ñeà RIGHT JOIN seõ xuaát döõ lieäu cuûa baûng beân phaûi cho duø döõ lieäu cuûa baûng beân traùi khoâng toàn taïi, cuù phaùp coù daïng: Select From lefttablename RIGHT JOIN righttablename On lefttabkename.field1=righttablename.field2 Where Order by ASC/DESC Trong ví duï sau, baïn coù theå choïn ra taát caû caùc saûn phaåm coù hay khoâng coù doanh soá baùn trong thaùng hieän taïi. Caùc saûn phaåm khoâng toàn taïi doanh soá baùn seõ khoâng hieän ra. Ví duï 8-27: SELECT duøng RIGHT JOIN /* in ra danh saùch saûn phaåm baùn trong thaùng ngaøy 17 */ /* trong phaùt bieåu SELECT naøy coù söû duïng meänh ñeà WHERE söû duïng phaùt bieåu SELECT khaùc, keát quaû cuûa SELECT trong meänh ñeà WHERE traû veà moät maûng OrderID */ Select ItemName,Qtty, Price,Amount From tblItems Right join tblOrderDetails On tblItems.ItemID=tblOrderDetails.ItemID Where OrderID in (12,14,23,15) Order by ItemID Keát quaû traû veà nhö sau: ItemName Qtty Price Amount ---------------------------------------------- ASW-45Y1T 127V SDIA29350 11000 12000 58400000 ASW-45Y1T 127V SDIA29350 10000 12000 44000000 ASW-45Y1T 127V SDIA 29350 10000 12000 14400000 ASW-45Y1T 127V SDIA 29350 10000 12000 44000000 ASW-45Y1T 127V SDIA 29350 11000 12000 58400000 ASW-45Y1T 127V SDIA 29350 10000 12000 44000000 ASW-45Y1T 127V SDIA 29350 11000 12000 58400000 ASW-45Y1T 220V ARG 29391 6000 12000 86400000 ASW-45Z1T 9000 12000 29600000 ASW-45Z1T 9000 12000 29600000 ... Giaùo vieân: Phaïm Höõu Khang COMPUTER LEARNING CENTER WWW.HUUKHANG.COM 6.6. Pheùp toaùn hôïp (union) Union khoâng gioáng nhö nhöõng meänh ñeà JOIN ñaõ giôùi thieäu treân ñaây. Union laø pheùp toaùn duøng ñeå noái hai hay nhieàu caâu truy vaán daïng Select laïi vôùi nhau. Ñoái vôùi JOIN, baïn coù theå keát noái döõ lieäu ñöôïc thöïc hieän theo chieàu ngang. Ñoái vôùi Union baïn keát noái döõ lieäu ñöôïc thöïc hieän theo chieàu doïc. Ñeå choïn ra nhöõng khaùch haøng thöôøng xuyeân trong tblCustomers, keát quaû traû veà laø danh saùch caùc khaùch haøng thöôøng xuyeân. Ví duï 8-28: Khaùch haøng thöôøng xuyeân trong tblCustomers Select CustID,CustName from tblCustomers Keát quaû traû veà nhö sau: CustID CustName ---------- ----------------- 13 New World Hotel 12 Kinh Do Hotel 16 CENTURY Hotel 10 PLAZA Hotel Ñeå choïn ra nhöõng khaùch haøng vaõng lai trong tblTempCustomers, keát quaû traû veà laø danh saùch caùc khaùch haøng vaõng lai. Ví duï 8-29: Khaùch haøng vaõng lai trong tblTempCustomers Select CustID,CustName from tblTempCustomers Keát quaû traû veà nhö sau: CustID CustName ---------- --------------------------------- 23 Cong ty nuoc giai khat ‘12’COLA 24 Cong ty nuoc giai khat PEPSI 25 Cong ty nuoc giai khat REDBULK 26 Cong ty nuoc giai khat TRIBICO Neáu duøng pheùp toaùn UNION ñeå keát noái hai baûng treân, keát quaû traû veà laø danh saùch caû hai loaïi khaùch haøng trong cuøng moät recordset. Ví duï 8-30: SELECT söû duïng pheùp hôïp UNION Select CustID,CustName From tblCustomers UNION Select CustID,CustName From tblTempCustomers Keát quaû traû veà nhö sau: CustID CustName Giaùo vieân: Phaïm Höõu Khang COMPUTER LEARNING CENTER WWW.HUUKHANG.COM ---------- ----------------------------------- 23 Cong ty nuoc giai khat ‘12’COLA 24 Cong ty nuoc giai khat PEPSI 25 Cong ty nuoc giai khat REDBULK 26 Cong ty nuoc giai khat TRIBICO 12 Kinh Do Hotel 10 PLAZA Hotel 16 CENTURY Hotel 13 New World Hotel Ghi chuù: Khi söû duïng pheùp toaùn Union trong phaùt bieåu SQL daïng Select, baïn caàn löu yù caùc quy ñònh sau: ¾ Taát caû nhöõng truy vaán trong UNION phaûi cuøng soá coät hay tröôøng. Neáu truy vaán thöù nhaát coù hai coät thì truy vaán thöù hai ñöôïc söû duïng UNION cuõng phaûi coù hai coät töông töï. ¾ Khi söû duïng UNION, nhöõng coät naøo coù teân coät hay bí danh (alias) môùi thì keát quaû traû veà seõ coù töïa ñeà (header) cuûa töøng coät vaø teân laø teân coät cuûa truy vaán thöù nhaát. ¾ Kieåu döõ lieäu trong caùc coät cuûa truy vaán 2 töông thích vôùi kieåu döõ lieäu caùc coät töông öùng trong truy vaán thöù nhaát. ¾ Trong UNION baïn coù theå keát hôïp nhieàu caâu truy vaán laïi vôùi nhau. ¾ Keát quaû hieän ra theo thöù töï cuûa truy vaán töø döôùi leân treân. 6.7. 6.7.1. 6.7.2. SQL daïng thay ñoåi vaø ñònh nghóa cô sôû döõ lieäu Phaùt bieåu SQL daïng CREATE Phaùt bieåu SQL daïng CREATE duøng ñeå taïo cô sôû döõ lieäu vaø nhöõng ñoái töôïng cuûa cô sôû döõ lieäu trong MySQL, SQL Server, Oracle, ..., chuùng cuù phaùp nhö sau: CREATE Database CREATE ¾ OBJECT TYPE: Loaïi ñoái töôïng cuûa cô sôû döõ lieäu ví duï nhö Procedure, Table, View,... ¾ OBJECT NAME: Teân cuûa ñoái töôïng trong cô sôû döõ lieäu SQL nhö sp_IC, tblEmployer, ... Taïo cô sôû döõ lieäu - Create database Khi xaây döïng cô sôû döõ lieäu, baïn baét ñaàu töø moâ hình cô sôû döõ lieäu ERD, hay töø moät giai ñoaïn naøo ñoù trong quy trình phaân tích thieát keá heä thoáng. Ñeå taïo cô sôû döõ lieäu treân MySQL hay SQL Server baïn söû duïng cuù phaùp sau: CREATE DATABASE Cuù phaùp ñaày ñuû cuûa phaùt bieåu taïo cô sôû döõ lieäu nhö sau, neáu baïn söû duïng cô sôû döõ lieäu SQL Server: CREATE DATABASE [ ON [PRIMARY] ( [Name= ,] FileName= [, SIZE= ] [, MAXSIZE= ][, FILEGROWTH = <No of Kylobyte|Percentage>] )] Giaùo vieân: Phaïm Höõu Khang COMPUTER LEARNING CENTER WWW.HUUKHANG.COM [ LOG ON ( [Name= ,] FileName= [, SIZE= ] [, MAXSIZE= ][, FILEGROWTH = <No of Kylobyte|Percentage>] )] [COLLATE ] [For Load | For Attach] 6.7.3. Dieãn giaûi CREATE Database trong SQL Server ¾ ON: Duøng ñeå ñònh nghóa nôi chöùa cô sôû döõ lieäu vaø khoâng gian chöùa taäp tin log. ¾ NAME: Duøng ñònh nghóa teân cuûa cô sôû döõ lieäu. Teân naøy duøng tham chieáu khi goïi ñeán cô sôû döõ lieäu, teân ñöôïc duøng cho quaù trình backup, export, Import, Shrink cô sôû döõ lieäu ñoù. ¾ FILENAME: Teân taäp tin cô sôû döõ lieäu löu trong ñóa cöùng, thoâng thöôøng khi caøi SQL Server leân oå ñóa naøo thì giaù trò maëc ñònh cho pheùp löu taäp tin ñeán thö muïc ñoù. Tuy nhieân, neáu muoán baïn cuõng coù theå thay ñoåi vò trí caùc file naøy. Khi taïo cô sôû döõ lieäu, baïn ñaõ ñònh nghóa vò trí ñaët taäp tin ôû thö muïc naøo thì khoâng theå di chuyeån moät caùch thuû coâng (nhö duøng Explorer cuûa Windows), vì laøm ñieàu ñoù thaät nguy hieåm nhaát laø khi döõ lieäu trong cô sôû döõ lieäu ñang coù giaù trò kinh teá. ¾ SIZE: Dung löôïng cuûa cô sôû döõ lieäu khi khôûi taïo chuùng. Thoâng thöôøng giaù trò maëc ñònh laø 1 MB. ¾ Dung löôïng phaûi laø soá nguyeân, coù theå taêng theâm baèng caùch söû duïng thuû tuïc Shrink trong SQL Server. ¾ MAXSIZE: Dung löôïng lôùn nhaát, khi dung löôïng cô sôû döõ lieäu taêng leân ñeán möùc MaxSize thì döøng laïi. Neáu khi dung löôïng baèng MaxSize, caùc chuyeån taùc coù theå bò huyû boû hay traû veà loãi khoâng theå thöïc hieän ñöôïc, vaø coù theå laøm cho cô sôû döõ lieäu cuûa baïn bò treo. Ñeå traùnh ñieàu naøy xaûy ra, thì ngöôøi quaûn trò cô sôû döõ lieäu phaûi thöôøng xuyeân theo gioûi quaù trình taêng dung löôïng cô sôû döõ lieäu theo thôøi gian, ñeå coù bieän phaùp traùnh moïi ruûi ro coù theå xaûy ra. ¾ FILEGROWTH: Dung löôïng khôûi taïo cuøng dung löôïng toái ña cho pheùp taêng trong quaù trình theâm döõ lieäu vaøo cô sôû döõ lieäu. Nhaèm töï ñoäng hoùa, chuùng ta phaûi thieát laäp quaù trình taêng töï ñoäng theo chæ soá KB cho tröôùc hay tyû leä phaàn traêm theo dung löôïng ñang coù. ¾ LOG ON: Log on cho pheùp baïn quaûn lyù nhöõng chuyeån taùc xaûy ra trong quaù trình söû duïng cô sôû döõ lieäu cuûa SQL Server. Xaây döïng cô sôû döõ lieäu Test Nhö ñaõ trình baøy ôû treân, sau ñaây ví duï taïo cô sôû döõ lieäu Test coù cuù phaùp nhö sau: Ví duï 8-31: Taïo cô sôû döõ lieäu Test trong SQL Server USE master GO CREATE DATABASE Test ON ( NAME = Test, FILENAME = 'c:\mssql7\data\Testdat.mdf', Giaùo vieân: Phaïm Höõu Khang COMPUTER LEARNING CENTER WWW.HUUKHANG.COM SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = 'Testlog', FILENAME = 'c:\mssql7\data\Testlog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) GO Ñeå ñôn giaûn hoaù caùc ñoái töôïng Table trong cô sôû döõ lieäu Test, chuùng toâi chæ trình baøy moät vaøi phaùt bieåu SQL daïng Create Table, caùc Table khaùc baïn coù theå tìm thaáy trong cô sôû döõ lieäu ñính keøm. Ví duï 8-32: Taïo moät soá baûng trong Test /* Taïo baûng danh saùch khaùch haøng thöôøng xuyeân */ CREATE TABLE tblcustomers ( CustID int(3) unsigned NOT NULL auto_increment, Username varchar(20) NOT NULL DEFAULT '' , Password varchar(10) NOT NULL DEFAULT '' , CustName varchar(50) , Address varchar(100) , Tel varchar(20) , FaxNo varchar(10) , Email varchar(50) , Contact varchar(50) , CountryCode char(3) , ProvinceCode char(3) , PRIMARY KEY (CustID), INDEX CustID (CustID) ); /* Taïo baûng hôïp ñoàng mua haøng qua maïng */ CREATE TABLE tblorders ( OrderID int(3) NOT NULL auto_increment, OrderDate date , CustID int(11) , Description varchar(100) DEFAULT '0' , TranID tinyint(3) DEFAULT '0' , PaymentID tinyint(3) DEFAULT '0' , Amount float DEFAULT '0' , ShipCost float DEFAULT '0' , TotalAmount float DEFAULT '0' , PRIMARY KEY (OrderID), INDEX OrderID (OrderID) ); /* Taïo baûng hôïp ñoàng chi tieát mua haøng qua maïng */ CREATE TABLE tblorderdetails ( ItemID int(3) unsigned DEFAULT '0' , OrderID int(3) unsigned DEFAULT '0' , No tinyint(3) unsigned DEFAULT '0' , Qtty int(3) unsigned DEFAULT '0' , Price int(3) unsigned DEFAULT '0' , Discount int(3) unsigned DEFAULT '0' , Amount bigint(3) unsigned DEFAULT '0' ); Giaùo vieân: Phaïm Höõu Khang COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Moät soá quy ñònh khi thieát keá Table 6.7.4. 6.7.5. 6.7.6. Teân coät - Column Name Ñaët teân coät cuõng gioáng nhö ñaët teân baûng, coù raát nhieàu quy taéc ñaët teân (nhö ñaõ trình baøy ôû treân phaàn table), nhöng khuyeán khích baïn neân theo moät soá quy taéc cô baûn sau: ¾ Teân coät baét ñaàu chöõ hoa, coøn laïi baèng chöõ thöôøng. ¾ Teân ngaén goïn vaø ñaày ñuû yù nghóa. ¾ Khoâng neân ñaët teân coät coù khoaûng traéng, sau naøy baïn seõ gaëp nhöõng phieàn toaùi khi tham chieáu ñeán coät ñoù. ¾ Khoâng ñaët teân coät truøng vôùi nhöõng töø khoaù, töø daønh rieâng, vaø nhöõng kyù töï ñaëc bieät nhö nhöõng pheùp toaùn hay toaùn töû khaùc. ¾ Chuù yù, neân ñaët teân coät cuøng teân nhöõng coät coù quan heä vôùi nhöõng baûng khaùc trong cuøng cô sôû döõ lieäu, giuùp deã hieåu vaø traùnh bò nhaàm laãn. Moät soá ngöôøi thích theâm vaøo daáu gaïch chaân (_) ñeå phaân bieät yù nghóa hay teân goïi cuûa coät, ñieàu naøy laø tuøy vaøo sôû thích cuûa baïn. Tuy nhieân chuùng toâi khoâng thích qui taéc naøy. Nhöng ñoái vôùi kinh nghieäm laäp thieát keá xaây döïng cô sôû döõ lieäu thì baïn khoâng neân duøng daáu gaïch döôùi _, vaø dó nhieân trong nhieàu tröôøng hôïp khaùc baïn seõ caûm thaáy khoù chòu khi theâm moät daáu _ trong teân cuûa ñoái töôïng cuûa cô sôû döõ lieäu. Maëc duø khoâng coù vaán ñeà gì cho cuù phaùp hay caùc phaùt bieåu tham chieáu ñeán chuùng, nhöng baïn seõ thaáy taïi sao chuùng ta khoâng neân duøng daáu gaïch chaân (_) khi ñaët teân ñoái töôïng hay teân cô sôû döõ lieäu trong MySQL. ¾ Neáu baïn ñaët teân coù daáu _ ,baïn phaûi toán thôøi gian hay naêng löôïng cho haønh ñoäng taïo ra daáu _ ¾ Trong chöøng möïc hay giôùi haïn naøo ñoù do hieäu öùng cuûa Font chöõ coù theå phaùt sinh loãi seõ gaây ra nhaàm laãn cho ngöôøi laäp trình. ¾ Noùi toùm laïi laø baïn seõ maát theâm thôøi gian löu taâm ñeán chuùng. Kieåu döõ lieäu - Data type Nhö ñaõ trình baøy caùc laïi döõ lieäu trong phaàn treân, khi xaây döïng cô sôû döõ lieäu, taát caû nhöõng tröôøng trong baûng caàn phaûi coù kieåu döõ lieäu cuï theå. Vaán ñeà quan troïng laø choïn kieåu döõ lieäu naøo cho phuø hôïp vôùi döõ lieäu maø ngöôøi duøng seõ nhaäp vaøo. Ñeå thieát keá döõ lieäu phuø hôïp vôùi thöïc teá, ngoaøi tính öùng duïng hôïp vôùi ngöõ caûnh baïn cuõng caàn quan taâm ñeán kieåu döõ lieäu töông thích vaø chieàu daøi cuûa töøng coät. Chaúng haïn nhö: [CustID] [varchar] (10) /* hay */ [CustID] int Giaù trò maëc ñònh - Default Thoâng thöôøng khi taïo ra moät coät trong baûng ñoâi khi chuùng ta caàn aùp duïng giaù trò maëc ñònh, khoâng chæ cho tröôøng hôïp soá lieäu khoâng nhaäp töø beân ngoaøi maø coøn cho caùc coät töï ñoäng coù giaù trò töï sinh. Vôùi nhöõng lyù do nhö vaäy, chuùng ta caàn coù moät soá giaù trò maëc ñònh cho nhöõng coät caàn thieát, ví duï : ¾ Neáu coät ñoù laø soá chuùng ta coù giaù trò maëc ñònh laø 0 Giaùo vieân: Phaïm Höõu Khang COMPUTER LEARNING CENTER WWW.HUUKHANG.COM ¾ Neáu coät ñoù laø ngaøy thaùng chuùng ta coù giaù trò maëc ñònh laø ngaøy naøo ñoù (nhö 0000-00-00 laø CurDate()) ¾ Neáu coät ñoù coù giaù trò laø 0 hoaëc 1, baïn coù theå khai baùo giaù trò maëc ñònh laø 0 hoaëc 1 ¾ Neáu coät ñoù laø chuoãi chuùng ta coù giaù trò maëc ñònh nhö laø 'A' 6.7.7. Soá töï ñoäng auto_increment auto_increment laø khaùi nieäm cöïc kyø quan troïng trong MySQL (töông ñöông vôùi Identity trong SQL Server, Autonumber trong MS Access). Khi baïn muoán moät coät coù giaù trò taêng töï ñoäng nhö AutoNumber/Identity, baïn neân ñònh nghóa coät ñoù nhö auto_increment,. Khi söû duïng auto_increment laøm soá taêng töï ñoäng thì kieåu döõ lieäu laø soá nguyeân hoaëc soá nguyeân lôùn. Trong tröôøng hôïp, baïn khai baùo soá töï ñoäng trong SQL Server, baïn caàn phaûi khai baùo theâm caùc thoâng soá nhö seed. Seed laø giaù trò khôûi ñaàu khi SQL Server töï ñoäng taêng giaù trò, Increament laø böôùc taêng, noù cho bieát moãi laàn taêng caàn bao nhieâu giaù trò. Vì duï khi taïo auto_increment cho coät ItemID [Int] auto_increment, nghóa laø baét ñaàu soá 1 vaø moãi laàn taêng 1 soá. Keát quaû baïn seõ coù laø 1,2,3,4, ...n. Trong phaùt bieåu SQL cuûa MySQL, ñeå taïo baûng coù gaù trò taêng töï ñoäng baïn chæ caàn khai baùo teân coät, kieåu döõ lieäu Int (Integer) vaø auto_increment nhö sau: IDNO Int auto_increment NOT NULL Trong giao dieän ñoà hoïa baïn chæ caàn check vaøo tuyø choïn AutoIncreament nhö hình 8-10. Hình 8-10: Choïn auto_increment Giaùo vieân: Phaïm Höõu Khang COMPUTER LEARNING CENTER WWW.HUUKHANG.COM NULL / NOT NULL Ñaây laø traïng thaùi cuûa moät coät trong baûng cho pheùp chaáp nhaän giaù trò NULL hay khoâng? Neáu baïn chæ ra raøng buoäc giaù trò NOT NULL thì baét buoäc phaûi coù giaù trò trong coät naøy moãi khi maåu tin ñöôïc nhaäp vaøo. Ñoái vôùi moät soá kieåu döõ lieäu khoâng cho pheùp NULL baïn neân thieát laäp giaù trò maëc ñònh cho coät ñoù, ví duï nhö kieåu döõ lieäu bit khoâng cho pheùp NULL. Trong phaùt bieåu SQL taïo baûng, baïn chæ caàn khai baùo NULL hay NOT NULL sau kieåu döõ lieäu cuûa coät ñoù. Trong giao dieän ñoà hoïa chæ caàn ñaùnh daáu choïn vaøo tuyø choïn Not NULL nhö hình 8-10. 6.8. Thay caáu truùc ñoái töôïng baèng ALTER Khi chuùng ta caàn thieát phaûi söûa ñoåi moät phaàn caáu truùc cuûa caùc ñoái töôïng nhö table (view, hay SP trong SQL Server) vì muïc ñích naøo ñoù, thì Baïn söû duïng phaùt bieåu ALTER ñeå thay ñoåi caáu truùc cuûa ñoái töôïng hieän coù: ALTER Khi moät baûng toàn taïi trong cô sôû döõ lieäu, do nhu caàu caàn thieát phaûi thay ñoåi caáu truùc baûng, baïn söû duïng phaùt bieåu ALTER TABLE cuøng caùc tham soá cuûa chuùng nhö cuù phaùp sau: ALTER TABLE table alteration [,alteration] Chaúng haïn, baïn coù theå söû duïng phaùt bieåu ALTER TABLE ñeå theâm moät coät teân Activate vôùi kieåu döõ lieäu TinyInt coù giaù trò maëc ñònh laø 1. Ví duï 8-33: Theâm moät coät teân Activate vaøo baûng tblOrders ALTER TABLE tblorders ADD Activate TINYINT DEFAULT "1" Khi thay ñoåi thieát laäp giaù trò maëc ñònh cho coät baïn neân quan taâm ñeán giaù trò maëc ñònh ñoù coù phuø hôïp cho nhöõng maåu tin ñang toàn taïi hay khoâng. Muoán thay ñoåi giaù trò maëc ñònh cuûa coät cho nhöõng maåu tin ñang toàn taïi, baïn söû duïng ñeán meänh ñeà phuï nhö trong ví duï sau: Ví duï 8-34: Thieát laäp giaù trò maëc ñònh trong baûng tblOrders ALTER TABLE tblorders CHANGE OrderDate OrderDate DATETIME DEFAULT "0000-00-00" Thay ñoåi kieåu döõ lieäu töø Date dang DateTime, baïn coù theå khai baùo nhö ví duï 4-35 sau: Ví duï 8-35: Thay ñoåi kieåu döõ lieäu ALTER TABLE tblorders CHANGE OrderDate OrderDate DATE DEFAULT "0000-00-00 00:00:00" Giaùo vieân: Phaïm Höõu Khang COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Maëc khaùc, baïn cuõng coù theå taïo hay thay ñoåi baûng trong maøn hình MySQL-Front. Chæ caàn choïn ngaên Database | R-Click | Create New Table, cöûa soå xuaát hieän nhö hình 8-11. Hình 8-11: Giao dieän taïo baûng baèng MySQL-Front 6.9. Phaùt bieåu SQL daïng DROP Drop laø phaùt bieåu thöïc hieän pheùp xoaù. DROP duøng ñeå xoaù ñoái töôïng cuûa cô sôû döõ lieäu nhö baûng, cô sôû döõ lieäu, ...Cuù phaùp cuûa phaùt bieåu DROP: DROP [, .... n] Baïn coù theå xoaù cô sôû döõ lieäu, baèng caùch khai baùo nhö sau: Drop Database Test /* Phaùt bieåu DROP TABLE chæ roõ baûng naøo caàn xoaù, neáu xoaù nhieàu baûng thì baïn caàn duøng daáu phaåy (,) */ DROP TABLE tblCustomers, tblSuppliers Ngoaøi ra, baïn cuõng coù theå duøng MySQl-Front ñeå xoaù baûng hay caùc ñoái töôïng Table trong cô sôû döõ lieäu chæ ñònh. Neáu choïn nhieàu baûng cuøng moät luùc baïn söû duïng phím Control hay Shift nhö sau: Giaùo vieân: Phaïm Höõu Khang COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Hình 8-12: Choïn ñoái töôïng ñeå xoaù baûng trong MySQL-Front 7. TAÏO KÒCH BAÛN SQL- SQL SCRIPTS Thoâng thöôøng khi xaây döïng cô sôû döõ lieäu ñeå phaùt trieån öùng duïng, ñoâi khi baïn caàn chuyeån cô sôû döõ lieäu töø maùy naøy sang maùy khaùc, hay töø khu vöïc naøy hay ñeán khu vöïc khaùc. Coù raát nhieàu caùch ñeå laøm ñieàu naøy, ôû ñaây chuùng toâi giôùi thieäu ñeán caùc baïn moät coâng cuï taùi taïo laïi cô sôû döõ lieäu môùi töø kòch baûn cuûa cô sôû döõ lieäu goác. Kòch baûn SQL (SQL Script) laø toång hôïp taát caû caùc phaùt bieåu SQL duøng ñeå taïo ra cô sôû döõ lieäu trong quaù trình xaây döïng chuùng, chuùng löu tröõ döôùi daïng vaên baûn coù teân môû roäng .sql (cautruc.sql). Coâng cuï naøy taïo kòch baûn cho taát caû caùc ñoái töôïng cuûa cô sôû döõ lieäu vôùi nhöõng thuoäc tính caên baûn. Tuy nhieân, neáu baïn choïn vaøo tuyø choïn Data, SQL Script bao goàm caùc phaùt bieåu SQL daïng Insert cuøng vôùi döõ lieäu trong baûng. Tröôùc tieân baïn coù theå nhaän thaáy cöûa soå coâng cuï naøy trong MySQL-Front, baèng caùch choïn teân cô sôû döõ lieäu Test, sau ñoù choïn Tools / Im-Export / Export Table, cöûa soå xuaát hieän nhö hình 8-13 sau: Giaùo vieân: Phaïm Höõu Khang COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Hình 8-13: Taïo kòch baûn trong MySQl-Front KEÁT CHÖÔNG Trong chöông naøy, chuùng toâi ñaõ giôùi thieäu vôùi baïn haàu heát caùc phaùt bieåu SQL thuoäc loaïi ñònh nghóa cô sôû döõ lieäu, thao taùc döõ lieäu nhö Select, Insert, Delete vaø Update. Phaùt bieåu SQL daïng Select vôùi caùc meänh ñeà nhö JOIN cuøng pheùp toaùn giöõa hai hay nhieàu baûng trong phaùt bieåu SQL daïng SELECT. Ngoaøi ra, chuùng toâi cuõng trình baøy hai loaïi phaùt bieåu SQL daïng ñònh nghóa vaø thay ñoå cô sôû döõ lieäu taïo nhö CREATE vaø ALTER, DROP. Giaùo vieân: Phaïm Höõu Khang PHP VAØ DATABASE 9-1 COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Moân hoïc: PHP BAØI 9: PHP VAØ DATABASE Ñeå keát noái cô sôû döõ lieäu mySQL trong PHP, chuùng ta coù nhieàu caùch öùng vôùi nhieàu phöông thöùc keát noái cô sôû döõ lieäu, trong phaàn naøy chuùng ta taäp trung tìm hieåu caùch keát noái cô sôû döõ lieäu mySQL töø PHP baèng chính goùi cuûa noù. Nhöõng vaán ñeà chính seõ ñöôïc ñeà caäp trong baøi hoïc naøy 9 Khai baùo keát noái cô sôû döõ lieäu 9 Theâm maåu tin 9 Caäp nhaät maåu tin. 9 Xoaù maåu tin 9 Truy vaán döõ lieäu 1. KEÁT NOÁI CÔ SÔÛ DÖÕ LIEÄU Ñeå keát noái cô sôû döõ lieäu mySQL baïn söû duïng khai baùp nhö sau: <?php $link = mysql_connect ("localhost", "root", "") or die ("Could not connect to MySQL Database"); mysql_select_db("TestDB", $link); ?> Trong ñoù khai baùo sau laø keát noái cô sôû döõ lieäu mySQL vôùi teân server/ip cuøng vôùi username vaù password: mysql_connect ("localhost", "root", "") Vaø mysql_select_db("TestDB", $link); ñeå choïn teân cô sôû döõ lieäu sau khi môû keát noái cô sôû döõ lieäu, neáu bieán $link coù giaù trò laø false thì keát noái cô sôû döõ lieäu khoâng thaønh coâng. Sau khi môû keát noái cô sôû döõ lieäu maø khoâng söû duïng tìh baïn coù theå ñoùng keát noái cô sôû döõ lieäu vôùi cuù phaùp nhö sau: mysql_close($link); Chaúng haïn, baïn khai baùo trang connection.php ñeå keát noái cô sôû döõ lieäu vaø ñoùng keát noái ngay sau khi môû thaønh coâng. ::Welcome to PHP and mySQL Mo va dong ket noi CSDL MySQL <?php $link = mysql_connect ("localhost", "root", "") or die ("Could not connect to MySQL Database"); mysql_select_db("InterShop", $link); mysql_close($link); PHP VAØ DATABASE 9-2 COMPUTER LEARNING CENTER WWW.HUUKHANG.COM ?> 2. THEÂM MAÅU TIN Ñeå theâm maåu tin, baïn söû duïng haøm mysql_query(chuoãi Insert). Chaúng haïn, chuùng ta khai baùo trang insert.php ñeå theâm maåu tin vaøo baûng tblships coù hai coät döõ lieäu laø ShipID vaø ShipName nhö ví duï trong trang insert.php. ::Welcome to PHP and mySQL Them mau tin <?php require("dbcon.php"); $sql="insert into tblships values('A01','Testing')"; $result = mysql_query($sql,$link); $affectrow=0; if($result) $affectrow=mysql_affected_rows(); mysql_close($link); ?> So mau tin them vao Trong ñoù, baïn söû duïng haøm mysql_query vôùi hai tham soá laø $sql vaø $link. Keát quaû traû veà laø soá maåu tin thöïc thi. Ngoaøi ra, baïn coù theå söû duïng ñoaïn keát noái cô sôû döõ lieäu trong taäp tin dbcon.php nhö ví duï sau: <?php $link = mysql_connect ("localhost", "root", "") or die ("Could not connect to MySQL Database"); mysql_select_db("Test", $link); ?> Trong tröôøng hôïp cho pheùp ngöôøi söû duïng theâm maåu tin thì baïn thieát keá form yeâu caàu ngöôøi söû duïng nhaäp hai giaù trò sau ñoù submit ñeán trang keá tieáp ñeå thöïc thi vieäc theâm gt sau ñoù submit ñeán trang keá tieáp ñeå thöïc thi vieäc theâm giaù trò vöøa nhaäp vaøo cô sôû döõ lieäu nhö hình 9-1. PHP VAØ DATABASE 9-3 COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Hình 9-1: Theâm maåu tin Ñeå laøm ñieàu naøy, tröôùc tieân baïn khai baùo trang them.php, trong ñoù khai baùo ñoaïn javascript ñeå kieåm tra döõ lieäu nhaäp nhö sau: function checkInput() { if (document.frmPHP.txtID.value=="") { alert("Invalid ID, Please enter ID"); document.frmPHP.txtID.focus(); return false; } if (document.frmPHP.txtName.value=="") { alert("Please enter Name"); document.frmPHP.txtName.focus(); return false; } return true; } Keá ñeán khai baùo theå form vaø hai theû input laïi text yeâu caàu ngöôøi söû duïng nnaäp ID vaø Name nhö sau: <form name="frmPHP" method="post" action="doinsert.php" onsubmit="return checkInput();"> Please enter ID and Name ID: <input type="text" name="txtID" size="25" maxlength="3" class="textbox"> PHP VAØ DATABASE 9-4 COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Name: <input type="text" name="txtName" size="25" maxlength="50" class="textbox"> <input type="submit" value="Submit" class="button"> Löu yù raèng, baïn khai baùo soá kyù töï lôùn nhaát cho pheùp nhaäp baèng vôùi kích thöôùc ñaõ khai baùo trong cô sôû döõ lieäu öùng vôùi thuoäc tính maxlength. Khi ngöôøi söû duïng nhaäp hai giaù trò vaø nhaán nuùt submit, trang keá tieáp ñöïôc trieäu goïi. Trang naøy laáy giaù trò nhaäp baèng caùch söû duïng bieán form hay $HTTP_POST_VARS. Ñoái vôùi tröôøng hôïp naøy chuùng ta söû duïng bieán form nhö trang doinsert.php. ::Welcome to PHP and mySQL Them mau tin <?php $affectrow=0; require("dbcon.php"); $sql="insert into tblships(ShipID,ShipName) "; $sql .=" values('".$txtID."','".$txtName."')"; $result = mysql_query($sql,$link); if($result) $affectrow=mysql_affected_rows(); mysql_close($link); ?> So mau tin them vao 3. CAÄP NHAÄT MAÅU TIN Ñoái vôùi tröôøng hôïp caäp nhaät maåu tin, baïn cuõng söû duïng haøm mysql_query vôùi phaùt bieåu Update thay ví Insert nhö treân, ví duï chuùng ta khai baùo trang update.php ñeå caäp nhaät maåu tin trong baûng tblShips vôùi teân laø UpdateTesting khi maõ coù giaù trò laø A01. ::Welcome to PHP and mySQL Cap nhat mau tin <?php require("dbcon.php"); $sql="Update tblships set ShipName='UpdateTesting' "; $sql.=" where ShipID='A01'"; $result = mysql_query($sql,$link); $affectrow=0; if($result) PHP VAØ DATABASE 9-5 COMPUTER LEARNING CENTER WWW.HUUKHANG.COM $affectrow=mysql_affected_rows(); mysql_close($link); ?> So mau tin cap nhat Löu yù raèng, ñeå bieát soá maåu tin ñaõ thöïc thi bôûi phaùt bieåu SQL baïn söû duïng haøm mysql_affected_rows. if($result) $affectrow=mysql_affected_rows(); Töông töï nhö treân, baïn coù theå thieát keá form cho pheùp ngöôøi söû duïng caäp nhaät döõ lieäu baèng caùch thieát keá form yeâu caàu ngöôøi söû duïng nhaäp maõ vaø teân caäp nhaän. Tröôùc tieân thieát keá from cho pheùp nhaäp döõ lieäu ñeå caäp nhaät nhö ví duï trang capnhat.php, sau khi hoïc phaàn truy vaán xong, thaqy vì nhaäp maõ baïn cho pheùp ngöôøi söû duïng choïn trong danh saùch ñaõ coù nhö hình 9-2. Hình 9-2: Caäp nhaät döõ lieäu Sau khi ngöôøi söû duïng nhaán nuùt submit, trang doupdate.php seõ trieäu goïi, keát quaû traû veà 1 hay 0 maåu tin. ::Welcome to PHP and mySQL Cap nhat mau tin <?php $affectrow=0; require("dbcon.php"); $sql="update tblships set ShipName='"; $sql .=$txtName."' where ShipID='".$txtID."'"; $result = mysql_query($sql,$link); if($result) $affectrow=mysql_affected_rows(); mysql_close($link); ?> PHP VAØ DATABASE 9-6 COMPUTER LEARNING CENTER WWW.HUUKHANG.COM So mau tin cap nhat 4. XOAÙ MAÅU TIN Töông töï nhö vaäy khi xoaù maåu tin, baïn chæ thay ñoåi phaùt bieåu SQL daïng Delete nhö ví duï trong taäp tin delete.php. ::Welcome to PHP and mySQL Xoa mau tin <?php require("dbcon.php"); $sql="Delete From tblships where ShipID='A01'"; $result = mysql_query($sql,$link); $affectrow=0; if($result) $affectrow=mysql_affected_rows(); mysql_close($link); ?> So mau tin da xoa Ñoái vôùi tröôøng hôïp xoaù thì ñôn giaûn hôn, baïn cæh caàn bieát ñöôïc maõ caàn xoaù, chính vì vaäy trong tröôøng hôïp naøy chuùng ta chæ caàn thieát keá trang cho pheùp nhaäp maõ nhö hình 9-3. Hình 9-3: Xoaù 1 maåu tin Sau khi nhaäp maõ caàn xoaù, neáu ngöôøi söû duïng nhaán nuùt Delete laäp töùc trang dodelete.php seõ trieäu goïi vaø xoaù maåu tin töông öùng. ::Welcome to PHP and mySQL PHP VAØ DATABASE 9-7 COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Xoa mau tin <?php $affectrow=0; require("dbcon.php"); $sql="delete from tblships "; $sql .=" where ShipID='".$txtID."'"; $result = mysql_query($sql,$link); if($result) $affectrow=mysql_affected_rows(); mysql_close($link); ?> So mau tin xoa 5. TRUY VAÁN DÖÕ LIEÄU Ñeå truy vaán döõ lieäu baïn söû duïng haøm mysql_num_rows ñeå bieát ñöôïc soá maåu tin traû veà vaø haøm mysql_fetch_array ñeå ñoïc töøng maåu tin vaø maûng sau ñoù trình baøy giaù trò töø maûng naøy. Chaúng haïn, chuùng ta taïo moät taäp tin lietke.php duøng ñeå lieät keâ danh saùch maåu tin trong baûng tblShips nhö hình 9-4. Hình 9-4: Lieät keâ maåu tin Ñeå laøm ñieàu naøy, baïn khai baùo ñoaïn chöông trình ñoïc baûng döõ lieäu töông töï nhö ví duï sau: <?php require("dbcon.php"); $totalRows = 0; $stSQL ="select * from tblShips"; $result = mysql_query($stSQL, $link); $totalRows=mysql_num_rows($result); ?> Sau ñoù, duøng haøm mysql_fetch_array ñeå ñoïc töøng maåu tin vaø in ra nhö sau: <?php if($totalRows>0) { $i=0; while ($row = mysql_fetch_array ($result)) { $i+=1; PHP VAØ DATABASE 9-8 COMPUTER LEARNING CENTER WWW.HUUKHANG.COM ?> Trong tröôøng hôïp soá maåu tin traû veà laø 0 thì in ra caâu thoâng baùo khoâng tìm thaáy nhö sau: <?php } }else{ ?>   Oop! Ship not found! <?php } ?> 6. KEÁT LUAÄN Trong baøi naøy, chuùng ta taäp trung tìm hieåu caùch keát noái cô sôû döõ lieäu, theâm, xoaù caäp nhaät vaø lieät keâ maåu tin. Trong baøi keá tieáp chuùng ta tìm hieåu nhieàu caùc trình baøy döõ lieäu, xoaù maåu tin theo daïng maûng. PHP VAØ DATABASE 9-1 COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Moân hoïc: PHP BAØI 10: XOAÙ, CAÄP NHAÄT DÖÕ LIEÄU DAÏNG MAÛNG Trong baøi tröôùc chuùng ta ñaõ laøm quen vôùi caùch xoaù maåu tin trong cô sôû döõ lieäu mySQL. Ñoái vôùi tröôøng hôïp xoaù moät luùc nhieàu maåu tin, chuùng ta phaûi xaây döïng trang PHP coù söû duïng theû input daïng checkbox. Nhöõng vaán ñeà chính seõ ñöôïc ñeà caäp trong baøi hoïc naøy 9 Lieät keâ döõ lieäu daïng danh saùch 9 Xoaù nhieàu maåu tin 9 Caäp nhaät nhieàu maåu tin 1. LIEÄT KEÂ DÖÕ LIEÄU Ñeå xoaù nhieàu maåu tin cuøng moät luùc, tröôùc tieân baïn khai baùo trang PHP ñeå lieät keâ danh saùch maåu tin trong maûng döõ lieäu chaèng haïn, moãi maåu tin xuaát hieän moät checkbox töông öùng. Checkbox naøy coù giaù trò laø maõ nhaän daïng cuûa maåu tin ñoù. Trong tröôøng hôïp naøy chuùng ta duøng coät khoaù cuûa maõ chuyeån haøng (SubCateID) trong baûng tblSubCategories ñònh nghóa trong trang lietke.php nhö hình 10-1. PHP VAØ DATABASE 9-2 COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Hình 10-1: Lieät keâ danh saùch laïi saûn phaåm Ñeå cho pheùp laáy ñöôïc nhieàu giaù trò choïn cuûa saûn phaåm nhö hình tren, baïn khai baùo caùc checkbox naøy cuøng teân (giaû söû teân laø chkid) vaø giaù trò trò laø SubCateID cuûa moãi saûn phaåm nhö ví duï 10-1 trong trang lietke.php. <?php if($totalRows>0) { $i=0; while ($row = mysql_fetch_array ($result)) { $i+=1; ?> <input type=checkbox name=chkid value=""> "> <?php } ?> <input type=button value="New" onclick="window.open('them.php',target='_main')"> Tong so mau tin <?php }else{ ?>     Oop! Ship not found! <?php } ?> Trong ñoù, hai khai baùo sau: Cho bieát baïn submit töø trang naøo vaø loaïi xoaù nhieàu maåu tin hay moät maåu tin ñoái vôùi baûng töông öùng. Muïc ñích cuûa vaán ñeà naøy laø trang delete söû duïng chung cho nhieàu baûng khaùc nhau vaø töø trang lieät keâ (xoaù nhieàu) hoaëc töø trang edit (1 maåu tin cuï theå). Ngoaøi ra, chuùng ta khai baùo ñeå nhaän giaù trò choïn treân caùch checkbox baèng caùch khai baùo ñoaïn javascript nhö sau: function calculatechon() PHP VAØ DATABASE 9-3 COMPUTER LEARNING CENTER WWW.HUUKHANG.COM { var strchon=""; var alen=document.frmList.elements.length; var buttons=1; alen=(alen>buttons)?document.frmList.chkid.length:0; if (alen>0) { for(var i=0;i<alen;i++) if(document.frmList.chkid[i].checked==true) strchon+=document.frmList.chkid[i].value+","; }else { if(document.frmList.chkid.checked==true) strchon=document.frmList.chkid.value; } document.frmList.chon.value=strchon; return isok(); } Tuy nhieân, do nhieàu loaïi saûn phaåm thuoäc caùc nhoùm saûn phaåm khaùc nhau, chính vì vaäy baïn khai baùo danh saùch nhoùm saûn phaåm treân theû select cho pheùp ngöôøi söû duïng lieät keâ saùch theo nhoùm saûn phaåm nhö hình 10-2. Hình 10-2: Lieät keâ danh saùch loaïi saùch Ñeå lieät keâ danh saùch nhoùm trong baûng tblCategories, baèng caùch khai baùo phöông thöùc nhaän chuoãi SQL daïng Select vaø giaù trò maëc ñònh traû veà nhieàu phaàn töû theû option trong taäp tin database.php nhö ví duï 10-2. PHP VAØ DATABASE 9-4 COMPUTER LEARNING CENTER WWW.HUUKHANG.COM function optionselected($stSQL,$item,$links) { $results = mysql_query($stSQL, $links); $totalRows=mysql_num_rows($results); $strOption=""; $strOption .="--Select--"; if($totalRows>0) { while ($row = mysql_fetch_array ($results)) { $strOption .="<option value=\"" ; $strOption .=$row["ID"]."\""; if($row["ID"]==$item) $strOption .=" selected "; $strOption .= ">".$row["Name"]; $strOption .=""; } } return $strOption; } Sau ñoù, goïi phöông thöùc naøy trong trang lietketheonhom.php nhö ví duï 10-3. <?php require("dbcon.php"); require("database.php"); $id=""; if (isset($cateid)) $id=$cateid; $stSQL ="select CateID As ID, CateName as Name from tblCategories "; $result = mysql_query($stSQL, $link); $totalRows=mysql_num_rows($result); $strOption=optionselected($stSQL,$id,$link); ?> Category:   Laàn ñaàu tieân baïn coù theå choïn maëc ñònh moät nhoùm hoaëc lieät keâ taát caû, khi ngöôøi söû duïng choïn nhoùm saûn phaåm naøo ñoù thì trang lietketheonhom.php seõ lieät keâ danh saùch loaïi saùch cuûa nhoùm saùch ñoù. Ñeå laøm ñieàu naøy, baïn khai baùo theû form vôùi theû select nhö ví duï 10-4. Category:   Khi ngöôøi söû duïng choïn caùc maåu tin nhö hình 10-2 vaø nhaán nuùt Delete, döïa vaøo giaù trò cuûa nuùt coù teân action (trong tröôøng hôïp naøy laø Delete), baïn coù theå khai baùo bieán ñeå laáy giaù trò choïn baèng caùch khai baùo nhö ví duï 10-5. $strid=$chon; PHP VAØ DATABASE 9-5 COMPUTER LEARNING CENTER WWW.HUUKHANG.COM $strid=str_replace(",","','",$strid); Döïa vaøo theû hidden khai baùo trong caùc trang trình baøy danh saùch (chaúng aïn lietketheonhom.php) maåu tin nhö sau: Baïn coù theå bieát töø trang naøo goïi ñeán trang dodelete.php ñeå quay trôû veà khi thöïc hieän xong taùc vuï xöû lyù. Ngoaøi ra, döïa vaøo giaù trò cuûa nuùt action ñeå thöïc hieän phaùt bieåu SQL. Chaúng haïn, trong tröôøng hôïp naøy neáu ngöôøi söû duïng nhaán huùt Delete thì baïn khai baùo nhö ví duï 10-6 sau: switch($strfrom) { case "subcategories": $stSQL ="delete from tblsubcategories where SubCateID in('".$strid."')"; $strlocation="Location:lietketheonhom.php"; break; case "categories": $stSQL ="delete from tblcategories where CateID in('".$strid."')"; $strlocation="Location:nhom.php"; break; } Sau ñoù, baïn coù theå thöïc thi phaùt bieåu SQL vöøa khai baùo ôû treân nhö ví duï 10-7. if($stSQL!="") { $result = mysql_query($stSQL, $link); } Löu yù raèng, baïn cuõng neân khai baùo try catch trong khi laøm vieäc vôùi cô sôû döõ lieäu. Ngoaøi ra, baïn cuõng phaûi xaùc nhaän tröôùc khi thöïc thi haønh ñoäng xoaù maåu tin choïn baèng caùch khai baùo ñoaïn Javascript nhö sau: function isok() { return confirm('Are you sure to delete?'); } Sau ñoù goïi trong bieán coá onsubmit cuûa form nhö sau: 2. CAÄP NHAÄT NHIEÀU MAÅU TIN Töông töï nhö tröôøng hôïp Delete, khi baïn duyeät (approval) moät soá maåu tin theo moät coät döõ lieäu naøo ñoù, chaúng haïn, trong tröôøng hôïp naøy chuùng ta cho pheùp söû duïng nhöõng saûn phaåm ñaõ qua söï ñoàng yù cuûa nhaø quaûn lyù thì coät döõ lieäu Activate cuûa baûng tbltems coù giaù trò laø 1. Ñeå laøm ñieàu naøy, tröôùc tieân baïn lieät keâ danh saùch saûn phaåm nhö hình 10-3. PHP VAØ DATABASE 9-6 COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Hình 10-3: Lieät keâ danh saùch saûn phaåm duyeät hay chöa Töông töï nhö trong tröôøng hôïp delete, baïn khai baùo trang doUpdate nhö sau: ::Welcome to PHP and mySQL Cap nhat mau tin <?php require("dbcon.php"); $strid=$chon; $strid=str_replace(",","','",$strid); $strfrom=""; if(isset($from_)) { $strfrom=$HTTP_POST_VARS{"from_"}; } $strtype=""; if(isset($type)) { $strtype=$HTTP_POST_VARS{"type"}; } $stSQL=""; if($strfrom"") { switch($strfrom) { case "items": $stSQL ="update tblItems set Activate=1 where ItemID in('".$strid."')"; PHP VAØ DATABASE 9-7 COMPUTER LEARNING CENTER WWW.HUUKHANG.COM break; } if($stSQL!="") { $result = mysql_query($stSQL, $link); if($result) $affectrow=mysql_affected_rows(); mysql_close($link); } } ?> So mau tin cap nhat 3. KEÁT LUAÄN Trong baøi naøy, chuùng ta tìm hieåu chöùc naêng xoaù, caäp nhaät nhieàu maåu tin baèng caùch söû duïng theû input loaïi checkbox cuøng teân vaø khaùc giaù trò, baøi keá tieáp chuùng ta tieáp tuïc tìm hieåu veà chöùc naêng ñaêng nhaäp trong PHP.

Các file đính kèm theo tài liệu này:

  • pdfcanbanphp_9493_5959.pdf