Lập trình web động với PHP & MySQL

Tài liệu Lập trình web động với PHP & MySQL: 1 (Tài liệu lƣu hành nội bộ) TRƢỜNG ĐẠI HỌC SƢ PHẠM KỸ THUẬT HƢNG YÊN KHOA CÔNG NGHỆ CÔNG NGHỆ THÔNG TIN LẬP TRÌNH WEB ĐỘNG VỚI PHP & MYSQL Hƣng Yên 2 3 MỤC LỤC BÀI 1. BÀI 01: TỔNG QUAN VỀ PHP VÀ MYSQL .............................. 7 1.1 Ngôn ngữ PHP và MySQL ...................................................................................... 7 1.1.1 Ngôn ngữ lập mã ngồn mở ................................................................................................ 7 1.1.2 Các đặc điểm PHP ............................................................................................................. 8 1.1.3 Cơ bản về hệ quản trị CSDL mySQL ................................................................................. 8 1.2 Cơ bản về cú pháp ngôn ngữ PHP.......................................................................... 8 1.2.1 Thẻ (tag) trng PHP .................................................................................................

pdf128 trang | Chia sẻ: putihuynh11 | Lượt xem: 647 | Lượt tải: 1download
Bạn đang xem trước 20 trang mẫu tài liệu Lập trình web động với PHP & MySQL, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
1 (Tài liệu lƣu hành nội bộ) TRƢỜNG ĐẠI HỌC SƢ PHẠM KỸ THUẬT HƢNG YÊN KHOA CÔNG NGHỆ CÔNG NGHỆ THÔNG TIN LẬP TRÌNH WEB ĐỘNG VỚI PHP & MYSQL Hƣng Yên 2 3 MỤC LỤC BÀI 1. BÀI 01: TỔNG QUAN VỀ PHP VÀ MYSQL .............................. 7 1.1 Ngôn ngữ PHP và MySQL ...................................................................................... 7 1.1.1 Ngôn ngữ lập mã ngồn mở ................................................................................................ 7 1.1.2 Các đặc điểm PHP ............................................................................................................. 8 1.1.3 Cơ bản về hệ quản trị CSDL mySQL ................................................................................. 8 1.2 Cơ bản về cú pháp ngôn ngữ PHP.......................................................................... 8 1.2.1 Thẻ (tag) trng PHP ............................................................................................................ 8 1.2.2 Biến, hằng trng PHP .......................................................................................................... 9 1.2.3 Tán tử trng PHP ...............................................................................................................10 1.2.4 Lệnh chú thíc trng PHP ....................................................................................................12 1.3 Cài đặt và cấu hình máy chủ Apache server ........................................................ 13 BÀI 2. BÀI 02: CẤU TRÚC ĐIỀU KHIỂN TRNG PHP ....................... 15 2.1 Cấu trúc rẽ nhánh ................................................................................................. 15 2.1.1 Câu lệnh if else .................................................................................................................15 2.1.2 Câu lênh swicth case ........................................................................................................16 2.2 Cấu trúc lặp For .................................................................................................... 17 2.2.1 Cấu trúc của for ................................................................................................................17 2.2.2 Cấu trúc foreach ...............................................................................................................18 2.3 Cấu trúc lặp While ................................................................................................ 18 2.3.1 cấu trúc whie ....................................................................................................................18 2.3.2 Cấu trúc do while .............................................................................................................19 2.4 Lệnh ngắt trng PHP .............................................................................................. 20 2.4.1 Lệnh Break .......................................................................................................................20 2.4.2 Lệnh Cntinue ....................................................................................................................21 BÀI 3. BÀI 03: LÀM VIỆC VỚI DỮ LIỆU FRM .................................. 22 3.1 Thẻ PHP kết hợp với HTML ................................................................................ 22 3.1.1 Thẻ PHP ...........................................................................................................................22 3.1.2 Ví dụ về kết hợp PHP và HTML .......................................................................................22 3.2 Nhận dữ liệu từ web .............................................................................................. 22 3.2.1 Nhận dữ liệu he POST ......................................................................................................22 3.2.2 Nhận dữ liệu the GET .......................................................................................................23 3.3 Xuất dữ liệu về phía trình duyệt ........................................................................... 24 3.3.1 Hàm Print .........................................................................................................................24 4 3.3.2 Hàm Echo ........................................................................................................................ 25 3.4 Nhúng trang PHP và trng trang PHP ...................................................................25 3.4.1 Hàm Include và include_one ............................................................................................ 25 3.4.2 Hàm Require và Require_one ........................................................................................... 25 BÀI 4. LÀM VIỆC VỚI DỮ LIỆU MẢNG TRNG PHP ....................... 27 4.1 Định nghĩa mảng trng PHP ...................................................................................27 4.2 Khái niệm mảng kết hợp trng PHP.......................................................................27 4.3 Thao tác các phần tử trong mảng .........................................................................27 4.3.1 Đa mảng trong PHP ......................................................................................................... 30 BÀI 5. LÀM VIỆC VỚI DỮ LIỆU KIỂU XÂU CHUỖI ....................... 32 5.1 Chuỗi trng PHP .....................................................................................................32 5.2 các tán tử tha tác chuỗi ..........................................................................................32 5.3 Hàm tha tác chuỗi ..................................................................................................32 BÀI 6. LÀM VIỆC VỚI FILE TỆP VÀ UPLAD FILE ......................... 36 6.1 Đƣờng dẫn trng PHP .............................................................................................36 6.1.1 Cấu trúc đường dẫn .......................................................................................................... 36 6.1.2 Tha tác với các thư mục thông qua đường dẫn .................................................................. 36 6.2 Thao tác với File tệp ..............................................................................................37 6.2.1 Các hàm tha tác với File tệp ............................................................................................. 37 6.2.2 Đọc file ............................................................................................................................ 38 6.2.3 Ghi file............................................................................................................................. 39 6.3 Uplad File trng PHP ..............................................................................................40 6.3.1 Hàm Uplad file tệp ........................................................................................................... 40 6.3.2 Xây dựng ứng dụng Uplad file tệp .................................................................................... 40 BÀI 7. LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG .......................................... 43 7.1 Khái niệm về hàm và cách khai báo......................................................................43 7.1.1 Khái niệm về hàm và sử dụng lại mã ................................................................................ 43 7.1.2 Cách khai báo hàm trng PHP ............................................................................................ 43 7.1.3 Hàm tự định nghĩa với giá trị trả về .................................................................................. 43 7.1.4 Gọi lại hàm trng PHP ....................................................................................................... 44 7.2 Lập tình hƣớng đối tƣợng trng PHP .....................................................................44 7.3 Khai bá đối tƣợng và cách xây dựng .....................................................................45 7.3.1 Cấu trúc đối tượng ........................................................................................................... 45 7.3.2 Các thành phần của đối tượng........................................................................................... 46 5 7.3.3 Một số từ khóa trng lập trình hướng đối trượng .................................................................47 7.3.4 Xây dựng lớp ...................................................................................................................48 BÀI 8. LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG 02 ..................................... 51 8.1 Sử dụng đối tƣợng trng PHP ................................................................................ 51 8.1.1 Từ khóa New, this ............................................................................................................51 8.1.2 Tán tử tha tác thành phần “->” ..........................................................................................51 8.1.3 Sử dụng các thuộc tính và hàm .........................................................................................51 8.2 Kế thừa trng PHP ................................................................................................. 53 8.3 Lớp interface ......................................................................................................... 53 8.4 Hàm abstract ......................................................................................................... 54 BÀI 9. LẬP TRÌNH CƠ SỞ DỮ LIỆU VỚI MYSQL ............................ 56 9.1 Giới thiệu về hệ quản trị CSDL MySQL .............................................................. 56 9.2 Các lệnh cơ bản trên MySQL ............................................................................... 57 9.3 Kết nối cơ sở dữ liệu MySQL từ PHP .................................................................. 58 9.4 Đọc dữ liệu từ MySQL .......................................................................................... 59 BÀI 10. LẬP TRÌNH CƠ SỞ DỮ LIỆU VỚI MYSQL 2 ....................... 62 10.1 Ghi dữ liệu và CSDL mySQL ............................................................................. 62 10.2 Cập nhật dữ liệu .................................................................................................. 62 10.3 Xóa dữ liệu .......................................................................................................... 63 10.4 Một số phƣơng pháp kết nối CSDL .................................................................... 63 BÀI 11. BIẾN ĐỐI TƢỢNG TRNG PHP ............................................... 68 11.1 Giới thiệu về các biến phía server....................................................................... 68 11.2 Làm việc với Server ............................................................................................ 69 11.3 Làm việc Sessin ................................................................................................... 70 11.4 Làm việc Cookie .................................................................................................. 72 BÀI 12. TỔNG QUAN VỀ LẬP TRÌNH CDEIGNITER ...................... 75 12.1 Giới thiệu về Cdeigniter ...................................................................................... 75 12.2 Đặc điểm của CodeIgniter .................................................................................. 75 12.3 Cài đặt CodeIgniter............................................................................................. 75 12.4 Cấu trúc một mdule trong CodeIgniter ............................................................. 76 12.5 Viết ứng dụng đầu tiên ........................................................................................ 78 12.6 Thực hiện kết nối CSDL ..................................................................................... 78 6 BÀI 1. TL 1 VIẾT ỨNG DỤNG CƠ BẢN TRÊN PHP ......................... 82 BÀI 2. TL 2 BÀI TÁN TÌM KIẾM TRÊN XÂU .................................... 83 BÀI 3. TL 3 VIẾT WEBSITE THE MÔ HÌNH HƢỚNG ĐỐI TƢỢNG 84 BÀI 4. TL 4 SỬ DỤNG CƠ SỞ DỮ LIỆU THIẾT KẾ WEBSITE ....... 85 BÀI 5. TL 5 XÂY DỰNG GIỎ HÀNG TRÊN PHP ............................... 86 BÀI 1. TH 01 CÁC PHÉP TÁN CƠ BẢN .............................................. 87 BÀI 2. TH 02. THA TÁC VỚI MẢNG VÀ XÂU .................................. 91 BÀI 3. TH 03 LÀM VIỆC VỚI DỮ LIỆU TỆP ..................................... 96 BÀI 4. TH 04 LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG ............................ 102 BÀI 5. TH 05: LẬP TRÌNH CƠ SỞ DỮ LIỆU .................................... 111 BÀI 6. TH 06: LẬP TRÌNH CƠ SỞ DỮ LIỆU .................................... 115 BÀI 7. TH 07. SỬ DỤNG BIẾN ĐỐI TƢỢNG TRONG PHP ............ 121 BÀI 8. TH 08. CÀI ĐẶT KHAI THÁC CODEIGNITER................... 126 7 PHẦN LÝ THUYẾT Bài 1. Tổng quan về PHP và MySQL 1.1 Ngôn ngữ PHP và MySQL PHP Hypertext Preprcessr (PHP) là một ngôn ngữ lập trình ch phép các lập trình viên web tạ các nội dung động mà tương tác với Database. Về cơ bản, PHP được sử dụng để phát triển các ứng dụng phần mềm trên web. PHP khởi đầu như là một dự án mã nguồn mở nhỏ, nhưng the đà phát triển, ngày càng nhiều người thấy rằng nó càng ngày càng hữu ích. PHP được phát triển từ một sản phẩm có tên là PHP/FI. PHP/FI d Rasmus Lerdrf tạ ra năm 1994, ban đầu được xem như là một tập cn đơn giản của các mã kịch bản Perl để the dõi tình hình truy cập đến bản sơ yếu lý lịch của ông trên mạng. Ông đã đặt tên ch bộ mã kịch bản này là "Persnal Hme Page Tls". Khi cần đến các chức năng rộng hơn, Rasmus đã viết ra một bộ thực thi bằng C lớn hơn để có thể truy vấn tới Database và giúp ch người sử dụng phát triển các ứng dụng web đơn giản. Rasmus đã quyết định công bố mã nguồn của PHP/FI ch mọi người xem, sử dụng cũng như sửa các lỗi có trng nó, đồng thời cải tiến mã nguồn. PHP đã phát triển rất nhanh chóng và trở thành ngôn ngữ lập trình web phổ biến nhất trên thế giới hiện nay. 1.1.1 Ngôn ngữ lập mã ngồn mở Một số đặc điểm quan trọng của PHP:  PHP viết hồi qui của "PHP: Hypertext Preprcessr".  PHP là ngôn ngữ lập trình kịch bản viết ch máy chủ mà được nhúng trng HTML. Nó được sử dụng để quản lý nội dụng động, Database, Sessin tracking,  Nó được tích hợp với một số Database thông dụng như MySQL, PstgreSQL, racle, Sybase, Infrmix, và Micrsft SQL Server.  PHP thực thi rất tuyệt vời, đặc biệt khi được biên dịch như là một Apache Mdule trên Unix side. MySQL Server, khi được khởi động, thực thi các truy vấn phức tạp với các tập hợp kết quả khổng lồ trng thời gian Recrd-setting.  PHP hỗ trợ một số lượng rộng rãi các gia thức lớn như PP3, IMAP, và LDAP. PHP4 bổ sung sự hỗ trợ ch Java và các cấu trúc đối tượng phân phối (CM và CRBA).  Cú pháp PHP là giống C.  PHP thực hiện các hàm hệ thống, ví dụ: từ các file trên một hệ thống, nó có thể tạ, mở, đọc, ghi và đóng chúng.  PHP có thể xử lý các frm, ví dụ: thu thập dữ liệu từ file, lưu dữ liệu và một file, thông qua email bạn có thể gửi dữ liệu, trả về dữ liệu tới người dùng.  Bạn có thể thêm, xóa, sửa đổi các phần tử bên trng Database của bạn thông qua PHP.  Truy cập các biến Ckie và thiết lập Ckie.  Sử dụng PHP, bạn có thể hạn chế người dùng truy cập và một số trang trng Website của bạn. 5 đặc trưng quan trọng làm PHP trở thành ngôn ngữ phổ biến:  Đơn giản hóa  Hiệu quả  Bả mật ca  Linh động  Thân thiện 8 1.1.2 Các đặc điểm PHP MySQL là một RDBMS nhanh và dễ dàng để sử dụng. MySQL đang được sử dụng ch nhiều công việc kinh danh từ lớn tới nhỏ. MySQL được phát triển, được công bố, được hỗ trợ bởi MySQL AB, là một công ty của Thụy Điển. MySQL trở thành khá phổ biến vì nhiều lý d:  MySQL là mã ngồn mở. Vì thế, để sử dụng nó, bạn chẳng phải mất một xu nà.  MySQL là một chương trình rất mạnh mẽ.  MySQL sử dụng một Frm chuẩn của ngôn ngữ dữ liệu nổi tiếng là SQL.  MySQL làm việc trên nhiều Hệ điều hành và với nhiều ngôn ngữ như PHP, PERL, C, C++, Java,  MySQL làm việc nhanh và khỏe ngay cả với các tập dữ liệu lớn.  MySQL rất thân thiện với PHP, một ngôn ngữ rất đáng giá để tìm hiểu để phát triển Web.  MySQL hỗ trợ các cơ sở dữ liệu lớn, lên tới 50 triệu hàng hặc nhiều hơn nữa trng một bảng. Kích cỡ file mặc định được giới hạn ch một bảng là 4 GB, nhưng bạn có thể tăng kích cỡ này (nếu hệ điều hành của bạn có thể xử lý nó) để đạt tới giới hạn lý thuyết là 8 TB. MySQL là có thể điều chỉnh. Giấy phép GPL mã nguồn mở ch phép lập trình viên sửa đổi phần mềm MySQL để phù hợp với môi trường cụ thể của họ. 1.1.3 Cơ bản về hệ quản trị CSDL mySQL MySQL là một RDBMS nhanh và dễ dàng để sử dụng. MySQL đang được sử dụng ch nhiều công việc kinh danh từ lớn tới nhỏ. MySQL được phát triển, được công bố, được hỗ trợ bởi MySQL AB, là một công ty của Thụy Điển. MySQL trở thành khá phổ biến vì nhiều lý d:  MySQL là mã ngồn mở. Vì thế, để sử dụng nó, bạn chẳng phải mất một xu nà.  MySQL là một chương trình rất mạnh mẽ.  MySQL sử dụng một Frm chuẩn của ngôn ngữ dữ liệu nổi tiếng là SQL.  MySQL làm việc trên nhiều Hệ điều hành và với nhiều ngôn ngữ như PHP, PERL, C, C++, Java,  MySQL làm việc nhanh và khỏe ngay cả với các tập dữ liệu lớn.  MySQL rất thân thiện với PHP, một ngôn ngữ rất đáng giá để tìm hiểu để phát triển Web.  MySQL hỗ trợ các cơ sở dữ liệu lớn, lên tới 50 triệu hàng hặc nhiều hơn nữa trng một bảng. Kích cỡ file mặc định được giới hạn ch một bảng là 4 GB, nhưng bạn có thể tăng kích cỡ này (nếu hệ điều hành của bạn có thể xử lý nó) để đạt tới giới hạn lý thuyết là 8 TB. MySQL là có thể điều chỉnh. Giấy phép GPL mã nguồn mở ch phép lập trình viên sửa đổi phần mềm MySQL để phù hợp với môi trường cụ thể của họ. 1.2 Cơ bản về cú pháp ngôn ngữ PHP 1.2.1 Thẻ (tag) trng PHP PHP Parser cần một cách để phân biệt PHP cde với các phần tử khác trng trang web. Kỹ thuật thực hiện điều này được biết với cái tên: "Escaping t PHP". Có 4 cách để làm điều này là: Thẻ PHP chính tắc Phng cách thẻ PHP hiệu quả và được sử dụng phổ biến nhất là: <?php //Cde php ?> 9 Đây là cách duy nhất để chắc chắn rằng các thẻ của php sẽ luôn luôn được thông dịch một cách chính xác. Thẻ mở ngắn gọn (SGML-style) Các thẻ này có dạng như sau: <? //Cde php ?> Để sử dụng thẻ này bạn thực hiện 1 hặc 2 việc sau để kích hạt PHP để nhận ra các thẻ này: Chọn tùy chọn cấu hình --enable-shrt-tags khi bạn đang xây dựng PHP. Thiết lập cài đặt shrt_pen_tag trng tệp php.ini thành n. Tùy chọn này phải vô hiệu hóa để phân tích cú pháp XML với PHP, bởi vì cú pháp tương tự được sử dụng ch các thẻ XML. Thẻ ASP-style Thẻ ASP-style bắt chước các thẻ được sử dụng bởi Active Server Pages để phác họa các khối cde. Các thẻ ASP-style có dạng như sau: <% //Cde php %> Để sử dụng thẻ ASP-style, bạn sẽ cần thiết lập tùy chọn cấu hình trng tệp php.ini. Thẻ HTML script Thẻ script trng HTML có dạng như sau: //Cde php Hiển thị văn bản trên trình duyệt - Lệnh print và lệnh ech Trng PHP, bạn có thể sử dụng hai lệnh print và ech để in ra màn hình một chuỗi nà đó. Với các bạn mới học PHP thì hai lệnh này không khác nhau nhiều và bạn có thể sử dụng lệnh nà cũng được. Ví dụ: Ví dụ chương trình PHP <?php ech "Ví dụ minh họa lệnh ech! "; print "Ví dụ minh họa lệnh print!"; ?> Kêt quả: 1.2.2 Biến, hằng trng PHP PHP Parser cần một cách để phân biệt PHP cde với các phần tử khác trng trang web. Kỹ thuật thực hiện điều này được biết với cái tên: "Escaping t PHP". Có 4 cách để làm điều này là: Thẻ PHP chính tắc Phng cách thẻ PHP hiệu quả và được sử dụng phổ biến nhất là: 10 <?php //Cde php ?> Đây là cách duy nhất để chắc chắn rằng các thẻ của php sẽ luôn luôn được thông dịch một cách chính xác. Thẻ mở ngắn gọn (SGML-style) Các thẻ này có dạng như sau: <? //Cde php ?> Để sử dụng thẻ này bạn thực hiện 1 hặc 2 việc sau để kích hạt PHP để nhận ra các thẻ này: Chọn tùy chọn cấu hình --enable-shrt-tags khi bạn đang xây dựng PHP. Thiết lập cài đặt shrt_pen_tag trng tệp php.ini thành n. Tùy chọn này phải vô hiệu hóa để phân tích cú pháp XML với PHP, bởi vì cú pháp tương tự được sử dụng ch các thẻ XML. Thẻ ASP-style Thẻ ASP-style bắt chước các thẻ được sử dụng bởi Active Server Pages để phác họa các khối cde. Các thẻ ASP-style có dạng như sau: <% //Cde php %> Để sử dụng thẻ ASP-style, bạn sẽ cần thiết lập tùy chọn cấu hình trng tệp php.ini. Thẻ HTML script Thẻ script trng HTML có dạng như sau: //Cde php Hiển thị văn bản trên trình duyệt - Lệnh print và lệnh ech Trng PHP, bạn có thể sử dụng hai lệnh print và ech để in ra màn hình một chuỗi nà đó. Với các bạn mới học PHP thì hai lệnh này không khác nhau nhiều và bạn có thể sử dụng lệnh nà cũng được. Ví dụ: Ví dụ chương trình PHP <?php ech "Ví dụ minh họa lệnh ech! "; print "Ví dụ minh họa lệnh print!"; ?> Kêt quả: 1.2.3 Tán tử trng PHP Tán tử là gì? Câu trả lời đơn giản từ biểu thức 4 + 5 là bằng 9. Ở đây, 4 và 5 được gọi là các tán hạng và + được gọi là tán tử. Ngôn ngữ PHP hỗ trợ các kiểu tán tử sau: 11  Tán tử số học  Tán tử s sánh  Tán tử lgic (hay tán tử quan hệ)  Tán tử gán  Tán tử điều kiện (hặc tán tử 3 ngôi) Tán tử số học trng PHP Bảng dưới liệt kê các tán tử số học được hỗ trợ bởi ngôn ngữ PHP: Giả sử biến A giữ giá trị 10, biến B giữ 20 thì: Ví dụ Tán tử Miêu tả Ví dụ + Cộng hai tán hạng A + B kết quả là 30 - Trừ tán hạng thứ hai từ tán hạng đầu A - B kết quả là -10 * Nhân hai tán hạng A * B kết quả là 200 / Phép chia B / A kết quả là 2 % Phép lấy số dư B % A kết quả là 0 ++ Tán tử tăng, tăng giá trị tán hạng thêm một đơn vị A++ kết quả là 11 -- Tán tử giảm, giảm giá trị tán hạng đi một đơn vị A-- kết quả là 9 Tán tử s sánh trng PHP Bảng dưới liệt kê các tán tử s sánh được hỗ trợ bởi ngôn ngữ PHP. Giả sử biến A giữ giá trị 10, biến B giữ giá trị 20, thì: Ví dụ Tán tử Miêu tả Ví dụ == Kiểm tra nếu 2 tán hạng bằng nhau hay không. Nếu bằng thì điều kiện là true. (A == B) là không true. != Kiểm tra 2 tán hạng có giá trị khác nhau hay không. Nếu không bằng thì điều kiện là true. (A != B) là true. > Kiểm tra nếu tán hạng bên trái có giá trị lớn hơn tán hạng bên phải hay không. Nếu lớn hơn thì điều kiện là true. (A > B) là không true. < Kiểm tra nếu tán hạng bên trái nhỏ hơn tán hạng bên phải hay không. Nếu nhỏ hơn thì là true. (A < B) là true. >= Kiểm tra nếu tán hạng bên trái có giá trị lớn hơn hặc bằng giá trị của tán hạng bên phải hay không. Nếu đúng là true. (A >= B) là không true. <= Kiểm tra nếu tán hạng bên trái có giá trị nhỏ hơn hặc bằng tán hạng bên phải hay không. Nếu đúng là true. (A <= B) là true. Tán tử lgic trng PHP Bảng dưới đây chỉ rõ tất cả các tán tử lgic được hỗ trợ bởi ngôn ngữ PHP. Giả sử biến A có giá trị 10 và biến B có giá trị 20, thì: Tán tử Miêu tả Ví dụ and Được gọi là tán tử Lgic AND. Nếu cả hai tán hạng là true thì điều kiện trở thành true (A and B) là true. r Được gọi là tán tử Lgic R. Nếu một trng hai tán hạng là (A r B) là true. 12 Ví dụ Tán tử gán trng PHP Dưới đây là những tán tử gán được hỗ trợ bởi ngôn ngữ PHP: Ví dụ Tán tử Miêu tả Ví dụ = Tán tử gán đơn giản. Gán giá trị tán hạng bên phải ch tán hạng trái C = A + B sẽ gán giá trị của A + B và trng C += Thêm giá trị tán hạng phải tới tán hạng trái và gán giá trị đó ch tán hạng trái C += A là tương đương với C = C + A -= Trừ đi giá trị tán hạng phải từ tán hạng trái và gán giá trị này ch tán hạng trái C -= A là tương đương với C = C - A *= Nhân giá trị tán hạng phải với tán hạng trái và gán giá trị này ch tán hạng trái C *= A là tương đương với C = C * A /= Chia tán hạng trái ch tán hạng phải và gán giá trị này ch tán hạng trái C /= A là tương đương với C = C / A %= Lấy phần dư của phép chia tán hạng trái ch tán hạng phải và gán ch tán hạng trái C %= A là tương đương với C = C % A Tán tử điều kiện trng PHP Có nhiều hơn một tán tử được gọi là tán tử điều kiện. Đầu tiên, nó ước lượng một biểu thức là true hặc false và sau đó thực thi một trng hai lệnh đã ch tùy thuộc và kết quả của việc ước lượng. Tán tử điều kiện có cú pháp như sau: Ví dụ Tán tử Miêu tả Ví dụ ? : Biểu thức điều kiện Nếu điều kiện là true ? Thì giá trị X : Nếu không thì giá trị Y 1.2.4 Lệnh chú thíc trng PHP Cmmet trng PHP Một cmment là 1 phần của chương trình chỉ có tác dụng ch người đọc cde và nó sẽ bị lược bỏ trước khi hiển thị kết quả chương trình. Có 2 kiểu cmment trng PHP: Cmment đơn dòng − Nói chung, chúng thường được sử dụng ch các giải thích ngắn gọn hặc các chú ý liên quan đến nội bộ cde. Dưới đây là ví dụ về cmment đơn dòng: <?php # Đây là ví dụ của một cmment # Ví dụ cmment thứ hai // Một ví dụ về cmment đơn dòng khác print "Ví dụ minh họa cmment đơn dòng"; ?> đúng thì điều kiện trở thành true && Được gọi là tán tử Lgic AND. Nếu cả hai tán hạng là true thì điều kiện trở thành true (A && B) là true. || Được gọi là tán tử Lgic R. Nếu một trng hai tán hạng là đúng thì điều kiện trở thành true (A || B) là true. ! Được gọi là tán tử Lgic NT. Sử dụng để đả ngược trạng thái lgic của tán hạng. Nếu điều kiện là true thì tán tử Lgic NT sẽ ch kết quả là false !(A && B) là false. 13 Cmment đa dòng − Được sử dụng để giải thích chi tiết khi cần thiết. Dạng cmment này khá giống trng C. Đây là ví dụ về cmment đa dòng. <?php /* Ví dụ một cmment đa dòng: Web: utehy.edu.vn Mục đích: minh họa lại cmment viết trên nhiều dòng Ngôn ngữ: PHP */ print "Ví dụ minh họa cmment đơn dòng"; ?> 1.3 Cài đặt và cấu hình máy chủ Apache server Để cài đặt PHP, các bạn có thể cài đặt từng gói riêng lẻ (PHP, Apache, Mysql). Hặc sử dụng gói phần mềm tích hợp là : Appserv - Win - 2.5.8 (Tên phần mềm là Appserv, dành ch phiên bản windw, phiên bản 2.5.8). Bước 1: Bạn cài đặt bình thường bằng cách nhấp và file exe. Bước 2: Phần mềm sẽ ch bạn chọn cần cài những mdule nà. Hãy giữ nguyên tất cả như hình dưới và nhấn next. Bước 3: Trng gia diện dưới: Server Name: bạn nhập và: lcalhst 14 Email: Bạn nhập và email của bạn: Prt: Mặc định là 80, tuy nhiên nếu máy bạn đã cài IIS thì có thể chỉnh thành 81 để chạy dịch vụ bên appserv. Nhấn next để qua trang kế tiếp. Bước 4: Trng gia diện bên dưới ta điền thông tin như sau: Enter rt passwrd: Bạn gõ và rt Re-enter rt passwrd: nhập lại 1 lần nữa rt Các cấu hình bên dưỡi giữ nguyên. Ở phần: Enable InnDB bạn đánh dấu và. Để MYSQL sử lý được các ứng dụng có bật chế độ InnDB. Nhấn next để hàn tất việc cài đặt. Sau khi cài đặt xng bạn gõ và trình duyệt : mà ra gia diện bên dưới, tức là bạn đã cài đặt thành công appserv. 15 Bài 2. Cấu trúc điều khiển trng PHP 2.1 Cấu trúc rẽ nhánh Là biểu thức dùng kiểm tra 1 sự kiện. Nếu chúng thỏa điều kiện đó thì sẽ thực thi một hành động. Ngược lại sẽ là một hành động khác. Các lệnh if, elseif else và switch trng được sử dụng để điều khiển luồng dựa trên các điều kiện khác nhau. Bạn có thể sử dụng các lệnh điều kiện trng cde của bạn để điều khiển luồng. PHP hỗ trợ 3 lệnh điều khiển luồng sau: Lệnh if...else − Sử dụng lệnh này nếu bạn muốn thực thi một tập hợp cde khi một điều kiện là true và tập cde khác nếu điều kiện là không true. Lệnh elseif − Được sử dụng với lệnh ifelse để thực thi một tập hợp cde nếu một trng các điều kiện là true. Lệnh switch − Được sử dụng nếu bạn muốn lựa chọn một trng các khối cde để được thực thi. Lệnh switch được sử dụng để tránh sử dụng một khối ifelseifelse dài. 2.1.1 Câu lệnh if else Nếu bạn muốn thực thi một đạn cde nếu một điều kiện là true và khối cde khác nếu một điều kiện là false, bạn sử dụng lệnh ifelse trng PHP. Cú pháp if (điều_kiện) phần cde này được thực thi nếu điều kiện là true else phần cde này được thực thi nếu điều kiện là false Ví dụ sau sẽ ch kết quả "Chúc cuối tuần vui vẻ!" nếu hôm nay là Friday. Nếu không, nó sẽ ch kết quả "Chúc một ngày vui vẻ!": <?php $d=date("D"); if ($d=="Fri") ech "Chúc cuối tuần vui vẻ!"; else 16 ech "Chúc một ngày vui vẻ!"; ?> Lệnh elseif trng PHP Nếu bạn muốn thực thi một khối cde nếu một trng các điều kiện là true, thì bạn nên sử dụng lệnh elseif trng PHP. Cú pháp if (điều_kiện_1) phần cde này được thực thi nếu điều kiện 1 là true; elseif (điều_kiện_2) phần cde này được thực thi nếu điều kiện 2 là true; else phần cde này được thực thi nếu các điều kiện là false; Ví dụ Ví dụ sau sẽ ch kết quả "Chúc cuối tuần vui vẻ!" nếu hôm nay là Friday, và "Chủ nhật vui vẻ!" nếu hôm nay là Sunday. Nếu không, nó sẽ ch kết quả "Chúc một ngày vui vẻ!"trng Thư viện C: <?php $d=date("D"); if ($d=="Fri") ech "Chúc cuối tuần vui vẻ!"; elseif ($d=="Sun") ech "Chủ nhật vui vẻ!"; else ech "Chúc một ngày vui vẻ!"; ?> 2.1.2 Câu lênh swicth case Nếu muốn lựa chọn một trng nhiều khối cde để được thực thi, bạn nên sử dụng lệnh switch trng PHP. Lệnh switch được sử dụng để tránh các khối ifelseifelse dài. Cú pháp switch (biểu_thức) { case nhãn_1: phần cde này được thực thi nếu biểu_thức = nhãn_1 break; case nhãn_2: phần cde này được thực thi nếu biểu_thức = nhãn_2 break; ... default: phần cde này được thực thi nếu biểu_thức là khác với nhãn_1, nhãn_2, ... } Ví dụ Cơ chế làm việc của lệnh switch là: Đầu tiên, nó ước lượng biểu thức đã ch, sau đó tìm một nhãn để s khớp với giá trị kết quả đã ước lượng. Nếu tìm thấy một s khớp, thì cde được liên kết với nhãn sẽ được thực thi hặc nếu không có nhãn khớp với kết quả đó, thì lệnh sẽ thực thi bất kỳ khối cde mặc định đã ch nà. 17 <?php $d=date("D"); switch ($d) { case "Mn": ech "Hôm nay là Thứ Hai"; break; case "Tue": ech "Hôm nay là Thứ Ba"; break; case "Wed": ech "Hôm nay là Thứ Tư"; break; case "Thu": ech "Hôm nay là Thứ Năm"; break; case "Fri": ech "Hôm nay là Thứ Sáu"; break; case "Sat": ech "Hôm nay là Thứ Bảy"; break; case "Sun": ech "Hôm nay là Chủ Nhật"; break; default: ech "Còn ngày này là thứ mấy ???"; } ?> 2.2 Cấu trúc lặp For 2.2.1 Cấu trúc của for Lệnh for được sử dụng khi bạn biết trước bao nhiêu lần bạn muốn thực thi một lệnh hoặc một khối lệnh trong PHP. Cú pháp 18 for (khởi_tạo; điều_kiện; tăng_giảm_giá_trị) { phần code để thực thi } khởi_tạo: được sử dụng để thiết lập giá trị bắt đầu cho biến đếm số lần lặp. Một biến có thể được khai báo ở đây cho mục đích này và tên truyền thống của nó là $i. Ví dụ Ví dụ sau tạo 5 lần lặp và thay đổi giá trị đã gán của hai biến qua mỗi lần lặp. <?php $a = 0; $b = 0; for( $i=0; $i<5; $i++ ) { $a += 10; $b += 5; } echo ("Sau vòng lặp, giá trị a=$a và b=$b" ); ?> 2.2.2 Cấu trúc foreach Lệnh vòng lặp foreach được sử dụng để lặp qua một mảng. Với mỗi lần lặp, giá trị cho phần tử mảng hiện tại được gán cho $value và con trỏ mảng được di chuyển tới phần tử kế tiếp và trong lần lặp tiếp theo thì phần tử kế tiếp sẽ được xử lý. Cú pháp foreach (Mảng as giá_trị) { phần code để thực thi } Ví dụ Bạn thử ví dụ sau để liệt kê các giá trị của một mảng. <?php $array = array( 1, 2, 3, 4, 5); foreach( $array as $value ) { echo "Giá trị phần tử mảng là $value "; } ?> 2.3 Cấu trúc lặp While 2.3.1 cấu trúc whie Lệnh while trong PHP sẽ thực thi một khối code nếu và miễn là một điều kiện đã xác định là true. Nếu điều kiện đã cho là true, thì khối code sẽ được thực thi. Sau khi code được thực thi, thì biểu thức điều kiện sẽ được ước lượng một lần nữa, và vòng lặp tiếp tục thực thi tới khi biểu thức điều kiện là false. 19 Cú pháp while (điều_kiện) { phần code được thực thi nếu điều kiện là true } Ví dụ Ví dụ sau giảm giá trị một biến qua mỗi lần lặp và tăng giá trị biến đếm tới khi nó đạt đến 10, thì sự ước lượng là false và vòng lặp kết thúc. <?php $i = 0; $num = 30; while( $i < 10) { $num--; $i++; } echo ("Vòng lặp dừng tại giá trị i = $i và num = $num" ); ?> 2.3.2 Cấu trúc do while Lệnh dowhile sẽ thực thi một khối code ít nhất một lần. Sau đó nó sẽ lặp lại vòng lặp miễn là điều kiện là true. Cú pháp do { phần code để thực thi } while (điều_kiện); Ví dụ Ví dụ sau sẽ lượng gia giá trị của i ít nhất một lần, và sau đó nó sẽ tiếp tục tăng biến i miễn là nó có giá trị nhỏ hơn 10. 20 <?php $i = 0; do{ $i++; } while( $i < 10 ); echo ("Vòng lặp dừng tại giá trị i = $i" ); ?> 2.4 Lệnh ngắt trng PHP 2.4.1 Lệnh Break Từ khóa break trong PHP được sử dụng để kết thúc sự thực thi của một vòng lặp một cách đột ngột. Lệnh break được đặt bên trong khối lệnh. Nó trao bạn toàn quyền điều khiển bất cứ khi nào bạn muốn thoát khỏi vòng lặp. Sau khi ra khỏi vòng lặp, lệnh ngay sau vòng lặp đó sẽ được thực thi. Ví dụ sau kiểm tra điều kiện true khi giá trị biến đếm = 3 và vòng lặp kết thúc. <?php $i = 0; while( $i < 10) { $i++; if( $i == 3 )break; } echo ("Vòng lặp dừng tại giá trị i = $i" ); ?> 21 2.4.2 Lệnh Cntinue Từ khóa continue trong PHP được sử dụng để dừng vòng lặp hiện tại nhưng không kết thúc vòng lặp đó. Giống lệnh break, lệnh continue được đặt bên trong khối lệnh đang chứa code mà vòng lặp đó thực thi, được đặt trước bởi một biểu thức kiểm tra điều kiện. Khi gặp lệnh continue, phần còn lại của vòng lặp bị bỏ qua và tiếp tục vòng lặp tiếp theo. Vòng lặp sau in ra giá trị của một mảng, nếu thỏa mãn điều kiện thì in ra, ngược lại thì bỏ qua và tiếp tục vòng lặp. <?php $array = array( 1, 2, 3, 4, 5); foreach( $array as $value ) { if( $value == 3 )continue; echo "Gia tri cua phan tu mang la $value "; } ?> 22 Bài 3. Làm việc với dữ liệu Frm 3.1 Thẻ PHP kết hợp với HTML 3.1.1 Thẻ PHP Trong trang web có sử dụng HTML và PHP. Để chạy được mã code php trong trang web thì phần mở rộng của website phải là *.php. Nội dung của phần lập trình PHP được đặt trong cặp từ khóa: <?php //Code php ?> Việc xây dựng website dựa trên PHP là phương pháp biến đổi mã nguồn php ra dạng hiển thị HTML thông qua trình biên dịch. 3.1.2 Ví dụ về kết hợp PHP và HTML Ket hop PHP và HTML <?php echo ‘xin chao cac ban’; ?> 3.2 Nhận dữ liệu từ web 3.2.1 Nhận dữ liệu he POST Phương thức POST có tính bảo mật hơn vì dữ liệu gửi phải thông qua một form HTML nên nó bị ẩn, nghĩa là chúng ta không thể thấy các giá trị đó được. Client Gửi Lên Với phương thức GET thì dữ liệu được thấy trên URL thì phương thức POST thì hoàn toàn ngược lại, POST sẽ gửi dữ liệu qua một cái form HTML và các giá trị sẽ được định nghĩa trong các input gồm các kiểu (textbox, radio, checkbox, password, textarea, hidden) và được nhận dang thông qua tên (name) của các input đó. Server nhận dữ liệu Tất cả các dữ liệu gửi bằng phương thức POST đều được lưu trong một biến toàn cục $_POST do PHP tự tạo ra, vì thế để lấy dữ liệu thì bạn chỉ cần lấy trong biến này là được. Cũng như lưu ý với các bạn là trước khi lấy phải dùng hàm isset($bien) để kiểm tra có hay không nhé. if (isset($_POST['id'])){ $id = $_POST['id']; } Ví dụ Bước 1: Bạn tạo một file post.php nằm trong thư mục WWW của Vertrigo Server hoặc thư mục htdocs của Xampp, sau đó nhập đoạn code tạo form này vào: 23 Username: password: Bước 2: Bạn mở trình duyệt gõ đường dẫn localhost/post.php và ngắm nghía cái form mình vừa tạo ra nhé. Bước 3: Bạn sửa lại đoạn mã HTML đó bằng cách thêm vào một đoạn mã PHP như sau: Username: password: <?php // Nếu người dùng click vào button Gửi Dữ Liệu // Vì button đó tên là form_click nên đó cũng là // tên của key nằm trong biến $_POST if (isset($_POST['form_click'])){ echo 'Tên đăng nhập là: ' . $_POST['username']; echo ''; echo 'Mật khẩu là: ' . $_POST['password']; } ?> Bước 4: Chạy thử và kiểm tra kết quả. 3.2.2 Nhận dữ liệu the GET Phương thức GET rất dễ nhận thấy đó là trên URL sẽ kèm theo dữ liệu mà chúng ta muốn gửi. Client gửi lên Phương thức GET là phương thức gửi dữ liệu thông qua đường dẫn URL nằm trên thanh địa chỉ của Browser. Server sẽ nhận đường dẫn đó và phân tích trả về kết quả cho bạn. Server sẽ phân tích tất cả những thông tin đằng sau dấu hỏi (?) chính là phần dữ liệu mà Client gửi lên. Ví dụ: Với URL freetuts.net?id=12 thì Server sẽ nhận được giá trị id = 12 Để truyền nhiều dữ liệu lên Server ta dùng dấu & để phân cách giữa các cặp giá trị. Giả sử tôi muốn truyền id = 12 và title = „method_get‟ thì URL sẽ có dạng freetuts.net?id=12&title=method_get. Lưu ý với các bạn là vị trí các cặp giá trị không quan trọng, nghĩa là cặp title có thể nằm trước cặp id cũng được. Server nhận dữ liệu Tất cả các dữ liệu mà Client gửi lên bằng phương thức GET đều được lưu trong một biến toàn cục mà PHP tự tạo ra đó là biến $_GET, biến này là kiểu mảng kết hợp lưu trữ danh sách dữ liệu từ client gửi lên theo quy luật key => value. Ví du với URL freetuts.net?id=12&title=method_get thì dữ liệu sẽ được lưu trong biến $_GET dưới dạng: $_GET = array( 'id' => '12', 'title' => 'method_get'); 24 Vì thế để lấy dữ liệu thì ta chỉ cần làm như sau: // Lấy ID $id = $_GET['id']; echo $id; // kết quả là 12 // Lấy title $title = $_GET['title']; echo $title; // kết quả là method_get Ví dụ: Bạn hãy tạo một file get.php nằm trong thư mục WWW của Vertrigo Server hoặc thư mục htdocs của Xampp, sau đó bạn copy đoạn code này vào: echo 'Dữ Liệu Chúng Tôi Nhận Được Là '; foreach ($_GET as $key => $val) { echo '' . $key . ' => ' . $val . ''; } Sau đó bạn ra trình duyệt gõ đường dẫn sau: localhost/get.php?id=12&title=method_get Chạy và kiểm tra kết quả. Lƣu ý: Trước khi lấy một dữ liệu nào đó bạn phải kiểm tra tồn tại không không mới lấy nhé, vì nếu bạn không kiểm tra thì giả sử người dùng không truyền dữ liệu qua mà bạn lại nhận thì sẽ bị báo lỗi ngay. Để kiểm tra ta dùng hàm isset($tenbien) trong php. Ví dụ: if (isset($_GET['id'])){ $id = $_GET['id']; } 3.3 Xuất dữ liệu về phía trình duyệt 3.3.1 Hàm Print print cũng là một language construct, và có thể sử dụng có dấu hoặc không dấu: print or print(). Display Strings Ví dụ dưới đây chỉ ra bằng cách nào hiển thị chuỗi khác nhau với lệnh print ( cho phép chuỗi chứa các thẻ HTML) Example <?php print "PHP is fun!"; print "Hello world!"; print "I'm about to learn PHP!"; ?> Ví dụ dưới chỉ ra bằng cách nào hiển thị chuỗi và biến với lệnh print: <?php $txt1="Learn PHP"; $txt2="utehy.edu.vn"; $cars=array("Volvo","BMW","Toyota"); print $txt1; print ""; print "Study PHP at $txt2"; print "My car is a {$cars[0]}"; ?> 25 3.3.2 Hàm Echo echo là một language construct từ này sẽ giữ nguyên không dịch, nó sẽ cho phép sử dụng có dấu hoặc không dấu ngoặc đơn: echo or echo(). Hiển thị xâu Ví dụ dưới đây sẽ cho thấy làm thế nào để hiển thị chuỗi khác nhau với lệnh echo (cho phép chuỗi chứa các thẻ HTML). <?php echo "PHP is fun!"; echo "Hello world!"; echo "I'm about to learn PHP!"; echo "This", " string", " was", " made", " with multiple parameters."; ?> Hiển thị biến Ví dụ dưới đây chỉ ra bằng cách nào hiển thị chuỗi và biến với lệnh echo: <?php $txt1="Learn PHP"; $txt2="W3Schools.com"; $cars=array("Volvo","BMW","Toyota"); echo $txt1; echo ""; echo "Study PHP at $txt2"; echo "My car is a {$cars[0]}"; ?> 3.4 Nhúng trang PHP và trng trang PHP 3.4.1 Hàm Include và include_one Hàm include() lấy tất cả text trong file đã chỉ định và sao chép chúng vào trong file có sử dụng hàm include. Nếu có bất kì vấn đề gì trong quá trình nạp file, thì hàm include() sinh ra một cảnh báo nhưng script vẫn tiếp tục thực thi. Giả sử bạn muốn tạo một menu chung cho Website. Khi đó tạo một file là menu.php trong htdocs với nội dung sau: Home - PHP - JAVA - HTML Giờ tạo một số trang tùy bạn và chèn file này để tạo header. Ví dụ, test.php có thể có nội dung sau. Ví dụ minh họa cách include file trong PHP! 3.4.2 Hàm Require và Require_one Hàm require() lấy tất cả text trong file đã chỉ định và sao chép chúng vào file có sử dụng hàm require. Nếu có bất kì vấn đề gì xảy ra trong quá trình nạp file thì hàm require() sinh ra một lỗi nghiêm trọng (Fatal Error) và ngăn chặn sự thực thi của script. Vì vậy không có sự khác nhau nào giữa require() và include() ngoài việc chúng xử lý các điều kiện lỗi. Chúng tôi khuyên khích bạn sử dụng hàm require() thay cho include(), bởi vì script không nên tiếp tục thực thi nếu các file bị mất hay sai tên. 26 Bạn có thể sử dụng ví dụ trên với hàm require() và nó sẽ sinh ra cùng một kết quả. Nhưng nếu bạn thử làm theo 2 ví dụ sau, và nếu với một file không tồn tại, bạn sẽ nhận các kết quả khác nhau. Ví dụ minh họa cách include file trong PHP! Lưu chương trình trên trong một file có tên là test.php trong htdocs, sau đó mở trình duyệt và gõ địa chỉ sẽ cho kết quả lỗi cảnh báo. Giờ hãy thử ví dụ trên với hàm require() trong PHP. Ví dụ minh họa cách include file trong PHP! File thực thi lần này tạm dừng và không hiển thị gì. 27 Bài 4. Làm việc với dữ liệu mảng trng PHP 4.1 Định nghĩa mảng trng PHP Một mảng là một cấu trúc dữ liệu mà lưu giữ một hoặc nhiều kiểu giá trị giống nhau trong một giá trị đơn. Ví dụ, nếu bạn muốn lưu 100 số, thì thay vì định nghĩa 100 biến, nó là dễ dàng để định nghĩa một mảng có độ dài là 100. Có 3 loại mảng khác nhau và mỗi giá trị mảng được truy cập bởi sử dụng một ID, mà được gọi là chỉ mục mảng. Mảng số nguyên − Một mảng có chỉ mục ở dạng số. Giá trị được lưu trữ và truy cập tuyến tính. Mảng liên hợp − Một mảng với chỉ mục ở dạng chuỗi kí tự. Mảng này lưu trữ các giá trị phần tử bằng sự kết hợp với các giá trị key thay vì trong một trật tự chỉ mục tuyến tính nghiêm ngặt như mảng số nguyên. Mảng đa chiều − Một mảng chứa một hoặc nhiều mảng và các giá trị được truy cập bằng cách sử dụng nhiều chỉ mục. 4.2 Khái niệm mảng kết hợp trng PHP Các mảng loại này có thể lưu trữ các số, các chuỗi và bất kỳ đối tượng nào, nhưng chỉ mục mảng thì vẫn được biểu diễn bởi các số. Theo mặc định, chỉ mục mảng bắt đầu từ 0. Ví dụ Mảng này có thể lưu trữ số, chuỗi và bất kì đối tượng nào, nhưng chỉ mục của chúng sẽ được biểu diễn ở dạng số. Theo mặc định chỉ mục mảng bắt đầu từ 0. Dưới đây là ví dụ minh họa cách tạo và truy cập mảng số nguyên trong PHP. Ở đây, chúng ta đã sử dụng hàm array() để tạo mảng. Hàm này được giải thích trong chương phụ: Hàm mảng trong PHP ở trên. <?php /* Phương thức thứ nhất để tạo mảng trong PHP. */ $numbers = array( 1, 2, 3, 4, 5); foreach( $numbers as $value ) { echo "Giá trị phần tử mảng là $value "; } /* Phương thức thứ hai để tạo mảng trong PHP. */ $numbers[0] = "one"; $numbers[1] = "two"; $numbers[2] = "three"; $numbers[3] = "four"; $numbers[4] = "five"; foreach( $numbers as $value ) { echo "Giá trị phần tử mảng là $value "; } ?> 4.3 Thao tác các phần tử trong mảng array_change_key_case($array, $case) 28 Chuyển tất cả các key trong mảng $array sang chữ hoa nếu $case = 1 và sang chữ thường nếu $case = 0. Ta có thể dùng hằng số CASE_UPPER thay cho số 1 và CASE_LOWER thay cho số 0. $array = array( 'chu_thuong' =--> 'Hello' ); $array = array_change_key_case($array, CASE_UPPER); var_dump($array); // Kết quả là: 'CHU_THUONG' => 'Hello' array_combine($array_keys, $array_values) Trộn 2 mảng $array_keys và $array_values thành một mảng kết hợp với $array_keys là danh sách keys, $array_value là danh sách value tương ứng với key. Điều kiện là 2 mảng này phải bằng nhau. $array_keys = array('a', 'b', 'c'); $array_values = array('one', 'two', 'three'); print_r(array_combine($array_keys, $array_values)); /* kết quả: Array( [a] => one [b] => two 1 => three; )*/; array_count_values ( $array ) Đếm số lần xuất hiện của các phần tử giống nhau trong mảng $array và trả về một mảng kết quả. $array = array(1, "hello", 1, "world", "hello"); print_r(array_count_values($array)); /* Kết quả: Array ( [1] => 2; [hello] => 2; [world] => 1 )*/ array_push(&$array, $add_value1, $add_value2, $add_value) Thêm vào cuối mảng $array một hoặc nhiều phần tử với các giá trị tương ứng biến $add_value truyền vào. $stack = array("orange", "banana"); array_push($stack, "apple", "raspberry"); print_r($stack); /* Kết quả Array ( [0] => orange [1] => banana [2] => apple [3] => raspberry ) */ array_pop(&$array) Xóa trong mảng $array phần tử cuối cùng và trả về phần tử đã xóa. $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_pop($stack); print_r($stack); /* Biến $stack sẽ còn 3 giá trị 29 Array ( [0] => orange [1] => banana [2] => apple ) Còn biến $fruit sẽ có giá trị là raspberry */ array_pad($array, $size, $value) Kéo dãn mảng $array với kích thước là $size, và nếu kích thước truyền vào lớn hơn kích thước mảng $array thì giá trị $value được thêm vào, ngược lại nếu kích thước truyền vào nhỏ hơn kích thước mảng $array thì sẽ giữ nguyên. Nếu muốn giãn ở cuối mảng thì $size có giá trị dương, nếu muốn giãn ở đầu mảng thì $size có giá trị âm. $input = array(12, 10, 9); // Giãn thành 5 phần tử ở cuối mảng và // các phần tử giãn có giá trị là 5: $result = array_pad($input, 5, 0); // Kết quả là array(12, 10, 9, 0, 0) // Giản thành 7 phần tử ở đầu mảng // và các phần tử giãn có giá trị -1 $result = array_pad($input, -7, -1); // Kết quả là array(-1, -1, -1, -1, 12, 10, 9) // Giãn thành 2 phần tử nhưng mảng $input // lại có 3 phần tử nên sẽ không được xử lý $result = array_pad($input, 2, "noop"); // Kết quả giữ nguyên array(12, 10, 9) array_shift(&$array) Xóa phần tử đầu tiên ra khỏi mảng $array và trả về phần tử vừa xóa đó. $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_shift($stack); print_r($stack); /* Kết quả biến $stack Array ( [0] => banana [1] => apple [2] => raspberry ) Kết quả biến $fruit là orange */ array_unshift(&$array, $value1, $value2, ) Thêm các giá trị $value1, $value2, vào đầu mảng $array. $queue = array("orange", "banana"); array_unshift($queue, "apple", "raspberry"); print_r($queue); /*Kết quả là: * Array ( [0] => apple [1] => raspberry [2] => orange [3] => banana * ) */ is_array($variable). Kiểm tra một biến có phải kiểu mảng hay không, kết quả trả về true nếu phải và false nếu không phải. $bien1 = array(); $bien2 = ''; // Kết quả trả về true var_dump($bien1); 30 // Kết quả trả về false var_dump($bien2); in_array($needle, $haystackarray) Kiểm tra giá trị $needle có nằm trong mảng $haystackarray không. trả về true nếu có và flase nếu không có. $haystackarray = array('hello', 'nobody', 'freetuts.net'); // Kết quả là true var_dump(in_array('freetuts.net', $haystackarray)); // Kết quả là false var_dump(in_array('net', $haystackarray)); array_key_exists($key, $searcharray) Kiểm tra key $key có tồn tại trong mảng $searcharray không, trả về true nếu có và false nếu không có. $searcharray = array( 'username' => 'thehalfheart', 'email' => 'thehalfheart@gmail.com', 'website' => 'freetuts.net' ); // Trả về true var_dump(array_key_exists('username', $searcharray)); // Trả về false var_dump(array_key_exists('otherkey', $searcharray)); array_unique( $array ) Loại bỏ giá trị trùng trong mảng $array. $array = array('freetuts.net', 'freetuts.net'); $result = array_unique($array); // Kết quả mảng chỉ còn 1 giá trị freetuts.net var_dump($result); array_values ($array ) Chuyển mảng $array sang dạng mảng chỉ mục. $array = array( 'username' => 'thehalfheart', 'password' => 'somepasss' ); var_dump(array_values($array)); /* Kêt quả của mảng là array( 0 => thehalfheart, 1 => somepasss ) */ 4.3.1 Đa mảng trong PHP Các mảng liên hợp là khá giống với các mảng số nguyên về tính năng, nhưng chúng khác nhau về chỉ mục. Mảng liên hợp sẽ có chỉ mục ở dạng chuỗi để mà bạn có thể thiết lập một liên kết mạnh giữa key và value. Để lưu giữ lương của nhân viên trong một mảng, một mảng chỉ mục số sẽ không là lựa chọn tốt nhất. Thay vào đó, chúng ta sẽ sử dụng các tên nhân viên như là các key trong mảng liên hợp, và value sẽ là lương tương ứng của họ. Chú ý: Đừng giữ mảng liên hợp bên trong dấu trích dẫn kép trong khi in, nếu không thì nó sẽ không trả về bất kỳ giá trị nào. Ví dụ <?php /* Phương thức thứ nhất để tạo mảng liên hợp. */ $luong_nhan_vien = array("hoang" => 2000, "manh" => 1000, "huong" => 500); echo "Lương của nhân viên hoang là ". $luong_nhan_vien['hoang'] . ""; 31 echo "Lương của nhân viên manh là ". $luong_nhan_vien['manh']. ""; echo "Lương của nhân viên huong là ". $luong_nhan_vien['huong']. ""; /* Phương thức thứ hai để tạo mảng liên hợp. */ $luong_nhan_vien['hoang'] = "high"; $luong_nhan_vien['manh'] = "medium"; $luong_nhan_vien['huong'] = "low"; echo "Mức lương của nhân viên hoang là ". $luong_nhan_vien['hoang'] . ""; echo "Mức lương của nhân viên manh là ". $luong_nhan_vien['manh']. ""; echo "Mức lương của nhân viên huong là ". $luong_nhan_vien['huong']. ""; ?> Mảng đa chiều trong PHP Trong một mảng đa chiều, mỗi phần tử cũng có thể là một mảng. Và mỗi phần tử trong một mảng phụ có thể là một mảng, và cứ tiếp tục như vậy. Các giá trị trong mảng đa dạng được truy cập bởi sử dụng nhiều chỉ mục. Ví dụ Trong ví dụ này, chúng ta tạo một mảng hai chiều để lưu giữ điểm 3 môn học của 3 sinh viên. Ví dụ này là một mảng đa chiều, bạn có thể tạo một mảng số nguyên theo cách tương tự. <?php $diemThi = array( "hoang" => array ( "monVatLy" => 7, "monToan" => 8, "monHoa" => 9 ), "manh" => array ( "monVatLy" => 7, "monToan" => 9, "monHoa" => 6 ), "huong" => array ( "monVatLy" => 8, "monToan" => 8, "monHoa" => 9 ) ); /* truy cập các giá trị của mảng đa chiều */ echo "Điểm thi môn Vật Lý của hoang là: " ; echo $diemThi['hoang']['monVatLy'] . ""; echo "Điểm thi môn Toán của manh là: "; echo $diemThi['manh']['monToan'] . ""; echo "Điểm thi môn Hóa của huong là: " ; echo $diemThi['huong']['monHoa'] . ""; ?> 32 Bài 5. Làm việc với dữ liệu kiểu xâu chuỗi 5.1 Chuỗi trng PHP Chuỗi là các dãy ký tự, giống như "Trường ĐH SPKT Hưng Yên". Ví dụ: $string_1 = "Vi du mot chuoi trong PHP"; $string_2 = "Hoc PHP co ban va nang cao tai VietJack"; $string_0 = ""; // ví dụ một chuỗi không có ký tự nào Khi sử dụng chuỗi với dấu nháy đơn, nó sẽ được đối xử như là các hằng, và in ra chính chuỗi đó. Trong khi sử dụng với dấu nháy kép, nó thay thế các biến với giá trị của chúng cũng như thông dịch các dãy ký tự cụ thể. <?php $bien_chuoi = "name"; $bien_chuoi_hang = 'Chuỗi $bien_chuoi sẽ không được in!\\n'; print($bien_chuoi_hang); print ""; $bien_chuoi_hang = "Chuỗi $bien_chuoi sẽ được in!\\n"; print($bien_chuoi_hang); ?> Không có giới hạn về độ dài của chuỗi, có thể dài tùy ý nếu bộ nhớ cho phép. Các chuỗi được giới hạn bởi các dấu nháy kép được PHP xử lý bằng 2 cách sau đây:  Các chuỗi kí tự bắt đầu với (\) được thay thế với một kí tự đặc biệt  Các biến (bắt đầu với $) được thay thế bằng biểu diễn chuỗi của giá trị của nó. Các quy tắc thay thế:  \n được thay thế bằng ký tự newline (dòng mới)  \r được thay thế bởi ký tự carriage-return, được hiểu là đưa con trỏ về đầu dòng nhưng không xuống dòng.  \t được thay thế bởi ký tự tab  \$ được thay thế bằng một dấu $  \" được thay thế bằng một dấu nháy kép "  \\ được thay thế bằng một dấu nháy đơn \ 5.2 các tán tử tha tác chuỗi Để nối hai chuỗi với nhau, bạn sử dụng toán tử “.” (dấu chấm) trong PHP như sau: <?php $string1="VietJack"; $string2=" Team"; echo $string1 . " " . $string2; ?> Nếu bạn chú ý vào đoạn code trên, bạn sẽ thấy rằng, chúng ta đã sử dụng toán tử nối chuỗi hai lần. Đây là bởi vì chúng ta đã chèn một chuỗi thứ ba. Giữa hai biến chuỗi, chúng ta thêm một chuỗi với một ký tự đơn, là một khoảng trống, để phân biệt hai biến. 5.3 Hàm tha tác chuỗi Hàm strlen(string): được sử dụng để tính chiều dài của chuỗi Ví dụ: <?php echo strlen("Hello world!"); ?> //kết quả in ra:12 ?> 33 Hàm str_word_count(string $string [, int $format = 0 [, string $charlist ]]) : đếm tổng số từ có trong chuỗi string: chỉ định chuỗi để kiểm tra format: chỉ định kiểu giá trị trả về của hàm str_word_count(). Các giá trị này có thể là: 0 - Mặc định - trả về số lượng từ đếm được 1 - Trả về một mảng chứa các từ trong chuỗi 2 - Trả về một mảng với key là vị trí của từ trong chuỗi và value là từ trong chuỗi charlist: chỉ định các ký tự đặc biệt sẽ được xem như một từ trong chuỗi Ví dụ: <?php print_r(str_word_count("Hello world!",1)); ?> //kết quả in ra: Array ( [0] => Hello [1] => world ) ?> Hàm strtoupper(string): đổi chữ thường thành hoa. Hàm strtolower(string): đổi chữ hoa thành thường. Hàm ucfirst(string): đổi chữ in ký tự đầu tiên của chuỗi. Hàm ucwords(string): đổi chữ in ký tự đầu tiên của mỗi từ trong chuỗi. Hàm trim($string, $character): Xóa ký tự $character nằm ở đầu và cuối chuỗi $str, nếu ta không nhập $character thì mặc định nó hiểu là xóa khoảng trắng. Hàm ltrim($string, $character): Tương tự như trim nhưng chỉ xóa bên trái Hàm rtrim($string, $character): Tương tự như trim nhưng chỉ xóa bên phải Hàm tìm kiếm và thay thế chuỗi Hàm substr( string $string , int $start [, int $length ] ): cắt ra một phần của chuỗi từ vị trí start một đoạn được chỉ định bằng tham số length string: chuỗi nhập vào đẻ cắt ra chuỗi con start: nếu start là một số dương, chuỗi được trả về sẽ bắt đầu từ vị trí start (ký tự đầu tiên của chuỗi được tính là 0). Nếu start là một số âm chuỗi con trả về sẽ được cắt từ vị trí start tính từ cuối chuỗi. length: độ dài của chuỗi trả về. Mặc định length được tính đến cuối chuỗi length>0: độ dài của chuỗi trả về được tính từ đầu chuỗi length<0: độ dài của chuỗi trả về được tính từ cuối chuỗi Ví dụ: <?php // Positive numbers: echo substr("Hello world",10).""; echo substr("Hello world",1).""; echo substr("Hello world",3).""; echo substr("Hello world",7).""; echo ""; // Negative numbers: echo substr("Hello world",-1).""; echo substr("Hello world",-10).""; echo substr("Hello world",-8).""; echo substr("Hello world",-4).""; ?> ?> Kết quả trả về: d ello world lo world orld d ello world lo world orld 34 Hàm explode($delimiter, $string): chuyển một chuỗi string thành một mảng các phần tử với ký tự tách mảng là delimiter. Ví dụ: <?php $str = 'programming and digital marketing training'; // sử dụng dấu cách làm kí tự tách các phần từ từ chuỗi đưa vào mảng var_dump(explode(' ', $str)); ?> /*Kết quả array 0 => 'programming', 1 => 'and', 2 => 'digital' , 3 => 'marketing', 4 => 'training' Hàm implode($delimiter, $piecesarray): ngược với hàm explode, nó chuyển một mảng $piecesarray thành chuỗi và mỗi phần tử trong mảng được nối với nhau bởi chuỗi $delimiter Ví dụ: <?php $array = array('province', 'district', 'town'); $comma_separated = implode(",", $array); echo $comma_separated; ?> //kết quả in ra: //province,district,town Hàm strstr( $string, $needle): Tách một chuỗi bắt đầu từ $needle cho đến hết chuỗi. Ví dụ: <?php $website = 'hoclaptrinhweb.org'; $domain = strstr($website, '.'); echo $domain; // prints org ?> Hàm strpos($string, $needle): Tìm vị trí của chuỗi $needle trong chuỗi $string, kết quả trả về vị trí đầu tiên của $needle nếu tìm thấy và false nếu không tìm thấy. Ví dụ: $mystring = 'abc'; $findme = 'b'; $pos = strpos($mystring, $findme); echo $pos; //kết quả: 1 Tìm độ dài chuỗi trong PHP - Hàm strlen() trong PHP Hàm strlen() trong PHP được sử dụng để tìm độ dài của một chuỗi. Ví dụ sau sẽ tìm độ dài của chuỗi "VietJack Team!": <?php echo strlen("VietJack Team!"); ?> kết quả: 35 Độ dài của một chuỗi thường được sử dụng trong vòng lặp hoặc các hàm khác, khi nó là quan trọng để biết khi nào chuỗi kết thúc (ví dụ: trong một vòng lặp, chúng ta muốn dừng vòng lặp sau ký tự cuối cùng của chuỗi). Tìm ký tự hoặc chuỗi trong chuỗi - Hàm strpos() trong PHP Hàm strops() được sử dụng để tìm một chuỗi hoặc ký tự bên trong một chuỗi. Nếu một so khớp được tìm thấy, hàm này sẽ trả về vị trí của so khớp đầu tiên. Nếu không tìm thấy một so khớp nào, nó sẽ trả về FALSE. Giờ chúng ta tìm chuỗi "eam" trong chuỗi "VietJack Team!": <?php echo strpos("VietJack Team!","eam"); ?> kết quả: Như bạn thấy, vị trí của chuỗi "eam" trong chuỗi trên là 10. Lý do là 10 mà không là 11, bởi vì vị trí đầu tiên của chuỗi là 0, chứ không phải là 1. 36 Bài 6. Làm việc với File Tệp và uplad File 6.1 Đƣờng dẫn trng PHP Khi làm việc với cấu trúc folder thì chúng ta có hai khái niệm đó là đường dẫn tương đối và đường dẫn tuyệt đối. Và trong lập trình web PHP cũng vậy, bạn sẽ phải hiểu rõ hai khía niệm này thì lỡ khi đi phỏng vấn người ta có hỏi thì biết đường trả lời nhé. 6.1.1 Cấu trúc đƣờng dẫn Đường dẫn trong PHP được chia làm 2 phần: Đƣờng dẫn tƣơng đối: Đường dẫn tương đối là đường dẫn có điểm xuất phát từ thư mục hiện tại đang đứng. Ví dụ bạn đang ở folder public và bạn muốn trỏ tới một file tên là index.php nằm trong thư mục public thì lúc này đường dẫn chúng ta sẽ là /index.php. Để di chuyển lùi một folder trong đường dẫn tương đối thì ta sử dụng ký tự ../. Giả sử ta đang ở file cate.php nằm trong thư mục course. Bây giờ muốn truy xuất qua file post.php nằm trong thư mục blog thì lúc này đường dẫn tương đối sẽ là: 1 ../blog/post.php Còn truy xuất file post.php nằm trong thư mục course sẽ cùng cấp nên đường dẫn lúc này là: 1 /post.php Khi các bạn sử dụng PHP để đọc hay viết file thì phải sử dụng đường dẫn tương đối. Đƣờng dẫn tuyệt đối: Đường dẫn tuyệt đối là đường dẫn có đầu đủ cấu trúc của URL của một website. Ví dụ: Các đường dẫn tuyệt đối sau Tương tự với đường dẫn tương đối bạn muốn trở về một folder thì hãy sử dụng ký tự ../. Ví dụ: sẽ tương đương với Thông thường khi chúng ta lấy nội dung từ một website khác thì sẽ sử dụng đường dẫn tuyệt đối bởi vì code PHP không có quyền truy cập trực tiếp một file ở Server khác. 6.1.2 Tha tác với các thƣ mục thông qua đƣờng dẫn Thay đổi thƣ mục gốc Để thay đổi thư mục gốc, ta dùng hàm chroot Cú pháp: php buffer start bool chroot ( string directory) php buffer end Hàm này trả về true nếu như thư mục gốc được chuyển đổi thành thư mục có đường dẫn là directory. Thay đổi thƣ mục hiện hành Cú pháp: php buffer start bool chdir ( string directory) php buffer end Thay đổi thư mục hiện hành sang thư mục có đường dẫn là directory. Hàm trả về TRUE nếu thành công, ngược lại là FALSE. Trả về thƣ mục hiện hành Để lấy đường dẫn của thư mục hiện hành, ta dùng hàm getcwd: php buffer start string getcwd () 37 php buffer end Hiển thị danh sách các tệp và thƣ mục con của một thƣ mục nào đó: Để làm điều này, ta dùng hàm scandir php buffer start <?php $dir = '/source'; $files1 = scandir($dir); print_r($files1); ?> php buffer end Chú ý: đây chính là cách mà remview hoặc backdoor hay sử dụng để duyệt qua các tệp và thư mục trên máy chủ. Tạo một thƣ mục mới Để tạo một thư mục mới trên máy chủ, ta dùng hàm mkdir(): bool mkdir ( string pathname [, int mode [, bool recursive [, resource context]]]) php buffer start <?php mkdir("/uploads/images"); // tạo một thư mục images trong thư mục uploads ở thư mục gốc của website. ?> php buffer end Xoá một thƣ mục Để xoá một thư mục mới trên máy chủ, ta dùng hàm rmdir(): bool rmdir (string pathname) php buffer start <?php rmdir("/uploads/images"); // Xoá thư mục images trong thư mục uploads ở thư mục gốc của website. ?> 6.2 Thao tác với File tệp 6.2.1 Các hàm tha tác với File tệp Hàm fopen() của PHP được sử dụng để mở một file. Nó yêu cầu 2 tham số, tham số thứ nhất là tên file, và tham số thứ 2 là mode, tức là chế độ để hoạt động. Mode của file có thể được xác định như một trong 6 tùy chọn trong bảng sau. Mode Mục đích r Mở file và chỉ đọc. Di chuyển con trỏ file về đầu file r+ Mở file cho việc đọc và ghi. Di chuyển con trỏ về đầu file w Mở file và chỉ ghi. Di chuyển con trỏ về đầu file và cắt bỏ file về độ dài là 0. Nếu các file không tồn tại, nó sẽ cố gắng tạo ra một file. w+ Mở file cho việc đọc và ghi. Di chuyển con trỏ về đầu file và cắt bỏ file có độ dài là 0. Nếu các file không tồn tại, nó sẽ cố gắng tạo ra một file. a Mở file với mục đích chỉ ghi. Di chuyển con trỏ về cuối file Nếu các file không tồn tại, nó sẽ cố gắng tạo ra một file. a+ Mở file với mục đích đọc và ghi. Di chuyển con trỏ về cuối file Nếu các file không tồn tại, nó sẽ cố gắng tạo ra một file. Nếu cố gắng mở một file thất bại, khi đó hàm fopen trả về một giá trị false, nếu không thì nó sẽ trả về một con trỏ file được sử dụng cho việc tiếp tục đọc hoặc ghi file đó. 38 Sau khi tạo một thay đổi cho file đã mở, việc quan trong bây giờ là đóng nó bởi sử dụng hàm fclose(). Hàm fclose() yêu cầu một con trỏ file như là một tham số của nó và sau đó trả về true nếu việc đóng thành công và false nếu ngược lại. 6.2.2 Đọc file Khi một file được mở bằng cách sử dụng hàm fopen(), nó có thể được đọc với một hàm fread() trong PHP. Hàm này yêu cầu 2 tham số. Chúng phải là con trỏ file và độ dài của file tính bằng đơn vị byte. Độ dài của file có thể được biết bằng cách sử dụng hàm filesize() trong PHP, nó nhận tên file như một tham số và trả lại kích cỡ của file bằng đơn bị byte. Bạn theo các bước sau để đọc một file với PHP:  Mở file sử dụng hàm fopen().  Lấy độ dài file sử dụng hàm filesize().  Đọc nội dung file sử dụng hàm fread().  Đóng file sử dụng hàm fclose(). Giả sử bạn có một tmp.txt có nội dung sau: Ví dụ dưới đây gán nội dung của một text file cho một biến, sau đó hiển thị nội dung của chúng trên trang web. Đọc file trong PHP <?php $filename = "tmp.txt"; $file = fopen( $filename, "r" ); if( $file == false ) { echo ( "Xảy ra lỗi khi mở file!!!" ); exit(); } $filesize = filesize( $filename ); $filetext = fread( $file, $filesize ); fclose( $file ); echo ( "Kích cỡ của file là: $filesize byte " ); echo ( "Dưới đây là nội dung của file: " ); echo ( "$filetext" ); ?> kết quả: 39 6.2.3 Ghi file Một file mới có thể được ghi hoặc text có thể được phụ thêm vào một file đang tồn tại bằng cách sử dụng hàm fwrite() trong PHP. Hàm này yêu cầu 2 tham số: con trỏ file và chuỗi dữ liệu để được ghi. Một tham số integer thứ 3 tùy ý có thể được thêm vào để xác định độ dài của dữ liệu sẽ ghi. Nếu tham số thứ 3 được thêm vào, việc ghi sẽ dừng lại sau khi đã được đạt tới độ dài đã xác định. Ví dụ sau tạo một text file mới, và ghi một đoạn text ngắn vào phần đầu của nó. Sau khi đóng file này, sự tồn tại của file này được xác nhận bởi hàm file_exist(), mà sẽ nhận tên file như một tham số. <?php $filename = "tmp.txt"; $file = fopen( $filename, "w" ); if( $file == false ) { echo ( "Xảy ra lỗi khi mở file" ); exit(); } fwrite( $file, "Ví dụ ghi file trong PHP.\n" ); fclose( $file ); ?> Ghi file trong PHP <?php $filename = "tmp.txt"; $file = fopen( $filename, "r" ); if( $file == false ) { echo ( "Xảy ra lỗi khi mở file" ); exit(); } $filesize = filesize( $filename ); $filetext = fread( $file, $filesize ); fclose( $file ); echo ( "Kích cỡ của file là: $filesize byte " ); echo("Tên file là: $filename "); echo ( "Dưới đây là nội dung của file: " ); echo ( "$filetext" ); ?> 40 6.3 Uplad File trng PHP Một PHP script có thể sử dụng với một HTML form cho phép người dùng upload file lên Server. Đầu tiên các file này được upload lên một thư mục tạm thời, sau đó được di chuyển tới một đích bởi một PHP script. Thông tin trong trang phpinfo.php mô tả thư mục tạm thời mà được sử dụng cho các file được upload ở dạng upload_tmp_dir và kích thước giới hạn của các file có thể được upload được bắt đầu ở dạng upload_max_filesize. Các tham số này được thiết lập trong file cấu hình php.ini. 6.3.1 Hàm Uplad file tệp Khi bạn upload một file lên thì trên Server sẽ nhận được 5 thông số cho một file, và PHP sẽ dựa vào các thông số đó để tiến hành upload, các thông số đó là: name: Tên của file bạn upload type: Kiểu file mà bạn upload (hình ảnh, word, ) tmp_name: Đường dẫn đến file upload ở client error: Trạng thái của file bạn upload, 0 => không có lỗi size: Kích thước của file bạn upload Lệnh Upload file: move_uploaded_file($client_path, $server_path) $client_path: Là đường dẫn file trên máy trạm $server_path: Là đường dẫn file đến thư mục cần lưu trữ trên server 6.3.2 Xây dựng ứng dụng Uplad file tệp Tiến trình upload một file theo các bước sau:  Người dùng mở trang chứa một HTML form là một text file, một nút browse và một nút submit.  Người dùng nhấn nút browse và chọn một file để upload từ máy local.  Đường dẫn đầy đủ đến file được chọn sẽ xuất hiện trong trường văn bản, sau đó người dùng nhấn nút Submit.  File được chọn được gửi đến thư mục tạm thời trên Server.  PHP script, mà được xác định như một Form Handler trong thuộc tính action của form, sẽ kiểm tra xem file đã đến chưa và sau đó sao chép file này sang thư mục mong muốn.  PHP script xác nhận thành công tới người dùng. Thông thường khi ghi các file, nó là cần thiết cho cả thư mục tạm thời và thư mục đích để có quyền truy cập được thiết lập là cho phép ghi. Nếu một trong 2 được thiết lập là read- only, thì tiến trình sẽ thất bại. Một file được upload lên có thể là text file hoặc image file hoặc bất cứ tài liệu nào. Tạo upload form trong PHP Dưới đây là HTML code tạo một upload form. Form này có thuộc tính method được thiết lập là post và thuộc tính enctype thiết lập là multipart/form-data <?php if(isset($_FILES['image'])){ $errors= array(); $file_name = $_FILES['image']['name']; $file_size =$_FILES['image']['size']; $file_tmp =$_FILES['image']['tmp_name']; $file_type=$_FILES['image']['type']; $file_ext=strtolower(end(explode('.',$_FILES['image']['name']))); $expensions= array("jpeg","jpg","png"); 41 if(in_array($file_ext,$expensions)=== false){ $errors[]="Không chấp nhận định dạng ảnh có đuôi này, mời bạn chọn JPEG hoặc PNG."; } if($file_size > 2097152){ $errors[]='Kích cỡ file nên là 2 MB'; } if(empty($errors)==true){ move_uploaded_file($file_tmp,"images/".$file_name); echo "Thành công!!!"; } else{ print_r($errors); } } ?> kết quả: Tạo upload script trong PHP Có một biến PHP toàn cục là $_FILES. Biến này là một mảng mảng liên hợp và giữ tất cả thông tin liên quan đến file được tải lên. Vì vậy, nếu giá trị gán cho thuộc tính name của input trong form upload là file, khi đó PHP có thể tạo 5 biến sau:  $_FILES['file']['tmp_name']: File đã upload trong thư mục tạm thời trên Web Server.  $_FILES['file']['name']: Tên thực sự của file đã upload.  $_FILES['file']['size']: Kích thước tính theo byte của file đã upload.  $_FILES['file']['type']: Kiểu MIME của file đã upload.  $_FILES['file']['error']: Mã hóa lỗi liên quan đến file tải lên này. Ví dụ Dưới đây là ví dụ cho phép tải các hình ảnh và trả về kết quả ở dạng thông tin file đã được tải lên. <?php if(isset($_FILES['image'])){ $errors= array(); $file_name = $_FILES['image']['name']; $file_size =$_FILES['image']['size']; $file_tmp =$_FILES['image']['tmp_name']; $file_type=$_FILES['image']['type']; $file_ext=strtolower(end(explode('.',$_FILES['image']['name']))); $expensions= array("jpeg","jpg","png"); if(in_array($file_ext,$expensions)=== false){ 42 $errors[]="Không chấp nhận định dạng ảnh có đuôi này, mời bạn chọn JPEG hoặc PNG."; } if($file_size > 2097152){ $errors[]='Kích cỡ file nên là 2 MB'; } if(empty($errors)==true){ move_uploaded_file($file_tmp,"images/".$file_name); echo "Thành công!!!"; } else{ print_r($errors); } } ?> Gửi file có tên: Kích cỡ file : Kiểu file : 43 Bài 7. Lập trình hƣớng đối tƣợng 7.1 Khái niệm về hàm và cách khai báo Để giảm thời gian lặp lại 1 thao tác code nhiều lần, PHP hỗ trợ người lập trình việc tự định nghĩa cho mình những hàm có khả năng lặp lại nhiều lần trong website. Việc này cũng giúp cho người lập trình kiểm soát mã nguồn một cách mạch lạc. Đồng thời có thể tùy biến ở mọi trang. Mà không cần phải khởi tạo hay viết lại mã lệnh như HTML thuần. 7.1.1 Khái niệm về hàm và sử dụng lại mã Cú pháp: function functiono_name(){ //Lệnh thực thi } Tên hàm có thể là một tổ hợp bất kỳ những chứ cái, con số và dấu gạch dưới, nhưng phải bắt đầu từ chứ cái và dấu gạch dưới. Ví dụ: <?php function demo123(){ $name= array("Kenny", "Jiro", "Calvin", "Gillian"); foreach ($name as $test){ echo "$test"; } } demo123(); ?> 7.1.2 Cách khai báo hàm trng PHP Cú pháp: function function_name($gt1,$gt2){ //Hành động } Ví dụ: <?php function indulieu($text){ echo "$text"; } indulieu("welcome"); indulieu("who are you ?"); ?> 7.1.3 Hàm tự định nghĩa với giá trị trả về Cú pháp: function function_name(Có hoặc không có đối số){ //Thuc thi return giatri; } Ví dụ: <?php function tinhtong($a,$b){ $total=$a+$b; return $total; } echo tinhtong(19,31); ?> 44 7.1.4 Gọi lại hàm trng PHP PHP cung cấp nhiều hàm cho phép triệu gọi lại file. Như hàm include("URL đến file"), require("URL Đến file"). Ngoài hai cú pháp trên còn có include_once(), require_once(). Hai hàm này cũng có trách nhiệm gọi lại hàm. Những chúng sẽ chỉ gọi lại duy nhất 1 lần mà thôi. Ví dụ: Tạo file top.html với nội dung: QHOnline Layout Banner Home News Music Download Contact Tạo file body.html với nội dung: Noi dung website Tạo file bottom.html với nội dung: Copyright@ abc.com Tạo trang index.php với nội dung: <?php include("top.html"); include("body.html"); include("bottom.html"); ?> 7.2 Lập tình hƣớng đối tƣợng trng PHP Trước khi đi vào chi tiết, chúng ta nhắc lại một số khái niệm liên quan tới Lập trình hướng đối tượng. Class − Đây là một kiểu dữ liệu được định nghĩa bởi lập trình viên, mà gồm các hàm cục bộ cũng như dữ liệu cục bộ. Bạn có thể nghĩ về một Class như là một Template để tạo nhiều instance (sự thể hiện) của cùng loại (hoặc lớp) của đối tượng. Object − Một instance (sự thể hiện) riêng biệt của cấu trúc dữ liệu được định nghĩa bởi một Class. Một khi bạn định nghĩa một Class, và sau đó tạo nhiều Object của Class đó. Các Object cũng còn được biết như là Instance. 45 Biến thành viên − Đây là các biến được định nghĩa bên trong một Class. Dữ liệu này sẽ không nhìn thấy với ngoại vi lớp đó và có thể được truy cập thông qua các hàm thành viên. Những biến này được gọi là attribute của đối tượng một khi đối tượng đã được tạo. Hàm thành viên − Đây là hàm được định nghĩa bên trong một Class và được sử dụng để truy cập dữ liệu đối tượng. Tính kế thừa − Khi một lớp được định nghĩa bằng việc kế thừa hàm đang tồn tại của một lớp cha, thì nó được gọi là tính kế thừa. Ở đây, lớp con sẽ kế thừa tất cả hoặc một số hàm và biến thành viên của lớp cha. Lớp cha − Một lớp mà được kế thừa từ lớp khác. Nó cũng được gọi là một lớp cơ sở (base class) hoặc super class. Lớp con − Một lớp mà kế thừa từ lớp khác. Nó cũng được gọi là một lớp phụ hoặc một lớp kế thừa. Tính đa hình − Đây là một khái niệm hướng đối tượng mà cùng một hàm có thể được sử dụng cho các mục đích khác nhau. Ví dụ, tên hàm sẽ vẫn giống như vậy, nhưng nó nhận số tham số khác nhau và có thể thực hiện các tác vụ khác nhau. Nạp chồng (Overloading) − Một kiểu đa hình, trong đó một số hoặc tất cả toán tử có trình triển khai khác nhau phụ thuộc vào kiểu các tham số của chúng. Tương tự, các hàm cũng có thể được nạp chồng với trình triển khai khác nhau. Trừu tượng hóa dữ liệu − Bất kỳ biểu diễn dữ liệu nào mà trong đó chi tiết về trình triển khai bị ẩn. Tính bao đóng − Liên quan tới một khái niệm mà chúng ta có thể bao đóng tất cả dữ liệu và hàm thành viên với nhau để tạo thành một Object. Constructor − Liên quan tới một kiểu hàm đặc biệt mà sẽ được gọi tự động bất cứ khi nào có một sự tạo thành đối tượng từ một Class. Destructor − Liên quan tới một kiểu hàm đặc biệt mà sẽ được gọi tự động bất cứ khi nào một đối tượng bị xóa hoặc ra khỏi phạm vi. 7.3 Khai bá đối tƣợng và cách xây dựng 7.3.1 Cấu trúc đối tƣợng Cú pháp để tạo ra một class khá đơn giản: để khai báo một class ta sử dụng từ khóa class, theo sau từ khóa là tên của class và một cặp ngoặc nhọn ({ }): Sau tạo ra class, bạn có thể khởi tạo và lưu trữ chúng trong một biến bằng cách sử dụng từ khóa new: Để xem nội dung của class, bạn sử dụng hàm var_dump(): Hãy thử lại quá trình này bằng cách đặt toàn bộ các mã lệnh phía trên vào tập tin có tên là test.php và đặt nó vào trong locahost của bạn: Mở trình duyệt của bạn và chạy , bạn sẽ nhìn thấy như sau: object(MyClass)#1 (0) { } Vậy là xong, bạn đã vừa hoàn thành script hướng đối tượng (OOP) đầu tiên của bạn dưới hình thức đơn giản nhất. Form chung để định nghĩa một lớp mới trong PHP như sau: <?php class phpClass{ var $var1; var $var2 = "một giá trị hằng số"; function myfunc ($arg1, $arg2) { [..] } 46 [..] } ?> Ý nghĩa: Thủ tục class đặc biệt, được theo sau bởi tên của lớp mà bạn muốn định nghĩa. Một tập hợp dấu ngoặc móc bao quanh bất kỳ số lượng khai báo biến hoặc định nghĩa hàm nào. Các khai báo biến bắt đầu với thủ tục đặc biệt var, được theo sau bởi một tên biến theo qui ước $; chúng cũng có thể có một phép gán khởi tạo tới một giá trị hằng số. Định nghĩa hàm ở đây khá giống với các hàm standalone trong PHP, nhưng đây là hàm cục bộ cho lớp và sẽ được sử dụng để thiết lập và truy cập dữ liệu đối tượng. Ví dụ Ví dụ sau định nghĩa một lớp tên là Books. Phần 1: <?php class Books{ /* các biến thành viên */ var $price; var $title; /* các hàm thành viên */ function setPrice($par){ $this->price = $par; } function getPrice(){ echo $this->price .""; } function setTitle($par){ $this->title = $par; } function getTitle(){ echo $this->title ." "; } } ?> Biến $this là một biến đặc biệt và nó tham chiếu tới cùng đối tượng (ví dụ: chính nó). 7.3.2 Các thành phần của đối tƣợng Hàm constructor trong PHP Hàm constructor là kiểu hàm đặc biệt mà sẽ được gọi tự động bất cứ khi nào có một sự tạo thành đối tượng từ một Class. Vì thế, chúng ta lợi dụng cách vận hành này, bằng việc khởi tạo nhiều thứ thông qua các hàm constructor trong PHP. PHP cung cấp một hàm đặc biệt được gọi là __construct() để định nghĩa một constructor. Bạn có thể truyền bao nhiêu tham số tùy bạn vào trong hàm constructor này. Ví dụ sau sẽ tạo một constructor cho lớp Books và nó sẽ khởi tạo price và title cho book tại thời điểm tạo đối tượng này. function __construct( $par1, $par2 ){ $this->price = $par1; $this->title = $par2; } Bây giờ, chúng ta không cần gọi tập hợp hàm riêng rẽ để thiết lập price và title. Chúng ta chỉ có thể khởi tạo hai biến thành viên của chúng tại thời điểm tạo đối tượng. Bạn kiểm tra ví dụ sau: $tiengAnh = new Books( "English Grammar in Use", 10 ); 47 $toanCaoCap = new Books ( "Toán cao cấp 1", 15 ); $tuTuongHCM = new Books ("Tư tưởng Hồ Chí Minh", 7 ); /* lấy các giá trị đã được thiết lập */ $tiengAnh->getTitle(); $tuTuongHCM->getTitle(); $toanCaoCap->getTitle(); $tiengAnh->getPrice(); $tuTuongHCM->getPrice(); $toanCaoCap->getPrice(); kết quả: Destructor trong PHP Giống một hàm constructor trong PHP, bạn có thể định nghĩa một hàm destructor bởi sử dụng hàm __destruct(). Bạn có thể giải phóng tất cả nguồn với một destructor trong PHP. Các phƣơng thức, thuộc tính trong PHP Việc xây dựng các phương thức trong PHP có thể sử dụng các khái niệm về hàm và dùng lại mã ở trên để xây dựng. Mỗi hàm trong đối tượng sử dụng để thực hiện một nhiệm vụ nhất định và được sử dụng thông qua lời triệu gọi từ đối tượng. Thuộc tính trên PHP thường ít được sử dụng do khả năng biến tự khai báo trên PHP. 7.3.3 Một số từ khóa trng lập trình hƣớng đối trƣợng Public Trừ khi bạn xác định, nếu không thì các thuộc tính (property) và phương thức của một lớp là public. Tức là, chúng có thể được truy cập trong 3 tình huống sau:  Từ bên ngoài lớp trong đó nó được khai báo.  Từ bên trong lớp trong đó nó được khai báo.  Từ bên trong lớp ngoài mà triển khai lớp đó trong đó nó được khai báo. Tới giờ, chúng ta đã thấy tất cả thành viên là các thành viên public. Nếu bạn muốn giới hạn truy cập của các thành viên của một lớp, thì bạn định nghĩa thành viên lớp là private hoặc protected trong PHP. Private Bằng việc chỉ định một thành viên là private, bạn giới hạn độ truy cập cho lớp trong đó nó được khai báo. Thành viên private không thể được tham chiếu từ các lớp mà kế thừa lớp trong đó nó được khai báo và không thể được truy cập từ bên ngoài lớp đó. Một thành viên lớp có thể được chỉ định là private bởi sử dụng từ khóa private ở trước thành viên đó. class MyClass { private $car = "skoda"; $driver = "SRK"; function __construct($par) { // các lệnh ở đây được thực thi mỗi khi 48 // một instance của class // được tạo } function myPublicFunction() { return("Đây là một hàm Public!"); } private function myPrivateFunction() { return("Đây là một hàm Private!"); } } Khi lớp MyClass được kế thừa bởi lớp khác bởi sử dụng extends, hàm myPublicFunction() sẽ là nhìn thấy, như $driver. Lớp kế thừa sẽ không nhận biết hoặc không truy cập tới hàm myPrivateFunction và $car, bởi vì chúng được khai báo là private. Protected Một thuộc tính hoặc phương thức protected là có thể truy cập trong lớp mà trong đó nó được khai báo, cũng như trong các lớp mà kế thừa từ lớp đó. Các thành viên protected là không có sẵn với ngoại vi của hai loại lớp này. Một thành viên lớp có thể được chỉ định là protected bởi sử dụng từ khóa protected ở trước thành viên đó trong PHP. Dưới đây là phiên bản khác của MyClass: class MyClass { protected $car = "skoda"; $driver = "SRK"; function __construct($par) { // các lệnh ở đây được thực thi mỗi khi // một instance của class // được tạo } function myPublicFunction() { return("Đây là một hàm Public!"); } protected function myPrivateFunction() { return("Đây là một hàm Protected!"); } } 7.3.4 Xây dựng lớp a) Khai bá thuộc tính Để thêm dữ liệu vào một class, người ta sử dụng thuộc tính, hoặc một biến riêng biệt nào đó. Chúng hoạt động tương tự như các biến thông thường, chỉ khác một điều là chúng đang liên kết với object và vì thế để có thể truy cập và sử dụng được chúng ta phải thông qua object hay nói cách khác là sử dụng object. Để thêm một thuộc tính vào MyClass, bạn thêm đoạn mã sau vào script của bạn: Từ khóa public xác định tầm vực của thuộc tính. Tiếp đó, tên của thuộc tính được đặt đúng theo chuẩn cú pháp đặt tên cho biến, và một giá trị đã được gán cho nó (mặc dù thuộc tính của class không nhất thiết phải có giá trị ban đầu). Tuy nhiên chúng ta sẽ tìm hiểu về chúng ở các phần sau. Để đọc thuộc tính này và xuất chúng ra trình duyệt, chúng ta sẽ phải tham chiếu chúng thông qua các object: Nếu chúng ta không khai báo object, chương trình sẽ không thể xác định được thuộc tính đó thuộc object nào (vì hiểu 1 cách đơn giản object là đại diện cho class). Sử dụng dấu mũi tên (->) là một cấu trúc của Hướng Đối Tượng, để một object có thể truy cập được nội dung của thuộc tính và phương thức trong class. 49 Sửa lại mã lệnh file test.php như sau: Và bây giờ Reload lại trình duyệt của để được kết quả như sau: I'm a class property! b) Khai bá các hàm và xây dựng hàm Phương thức là các hàm riêng biệt của class. Các action riêng lẻ, mà một object sẽ thực thi, thì được định nghĩa bên trong class như là các phương thức. Ví dụ, để tạo ra các phương thức có khả năng thiết lập và trả về giá trị của thuộc tính$prop1, ta thêm đoạn mã như sau: <?php class MyClass { public $prop1 = "I'm a class property!"; public function setProperty($newval) { $this->prop1 = $newval; } public function getProperty() { return $this->prop1 . ""; } } $obj = new MyClass; echo $obj->prop1; ?> c) Hàm Contructor Khi một object được khởi tạo, nó thường kèm theo nhu cầu thiết lập một vài thứ ngoài lề. Để xử lý điều này, PHP cung cấp phương thức magic__construct(), phương thức này sẽ tự động được gọi ngay khi một object mới được khởi tạo. Để minh họa cho khái niệm constructor, chúng ta sẽ thêm một hàm dựng (constructor) vàoMyclasscó nhiệm vụ xuất ra một thông tin bất kỳ (do chúng ta thiết lập) ngay khi có một object thể hiện của class được khởi tạo. <?php class MyClass { public $prop1 = "I'm a class property!"; public function __construct() { echo 'The class "', __CLASS__, '" was initiated!'; } public function setProperty($newval) { $this->prop1 = $newval; } public function getProperty() { return $this->prop1 . ""; } } // Tạo object $obj = new MyClass; // echo giá trị thuộc tính $prop1 echo $obj->getProperty(); 50 echo "End of file."; ?> d) Hàm Destructor Là một hàm đặc biệt được sử dụng để làm sạch bộ nhớ. Cách khai báo giống như Constructor nhưng không có tham số và được bắt đầu bằng dấu “~”. Ví dụ: class Library { private int ibooktypes; //Constructor public Library() { ibooktypes = 7; } public Library(int value) { ibooktypes = value; } ~ Library() { //thực thi câu lệnh } } 51 Bài 8. Lập trình hƣớng đối tƣợng 02 8.1 Sử dụng đối tƣợng trng PHP 8.1.1 Từ khóa New, this Một khi bạn đã định nghĩa lớp cho mình, thì bạn có thể tạo bao nhiêu đối tượng của kiểu lớp đó tùy bạn thích. Ví dụ sau là cách tạo đối tượng bởi sử dụng từ khóa new trong PHP. $tiengAnh = new Books; $toanCaoCap = new Books; $tuTuongHCM = new Books; Ở đây, chúng ta đã tạo 3 đối tượng và những đối tượng này là độc lập với nhau và chúng sẽ có sự tồn tại riêng rẽ nhau. Phần tiếp theo, chúng ta xem cách truy cập hàm thành viên và xử lý các biến thành viên trong PHP. Gọi hàm thành viên trong PHP Sau khi tạo các đối tượng, bạn sẽ có thể gọi các hàm thành viên liên quan tới đối tượng đó. Một hàm thành viên sẽ chỉ có thể xử lý biến thành viên liên quan tới đối tượng đó. 8.1.2 Tán tử tha tác thành phần “->” Gọi hàm thành viên trong PHP Sau khi tạo các đối tượng, bạn sẽ có thể gọi các hàm thành viên liên quan tới đối tượng đó. Một hàm thành viên sẽ chỉ có thể xử lý biến thành viên liên quan tới đối tượng đó. Ví dụ sau minh họa cách thiết lập title và price cho 3 book bằng cách gọi các hàm thành viên. $tiengAnh->setTitle( "English Grammar in Use" ); $tuTuongHCM->setTitle( "Toán cao cấp 1" ); $toanCaoCap->setTitle( "Tư tưởng Hồ Chí Minh" ); $tiengAnh->setPrice( 10 ); $tuTuongHCM->setPrice( 15 ); $toanCaoCap->setPrice( 7 ); Bây giờ bạn gọi các hàm thành viên khác để lấy giá trị đã được thiết lập trong ví dụ trên: $tiengAnh->getTitle(); $tuTuongHCM->getTitle(); $toanCaoCap->getTitle(); $tiengAnh->getPrice(); $tuTuongHCM->getPrice(); $toanCaoCap->getPrice(); kết quả: 8.1.3 Sử dụng các thuộc tính và hàm Để truy xuất đến các thuộc tính của đối tượng ta dùng toán tử (->) để trỏ đến. Cú pháp: $classname->method 52 Ví dụ: // Khởi tạo lớp động vật mới $conheo = new DongVat($thuc_an); // Gán giá trị cho các thuộc tính $conheo->mat = 'Mắt 2 mí'; $conheo->mui = 'Mũi tây phương'; // Lấy các giá trị và xuất ra màn hình // kết quả xuất ra màn hình "Mắt 2 mí" echo $conheo->mat; // kết quả xuất ra màn hình "Mũi tây phương" echo $conheo->mui ; Gọi các phương thức của đối tượng Cũng tương tự như truy xuất đến các thuộc tính của đối tượng, ta dùng toán tử (->) để gọi các hàm trong đối tượng. Cú pháp: $classname->function(); Ví dụ: class DongVat { // Các phương thức function an($thuc_an) { echo 'Hôm Nay Ăn Món ' . $thuc_an; } } // Khởi tạo lớp động vật mới $conheo = new DongVat(); // Gọi đến hàm ăn // kết quả là "Hôm Nay Ăn Món Cám" $conheo->an('Cám'); Các bạn thấy đó nó cũng giống như cách gọi hàm bình thường thôi đúng không nào? Hàm trong đối tượng gọi đến các thuộc tính của chính mình bằng cú pháp sau: $this- >ten_thuoc_tinh; Ví dụ: class DongVat { var $hello = 'Xin chào các bạn, Tôi đang ăn nhé'; // Các phương thức // hàm (hành động) ăn function an() { echo $this->hello; } } // Khởi tạo lớp động vật mới $conheo = new DongVat(); // Gọi đến hàm ăn // kết quả "Xin chào các bạn, Tôi đang ăn nhé" $conheo->an(); 53 8.2 Kế thừa trng PHP Một Class có thể kế thừa các phương thức và thuộc tính của class khác, bằng cách sử dụng từ khóa extends. Ví dụ, để tạo ra một class kế thừa MyClass đồng thời thêm vào nó một phương thức, bạn sẽ có mã lệnh như sau: Mở trình duyệt, và xem kết quả xuất ra như sau: The class "MyClass" was initiated! From a new method in MyOtherClass. I'm a class property! The class "MyClass" was destroyed. 8.3 Lớp interface Một khái niệm nữa được đưa vào mô hình hướng đối tượng là Giao diện. Giao diện cũng mang nguyên tắc của mô hình trừu tượng. Nhưng điểm khác biệt ở đây là với giao diện, chúng ta có thể cho phép một lớp sử dụng linh động giữa một hoặc nhiều giao diện cùng lúc. Để khai báo giao diện ta có: <?php interface animal{ function sound(); } interface benefits{ function protect() } ?> Và để một lớp sử dụng một hoặc nhiều giao diện ta sẽ có: <?php class ABC implements animal, benefits{ public function sound(){ //Thực thi mã lệnh } public function protect(){ //Thực thi mã lệnh } } ?> ? Có thể hiểu một cách đơn giản rằng, giao diện đem lại sự tùy chọn đầy đủ hơn. Nó cho phép, một lớp có thể dùng một hoặc nhiều giao diện cùng lúc. Và khi đã sử dụng, thì lớp đó phải định nghĩa các phương thức thuộc giao diện đó giống với ví dụ ở trên là lớp ABC đã phải định nghĩa 2 phương thức là sound() và protect(). Không giống như lớp trừu tượng, giao diện chỉ có thể chứa tên các phương thức. Ngoài ra nó không thể định nghĩa các phương thức hoặc chứa các thuộc tính bình thường như một lớp trừu tượng được. Và một lớp vẫn có thể vừa kế thừa và vừa sử dụng giao diện được. Ví dụ sau sẽ thể hiện điều đó: <?php interface water{ public function makeItWet(); } class weather{ public function start(){ return 'Here is some weather'; } } class rain extends weather implements water{ public function makeItWet(){ 54 return 'It is wet'; } } $a = new rain(); echo $a->start(); echo $a->makeItWet() ?> 8.4 Hàm abstract Lớp trừu tượng là lớp sẽ chứa các phương thức trừu tượng. Và các lớp kế thừa lớp trừu tượng sẽ phải định nghĩa các phương thức trừu tượng ấy. Để tuân thủ một ràng buộc về mặt tổ chức của mô hình trừu tượng. Để định nghĩa một lớp, một phương thức là trừu tượng ta có cú pháp: <?php abstract class ABC{ abstract function test(); } ?> Lúc này có thể hiểu rằng, lớp ABC được gọi là lớp trừu tượng và phương thức test() được gọi là phương thức trừu tượng. Khi đó, một lớp muốn sử dụng lớp trừu tượng, ta sẽ có cú pháp extends để kế thừa. <?php abstract class ABC{ abstract function test(); } class BCD extends ABC{ public function test(){ //Thực thi mã lệnh } } ?> Sự trừu tượng có thể được hiểu đơn giản như sau: Giả sử, kiến trúc để xây dựng 1 chiếc xe sẽ bao gồm: Bánh xe, yên xe, thắng. Như vậy, những mô hình xe máy, xe đạp, xe hơi cũng được gọi là xe khi chúng thỏa mãn những yếu tố mà kiến trúc một chiếc xe quy định. Diễn giải lại điều ở trên bằng hình ảnh để thấy rõ điều đó: Qua biểu đồ này chúng ta thầy rằng, khi chiếc xe đạp, xe máy, xe hơi kế thừa mô hình xe. Nó sẽ phải định nghĩa 3 phương thức trừu tượng là banhxe(), yenxe(),thangxe(). Dù rằng ở mỗi thể loại xe đều có những đặc thù riêng biệt. Như vậy có thể hiểu, mô hình trừu tượng trong thực tế được sử dụng để quản lý mô hình mã nguồn. Nó định ra một quy định cơ bản, và yêu cầu bất kể một lớp nào, hoặc phương thức nào khi muốn làm việc với nó, thì buộc phải định nghĩa theo các quy tắc mà nó đã đặt 55 ra. Nhằm đảm bảo tính nhất quán và dễ kiểm soát mã nguồn hơn đối với các dự án có quy mô lớn và phức tạp. Tuy nhiên, vì lớp trừu tượng vẫn được xem là một lớp. Thế nên, ngoài chức năng quy định lớp trừu tượng ra, thì nó vẫn có thể khởi tạo các thuộc tính hoặc phương thức khác để phục vụ cho việc sử dụng của những phương thức kế thừa nó. Một ví dụ về việc sử dụng mô hình lớp trừu tượng: <?php abstract class employee{ protected $empname; protected $empage; public function setdata($empname,$empage){ $this->empname = $empname; $this->empage = $empage; } abstract function outputData(); } class EmployeeData extends employee{ public function __construct($name,$age){ $this->setdata($name,$age); } function outputData(){ echo $this->empname; echo $this->empage; } } $a = new EmployeeData("Hitesh","24"); $a->outputData(); ?> 56 Bài 9. Lập trình cơ sở dữ liệu với MYSQL 9.1 Giới thiệu về hệ quản trị CSDL MySQL Mysql là hệ quản trị dữ liệu miễn phí, được tích hợp sử dụng chung với apache, PHP. Chính yếu tố phát triển trong cộng đồng mã nguồn mở nên mysql đã qua rất nhiều sự hỗ trợ của những lập trình viên yêu thích mã nguồn mở. Mysql cũng có cùng một cách truy xuất và mã lệnh tương tự với ngôn ngữ SQL. Nhưng Mysql không bao quát toàn bộ những câu truy vấn cao cấp như SQL. Về bản chất Mysql chỉ đáp ứng việc truy xuất đơn giản trong quá trình vận hành của website nhưng hầu hết có thể giải quyết các bài toán trong PHP. Cách khởi động và sử dụng MYSQL. Chúng ta sử dụng command như sau: Mysql –hname –uuser –ppass Để truy cập vào cơ sở dữ liệu. Hoặc sử dụng bộ appserv để vào nhanh hơn theo đường dẫn sau: Start/ Appserv/ Mysql command Line client Sau đó nhập password mà chúng ta đã đặt vào. Những định nghĩa cơ bản: Định nghĩa cơ sở dữ liệu, bảng, cột: Cơ sở dữ liệu: là tên của cơ sở dữ liệu chúng ta muốn sử dụng Bảng: Là 1 bảng giá trị nằm trong cơ sở dữ liệu. Cột là 1 giá trị nằm trong bảng. Dùng để lưu trữ các trường dữ liệu. Thuộc tính Ví dụ: Như vậy ta có thể hiểu như sau:  1 cơ sở dữ liệu có thể bao gồm nhiều bảng.  1 bảng có thể bao gồm nhiều cột  1 cột có thể có hoặc không có những thuộc tính. Định nghĩa 1 số thuật ngữ: NULL : Giá trị cho phép rỗng. AUTO_INCREMENT : Cho phép giá trị tăng dần (tự động). UNSIGNED : Phải là số nguyên dương PRIMARY KEY : Cho phép nó là khóa chính trong bảng. Loại dữ liệu trong Mysql: Ở đây chúng tả chỉ giới thiệu 1 số loại thông dụng: 1 số dữ liệu khác có thể tham khảo trên trang chủ của mysql. 57 9.2 Các lệnh cơ bản trên MySQL Cú pháp tạo 1 cơ sở dữ liệu: CREATE DATABASE tên_cơ_sở_dữ_liệu; Cú pháp sử dụng cơ sở dữ liệu: Use tên_database; Cú pháp thoát khỏi cơ sở dữ liệu: Exit Cú pháp tạo 1 bảng trong cơ sở dữ liệu: CREATE TABLE user ( ,,..) Ví dụ: mysql> create table user(user_id INT(15) UNSIGNED NOT NULL AUTO_INCREMENT, username VARCHAR(255) NOT NULL, password CHAR(50) NOT NULL, email VARCHAR(200) NOT NULL, PRIMARY KEY (user_id)); Hiển thị có bao nhiều bảng: show tables; Hiển thị có bao nhiêu cột trong bảng: show columns from table; Thêm 1 cột vào bảng : ALTER TABLE tên_bảng ADD AFTER Ví dụ: mysql> alter table user add sex varchar(200) NOT NULL after email; Thêm giá trị vào bảng: Cú pháp: INSERT INTO Tên_bảng(tên_cột) VALUES(Giá_trị_tương_ứng); Ví dụ: mysql> insert into user(username,password,email,sex,home) values("Lanna","12345","lanna@yahoo.com","F","www.abc.com"); Truy xuất dữ liệu: Cú pháp: SELECT tên_cột FROM Tên_bảng; Ví dụ: mysql> select user_id,username from user; Truy xuất dữ liệu với điều kiện: Cú pháp: SELECT tên_cột FROM Tên_bảng WHERE điều kiện; Ví dụ: mysql> select user_id,username from user where user_id=2; Truy cập dữ liệu và sắp xếp theo trình tự Cú pháp: SELECT tên_cột FROM Tên_bảng WHERE điều kiện (có thể có where hoặc không) 58 ORDER BY Theo quy ước sắp xếp. Trong đó quy ước sắp xếp bao gồm hai thông số là ASC (từ trên xuống dưới), DESC (từ dưới lên trên). mysql> select user_id,username from user order by username ASC ; Truy cập dữ liệu có giới hạn : Cú pháp: SELECT tên_cột FROM Tên_bảng WHERE điều kiện (có thể có where hoặc không) LIMIT vị trí bắt đầu, số record muốn lấy ra Ví dụ: mysql> select user_id,username from user order by username ASC limit 0,10 ; Cập nhật dữ liệu trong bảng: Cú pháp: Update tên_bảng set tên_cột=Giá trị mới WHERE (điều kiện). Nếu không có ràng buộc điều kiện, chúng sẽ cập nhật toàn bộ giá trị mới của các record trong bảng. Ví dụ: mysql> update user set email="admin@qhonline.info" where user_id=1 ; Xóa dữ liệu trong bảng: Cú pháp: DELETE FROM tên_bảng WHERE (điều kiện). Nếu không có ràng buộc điều kiện, chúng sẽ xó toàn bộ giá trị của các record trong bảng. Ví dụ mysql>delete from user where user_id=1 ; 9.3 Kết nối cơ sở dữ liệu MySQL từ PHP 1- Kết nối cơ sở dữ liệu: Cú pháp: mysql_connect("hostname","user","pass") 2- Lựa chọn cơ sở dữ liệu: Cú pháp: mysql_select_db("tên_CSDL") Ví dụ: $conn=mysql_connect("localhost","root","root") or die(" khong the ket noi"); mysql_select_db("demo"); 3- Thực thi câu lệnh truy vấn: Cú pháp: mysql_query("Câu truy vấn ở đây"); 4- Đếm số dòng dữ liệu trong bảng: Cú pháp: mysql_num_rows(); 5- Lấy dữ liệu từ bảng đưa vào mảng: Cú pháp: mysql_fetch_array(); 6- Đóng kết nối cơ sở dữ liệu: Cú pháp: mysql_close(); 59 9.4 Đọc dữ liệu từ MySQL Dữ liệu có thể được lấy từ MySQL Tables bởi thực thi lệnh SQL SELECT qua hàm mysql_query trong PHP. Bạn có một vài tùy chọn để lấy dữ liệu từ MySQL. Tùy chọn được sử dụng phổ biến nhất là sử dụng hàm mysql_fetch_array() trong PHP. Hàm này trả về hàng (row) ở dạng như một mảng liên hợp, một mảng số, hoặc cả hai. Hàm này trả về FALSE nếu không có hàng nào. Dưới đây là ví dụ đơn giản để truy xuất record từ Table có tên là employee. Bạn thử ví dụ sau để hiển thị tất cả record từ Table có tên là employee. <?php $dbhost = 'localhost:3036'; $dbuser = 'tennguoidung'; $dbpass = 'matkhau'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Không thể kết nối: ' . mysql_error()); } $sql = 'SELECT emp_id, emp_name, emp_salary FROM employee'; mysql_select_db('test_db'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Không thể lấy dữ liệu: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "ID :{$row['emp_id']} ". "Tên nhân viên : {$row['emp_name']} ". "Lương : {$row['emp_salary']} ". "--------------------------------"; } echo "Lấy dữ liệu thành công\n"; mysql_close($conn); ?> Nội dung của các row được gán cho biến $row và sau đó các giá trị trong row được in. Ghi chú − Luôn luôn ghi nhớ để đặt các dấu ngoặc móc khi bạn muốn chèn một giá trị mảng trực tiếp vào một chuỗi. Trong ví dụ trên, hằng MYSQL_ASSOC được sử dụng như là tham số thứ hai cho hàm mysql_fetch_array(), để mà nó trả về row ở dạng như một mảng liên hợp. Với một mảng liên hợp, bạn có thể truy cập Field bởi sử dụng tên của chúng thay vì sử dụng chỉ mục. PHP cung cấp một hàm khác là mysql_fetch_assoc() mà cũng trả về row ở dạng như một mảng liên hợp. Ví dụ Bạn thử ví dụ sau để hiển thị tất cả record từ Table có tên là employee bởi sử dụng hàm mysql_fetch_assoc() trong PHP. <?php $dbhost = 'localhost:3036'; $dbuser = 'tennguoidung'; $dbpass = 'matkhau'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Không thể kết nối: ' . mysql_error()); } 60 $sql = 'SELECT emp_id, emp_name, emp_salary FROM employee'; mysql_select_db('test_db'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Không thể lấy dữ liệu: ' . mysql_error()); } while($row = mysql_fetch_assoc($retval)) { echo "ID :{$row['emp_id']} ". "Tên nhân viên : {$row['emp_name']} ". "Lương : {$row['emp_salary']} ". "--------------------------------"; } echo "Lấy dữ liệu thành công\n"; mysql_close($conn); ?> Bạn cũng có thể sử dụng hằng MYSQL_NUM, như là tham số thứ hai cho hàm mysql_fetch_array(). Việc này làm cho hàm đó trả về một mảng với chỉ mục dạng số. Ví dụ Bạn thử ví dụ sau để hiển thị tất cả record từ Table có tên là employee bởi sử dụng tham số MYSQL_NUM trong PHP. <?php $dbhost = 'localhost:3036'; $dbuser = 'tennguoidung'; $dbpass = 'matkhau'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Không thể kết nối: ' . mysql_error()); } $sql = 'SELECT emp_id, emp_name, emp_salary FROM employee'; mysql_select_db('test_db'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Không thể lấy dữ liệu: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_NUM)) { echo "ID :{$row[0]} ". "Tên nhân viên : {$row[1]} ". "Lương : {$row[2]} ". "--------------------------------"; } echo "Lấy dữ liệu thành công\n"; mysql_close($conn); ?> Ba ví dụ trên sẽ cho cùng kết quả. 61 Giải phóng bộ nhớ sử dụng PHP Giải phóng bộ nhớ ở cuối mỗi lệnh SELECT là một bài thực hành tốt cho bạn. Điều này có thể được thực hiện bởi sử dụng hàm mysql_free_result() trong PHP. Dưới đây là ví dụ minh họa cách hàm này được sử dụng. Ví dụ Bạn thử ví dụ s

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

  • pdf01200032_9821_1983570.pdf
Tài liệu liên quan