1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đề cương lập trình web động với PHP và MySQL

128 489 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 128
Dung lượng 2,93 MB

Nội dung

Các thẻ ASP-style có dạng như sau: 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à đó.. Các g

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 7

PHẦN LÝ THUYẾT

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,

 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)

 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

Trang 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à:

Trang 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ẻ 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:

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

ech "Ví dụ minh họa lệnh ech! <br>" ;

print "Ví dụ minh họa lệnh print!" ;

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à:

Trang 10

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:

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

ech "Ví dụ minh họa lệnh ech! <br>" ;

print "Ví dụ minh họa lệnh print!" ;

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:

Trang 11

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ụ

- Trừ tán hạng thứ hai từ tán hạng đầu A - B kết quả là -10

++ Tán tử tăng, tăng giá trị tán hạng thêm một

Tán tử giảm, giảm giá trị tán hạng đi một

== 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ì:

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

Trang 12

= 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ụ

? : 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:

đú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

Trang 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

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

Trang 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 : http://lcalhst

mà ra gia diện bên dưới, tức là bạn đã cài đặt thành công appserv

Trang 15

Bài 2 Cấu trúc điều khiển trng PHP

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 if…else để 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 if…elseif…else dài

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ẻ!":

Trang 16

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 if…elseif…else dài

<html>

Trang 17

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

Trang 18

for (khởi_tạo; điều_kiện; tăng_giảm_giá_trị)

Trang 19

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

Trang 20

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

Trang 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

if( $value == 3 )continue;

echo "Gia tri cua phan tu mang la $value <br />";

Trang 22

Bài 3 Làm việc với dữ liệu Frm

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é

Trang 23

<form method="POST">

Username: <input type="text" name="username" value=""/> <br/>

password: <input type="password" name="password" value=""/><br/>

<input type="submit" name="form_click" value="Gửi Dữ Liệu"/>

Username: <input type="text" name="username" value=""/> <br/>

password: <input type="password" name="password" value=""/><br/>

<input type="submit" name="form_click" value="Gửi Dữ Liệu"/><br/>

<?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

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');

Trang 24

Vì thế để lấy dữ liệu thì ta chỉ cần làm như sau:

echo 'Dữ Liệu Chúng Tôi Nhận Được Là <br/>';

foreach ($_GET as $key => $val)

print "Hello world!<br>";

print "I'm about to learn PHP!";

Trang 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()

echo "Hello world!<br>";

echo "I'm about to learn PHP!<br>";

echo "This", " string", " was", " made", " with multiple parameters.";

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:

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

Trang 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

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ỉ http://localhost:8080/test.php 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

Trang 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

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

Trang 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_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");

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ị

Trang 29

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

// 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");

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");

Trang 30

// Kết quả trả về false var_dump($bien2);

Loại bỏ giá trị trùng trong mảng $array

$array = array('freetuts.net', 'freetuts.net');

Để 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ụ

<html>

<body>

<?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);

Trang 31

echo "Lương của nhân viên manh là " $luong_nhan_vien['manh'] "<br />";

echo "Lương của nhân viên huong là " $luong_nhan_vien['huong'] "<br />";

/* 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'] "<br />";

echo "Mức lương của nhân viên manh là " $luong_nhan_vien['manh'] "<br />";

echo "Mức lương của nhân viên huong là " $luong_nhan_vien['huong'] "<br />";

?>

</body>

</html>

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

/* 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à: " ;

Trang 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ể

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 \

Trang 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

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)."<br>";

echo substr("Hello world",1)."<br>";

echo substr("Hello world",3)."<br>";

echo substr("Hello world",7)."<br>";

echo "<br>";

// Negative numbers:

echo substr("Hello world",-1)."<br>";

echo substr("Hello world",-10)."<br>";

echo substr("Hello world",-8)."<br>";

echo substr("Hello world",-4)."<br>";

Trang 34

Hàm explode($delimiter, $string): chuyển một chuỗi string thành một mảng các phần tử

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);

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

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ả:

Trang 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!":

Trang 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

http://freetuts.net

http://freetuts.net/hoc-php

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ụ: http://freetuts.net/public/ /demo sẽ tương đương với http://freetuts.net/demo

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

Trang 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

Để 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]]])

Để 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 đó

Trang 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

$filesize = filesize( $filename );

$filetext = fread( $file, $filesize );

fclose( $file );

echo ( "Kích cỡ của file là: $filesize byte <br>" );

echo ( "Dưới đây là nội dung của file: <br>" );

Trang 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 )

$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 <br>" );

echo("Tên file là: $filename <br>");

echo ( "Dưới đây là nội dung của file: <br>" );

echo ( "$filetext" );

?>

</body>

</html>

Trang 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à only, thì tiến trình sẽ thất bại

read-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

Ngày đăng: 24/10/2017, 15:51

TỪ KHÓA LIÊN QUAN

w