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 .................................................................................................
128 trang |
Chia sẻ: putihuynh11 | Lượt xem: 787 | Lượt tải: 1
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:
- 01200032_9821_1983570.pdf