• Không có kết quả nào được tìm thấy

GIÁO TRÌNH

N/A
N/A
Protected

Academic year: 2022

Chia sẻ "GIÁO TRÌNH"

Copied!
71
0
0

Loading.... (view fulltext now)

Văn bản

(1)

BM/QT10/P.ĐTSV/04/04 Ban hành lần: 3

UBND TỈNH BÀ RỊA – VŨNG TÀU

TRƯỜNG CAO ĐẲNG KỸ THUẬT CÔNG NGHỆ

GIÁO TRÌNH

MÔ ĐUN LẬP TRÌNH WEB PHP & MySQL NGHỀ: QUẢN TRỊ MẠNG MÁY TÍNH

TRÌNH ĐỘ: CAO ĐẲNG

(Ban hành kèm theo Quyết định số: ……/QĐ-CĐKTCN, ngày … tháng … năm 20…… của Hiệu trưởng Trường Cao đẳng Kỹ thuật Công nghệ BR-VT)

BÀ RỊA – VŨNG TÀU, NĂM 2020

(2)

TUYÊN BỐ BẢN QUYỀN

Nhằm đáp ứng nhu cầu học tập và nghiên cứu cho giảng viên và sinh viên nghề Quản trị mạng máy tính trong trường Cao đẳng Kỹ thuật Công nghệ Bà Rịa – Vũng Tàu, chúng tôi đã thực hiện biên soạn tài liệu Lập trình web PHP &

MySQL này.

Tài liệu được biên soạn thuộc loại giáo trình phục vụ giảng dạy và học tập, lưu hành nội bộ trong Nhà trường nên các nguồn thông tin có thể được phép dùng nguyên bản hoặc trích dùng cho các mục đích về đào tạo và tham khảo.

Mọi mục đích khác mang tính lệch lạc hoặc sử dụng với mục đích kinh doanh thiếu lành mạnh sẽ bị nghiêm cấm.

(3)

LỜI GIỚI THIỆU

Giáo trình “Lập trình web PHP & MySQL” được biên soạn dựa trên khung chương trình đào tạo Cao đẳng nghề Quản trị mạng máy tính đã được Trường Cao đẳng Kỹ thuật Công nghê Bà Rịa – Vũng Tàu phê duyệt.

Tác giả đã nghiên cứu một số tài liệu, công nghệ hiện đại kết hợp với kinh nghiệm làm việc thực tế để viết nên giáo trình này. Nội dung được tác giả trình bày cô động, dễ hiểu kèm theo các bước hướng dẫn thực hành chi tiết theo nguyên tắc quan tâm đến kết quả đầu ra, khả năng tự học và kỹ năng cần thiết để HSSV có thể hoàn thành ứng dụng web quảng cáo sản phẩm, thương mại điện tử, … bằng ngôn ngữ PHP, một trong những ngôn ngữ lập trình ứng dụng web thông dụng hiện nay, đáp ứng nhu cầu thực tế của doanh nghiệp.

Nội dung giáo trình được chia thành 11 bài, trong đó:

Bài 1: Tổng quan về PHP và MySQL Bài 2: Quản trị MySQL trên phpmyadmin Bài 3: Tổng quan về PHP

Bài 4: Đọc dữ liệu từ địa chỉ và form

Bài 5: Thao tác với các kiểu dữ liệu trong PHP Bài 6: Cấu trúc điều khiển

Bài 7: Xây dựng và sử dụng hàm Bài 8: Sử dụng include và require Bài 9: Tạo các lớp đối tượng

Bài 10: Truy xuất MySQL trong PHP

Bài 11: Sử dụng các đối tưởng quản lý trong PHP

Trong quá trình biên soạn, chắc chắn giáo trình còn nhiều thiếu sót. Tác giả rất mong nhận được ý kiến đóng góp của quý thầy/cô và các em học sinh, sinh viên để tiếp tục hoàn thiện hơn.

Xin chân thành cảm ơn quý đồng nghiệp, bạn bè đã có những ý kiến đóng góp trong quá trình biên soạn giáo trình này.

Bà Rịa – Vũng Tàu, ngày …… tháng …… năm ………

(4)

Tham gia biên soạn 1. Phan Hữu Phước – Chủ biên

(5)

MỤC LỤC

LỜI GIỚI THIỆU...1

MỤC LỤC...3

BÀI 1: TỔNG QUAN VỀ PHP VÀ MYSQL...11

1. Giới thiệu MySQL...11

2. Giới thiệu PHP...11

3. Cài đặt và cấu hình gói XAMPP...11

3.1. Cài đặt XAMPP...11

3.2. Chọn chức năng khởi động và cấu hình các cổng...12

3.3. Cấu hình tập tin httpd.conf và httpd-ssl.conf...13

4. Khởi động các dịch vụ...14

CÂU HỎI, BÀI TẬP...15

GỢI Ý, ĐÁP ÁN...15

BÀI 2: QUẢN TRỊ MYSQL TRÊN PHPMYADMIN...17

1. Mở giao diện phpmyadmin...17

2. Tạo CSDL...18

3. Hủy CSDL...18

4. Tạo, hiệu chỉnh cấu trúc và hủy table...19

4.1. Tạo table...19

4.2. Hiệu chỉnh cấu trúc table...20

4.3. Hủy table...20

5. Tạo khóa ngoại...21

6. Tạo Unique...21

7. Đọc, thêm, xóa, sửa dữ liệu...22

8. Sao lưu và phục hồi dữ liệu...23

8.1. Sao lưu dữ liệu...23

8.2. Phục hồi dữ liệu...23

CÂU HỎI, BÀI TẬP...24

(6)

GỢI Ý, ĐÁP ÁN...24

BÀI 3: TỔNG QUAN VỀ PHP...27

1. Cấu trúc đoạn mã PHP...27

2. Sử dụng các lệnh xuất...27

2.1. Lệnh xuất echo...27

2.2. Lệnh xuất print...28

2.3. Hàm sprintf...28

2.3. Lệnh xuất printf...29

2.4. Lệnh var_dump...29

3. Khai báo và sử dụng biến, hằng...29

4. Sử dụng các toán tử...30

CÂU HỎI, BÀI TẬP...31

BÀI 4: ĐỌC DỮ LIỆU TỪ ĐỊA CHỈ VÀ FORM...33

1. $_GET...33

2. $_POST...33

3. $_REQUEST...34

CÂU HỎI, BÀI TẬP...34

GỢI Ý, ĐÁP ÁN...35

BÀI 5: THAO TÁC VỚI CÁC KIỂU DỮ LIỆU TRONG PHP...37

1. Luận lý...37

2. Số nguyên...37

3. Số thực...38

4. Hàm toán học...38

5. Chuỗi, ký tự...39

6. Hàm trên chuỗi...39

7. Mảng...39

7.1. Khai báo...39

7.2. Truy xuất...41

(7)

7.3. Thêm phần tử vào mảng...42

7.4. Hàm trên mảng...42

CÂU HỎI, BÀI TẬP...43

GỢI Ý, ĐÁP ÁN...44

BÀI 6: CẤU TRÚC ĐIỀU KHIỂN...45

1. if, if … else...45

1.1. Cấu trúc if...45

1.2. Cấu trúc if … else...45

2. switch...46

3. for, foreach...47

3.1. Vòng lặp for...47

3.2. Vòng lặp foreach...47

4. while, while … endwhile, do … while...49

Cú pháp while:...49

Cú pháp while … endwhile:...49

Cú pháp do … while:...49

5. Các lệnh break, continue...49

CÂU HỎI, BÀI TẬP...50

BÀI 7: XÂY DỰNG VÀ SỬ DỤNG HÀM...51

1. Định nghĩa hàm...51

2. Tham số của hàm...51

CÂU HỎI, BÀI TẬP...52

BÀI 8: SỬ DỤNG INCLUDE VÀ REQUIRE...53

1. include, include_once...53

2. require, require_once...54

CÂU HỎI, BÀI TẬP...54

BÀI 9: TẠO CÁC LỚP ĐỐI TƯỢNG...55

1. Tổng quan...55

(8)

2. Xây dựng lớp đối tượng (class)...56

2.1. Tạo lớp đối tượng...56

2.2. Khai báo thuộc tính...56

2.3. Xây dựng phương thức...57

2.4. Từ khóa static...58

3. Sử dụng lớp đối tượng...58

CÂU HỎI, BÀI TẬP...60

GỢI Ý, ĐÁP ÁN...60

BÀI 10: TRUY XUẤT MYSQL TRONG PHP...61

1. Giới thiệu PDO...61

2. Lý do chọn PDO...61

3. Tạo kết nối – Hủy kết nối...62

3.1 Tạo kết nối...62

3.2. Hủy kết nối...63

3.3. Xử lý lỗi kết nối...63

4. Thực thi lệnh SQL...64

4.1. Các lệnh Insert, Update, Delete...64

4.2. Câu lệnh Select...64

5. Transaction...64

6. PDO Statement...65

6.1. Prepared statement...65

6.2. Thực thi...65

6.3. Duyệt dữ liệu...66

6.4. Truyền tham số trong câu truy vấn...67

6.5. Đếm số lượng mẫu tin...67

CÂU HỎI, BÀI TẬP...69

GỢI Ý, ĐÁP ÁN...70

BÀI 11: CÁC ĐỐI TƯỢNG QUẢN LÝ TRONG PHP...71

(9)

1. SESSION...71

1.1.Khái niệm...71

1.2. Cách thức hoạt động...71

1.3. Khởi động session...71

1.4. Đăng ký session...72

1.5 Sử dụng session...72

1.6. Hủy toàn bộ các biến session...72

1.7. Hủy một biến session...72

2. COOKIE...72

2.1. Khái niệm...72

2.2. Khai báo cookie...72

2.3. Sử dụng cookie...73

2.4. Hủy cookie...73

CÂU HỎI, BÀI TẬP...73

GỢI Ý, ĐÁP ÁN...73

TÀI LIỆU THAM KHẢO...75

(10)

GIÁO TRÌNH MÔ ĐUN

Tên mô đun: Lập trình web PHP & MySQL Mã mô đun: MĐ29

Vị trí, tính chất, ý nghĩa và vai trò của mô đun:

 Vị trí: được bố trí sau khi học xong các môn cơ sở và Thiết kế web

 Tính chất: là mô đun tự chọn

 Ý nghĩa và vai trò của mô đun: cung cấp cho người học kiến thức và kỹ năng để có thể thiết kế, xây dựng và phát triển ứng dụng web đơn giản bằng ngôn ngữ PHP với Hệ quản trị cơ sở dữ liệu MySQL từ đó có thể ứng dụng xây dựng website thương mại, quảng bá chuyên nghiệp từ các framework, CMS mã nguồn mở.

Mục tiêu của mô đun:

Về kiến thức:

 Biết nguồn gốc và lợi ích của PHP và MySQL trong quá trình xây dựng và phát triển web

 Biết quy trình quản lý CSDL MySQL trên phpmyadmin

 Biết quy trình quản lý table trong CSDL MySQL trên phpmyadmin

 Biết cấu trúc đoạn mã, cú pháp trong lập trình PHP Về kỹ năng:

 Cài đặt và cấu hình gói XAMPP

 Quản lý CSDL MySQL trên phpmyadmin

 Đọc thông tin người dùng từ URI và FORM

 Tạo các tập tin cấu hình, thư viện để sử dụng cho nhiều site PHP

 Tạo các trang web tính toán, truy xuất CSDL MySQL bằng ngôn ngữ PHP

 Quản lý thông tin người dùng, tạo chức năng giỏ hàng bằng SESSION và COOKIE

Về năng lực tự chủ và trách nhiệm:

 Cẩn thận không làm ảnh hưởng đến hệ điều hành và các phần mềm khác trên máy tính trong quá trình cài đặt

 Không thay đổi các thông tin hệ thống ảnh hưởng đến việc truy xuất CSDL trên phpmyadmin

(11)

 Tham gia xây dựng ứng dụng web bằng PHP và MySQL

 Tự tìm hiểu để xây dựng ứng dụng web bằng các framework mã nguồn mở PHP như: Wordpress, Joomla, …

 Biết kiến thức tổng quan về PHP và MySQL

 Xây dựng và phát triển ứng dụng web bằng ngôn ngữ PHP với cơ sở dữ liệu MySQL

 Thực hiện các bài tập ứng dụng về web đảm bảo đúng trình tự. An toàn cho người và thiết bị

Nội dung của mô đun:

(12)

BÀI 1: TỔNG QUAN VỀ PHP VÀ MYSQL Mã bài: 29.1

Giới thiệu:

Các ngôn ngữ lập trình ứng dụng web hiện nay gồm: ASP.NET, PHP, JSP.

Trong đó, phổ biến nhất là ASP.NET và PHP (facebook được viết bằng PHP).

Mỗi ngôn ngữ lập trình thường phù hợp với một CSDL thông dụng. CSDL thông dụng trong ngôn ngữ PHP là MySQL.

Mục tiêu:

 Biết nguồn gốc của PHP, MySQL

 Biết lợi ích khi dùng PHP & MySQL để xây dựng và phát triển web

 Cài đặt và cấu hình gói XAMPP

 Cẩn thận không làm ảnh hưởng đến hệ điều hành và các phần mềm khác trên máy tính trong quá trình cài đặt

Nội dung chính:

1. Giới thiệu MySQL

MySQL là cơ sở dữ liệu nguồn mở phổ biến nhất Thế giới, cho phép phân phối các ứng dụng cơ sở dữ liệu dựa trên nền tảng web với chi phí thấp và hiệu suất cao. MySQL do tập đoàn ORACLE cung cấp.

2. Giới thiệu PHP

PHP là ngôn ngữ kịch bản thông dụng đặc trưng và phù hợp cho việc phát triển ứng dụng web.

Với những ưu điểm nhanh chóng, linh hoạt và thực tế, PHP đã phát huy sức mạnh trên mọi ứng dụng từ blog cho đến những website phổ biến nhất trên Thế giới.

3. Cài đặt và cấu hình gói XAMPP 3.1. Cài đặt XAMPP

Bước 1: truy cập vào trang web https://www.apachefriends.org.

Bước 2: chọn phiên bản phù hợp với hệ điều hành trên máy tính.

Hình 1.1. Chọn phiên bản cài đặt XAMPP Bước 3: chạy file cài đặt sau khi tải xong.

(13)

3.2. Chọn chức năng khởi động và cấu hình các cổng Bước 1: mở XAMPP Control Panel.

Hình 1.2. Giao diện XAMPP Control Panel

Bước 2: click chuột lên nút Config để mở hộp thoại Configuration of Control Panel.

Hình 1.3. Hộp thoại Configuration of Control Panel

(14)

Bước 3: đánh dấu chọn Apache và MySQL trong nhóm Autostart of modules.

Nếu máy tính đã được cài đặt VMWare dẫn đến xung đột cổng dịch vụ thì chúng ta phải tiếp tục thực hiện tiếp Bước 4. Ngược lại thì chọn Save hoàn tất cấu hình.

Bước 4: click chuột lên nút Service and Port Settings. Xuất hiện hộp thoại Service Settings.

Hình 1.4. Hộp thoại Service Settings

Bước 5: thay đổi giá trị các cổng cho Main Port và SSL Port (Ví dụ: 8080 và 888) rồi chọn Save.

Bước 6: trên hộp thoại Configuration of Control Panel, tiếp tục chọn Save kết thúc quá trình cấu hình các cổng dịch vụ.

3.3. Cấu hình tập tin httpd.conf và httpd-ssl.conf

Trong trường hợp phải thực hiện Bước 4 và Bước 5 của mục 3.2 thì chúng ta phải tiếp tục cấu hình các tập tin httpd.conf và httpd-ssl.conf.

Cấu hình httpd.conf

Bước 1: click chuột lên nút Config của Module Apache trong hộp thoại XAMPP Control Panel.

Hình 1.5. Chọn Config để cấu hình tập tin httpd.conf và httpd-ssl.conf Bước 2: click chuột lên Apache httpd.conf trong danh sách sổ, xuất hiện của sổ Notepad hiển thị nội dung cấu hình của tập tin httpd.conf.

(15)

Bước 3: trong cửa sổ Notepad, nhấn tổ hợp phím Ctrl+H, xuất hiện hộp thoại.

Bước 4: nhập nội dung vào Find what và Replace with lần lượt là 80 và 8080 Bước 5: thực hiện việc thay đổi nội dung Listen 80 thành Listen 8080 và ServerName localhost:80 thành ServerName localhost:8080

Bước 6: nhấn tổ hợp phím Ctrl+S để lưu tập tin cấu hình rồi đóng cửa sổ Notepad

Cấu hình httpd-ssl.conf

Bước 1: click chuột lên nút Config của Module Apache trong hộp thoại XAMPP Control Panel.

Bước 2: chọn Apache (httpd-ssl.conf) trong danh sách sổ. Xuất hiện cửa sổ Notepad hiển thị nội dung tập tin httpd-ssl.conf.

Bước 3: trong cửa sổ Notepad, nhấn tổ hợp phím Ctrl+H, xuất hiện hộp thoại.

Bước 4: nhập nội dung vào Find what và Replace with lần lượt là 443 và 888 Bước 5: thực hiện việc thay đổi nội dung Listen 443 thành Listen 888 và

<VirtualHost _default_:443> thành <VirtualHost _default_:888>

Bước 6: nhấn tổ hợp phím Ctrl+S để lưu tập tin cấu hình rồi đóng cửa sổ Notepad.

4. Khởi động các dịch vụ

Click chuột lên các nút Start của hai module Apache và MySQL để chạy các dịch vụ tối thiểu lập trình PHP truy xuất MySQL.

Hình 1.6. Khởi động các dịch vụ tối thiểu cho lập trình PHP

(16)

Hình 1.7. Kết quả có được khi chạy thành công các dịch vụ

CÂU HỎI, BÀI TẬP 1.1. Cài đặt XAMPP trên máy tính.

1.2. Kể tên 2 module quan trọng phải chạy cùng XAMPP để có thể lập trình PHP truy xuất MySQL.

1.3. Khi nào thì cần phải cấu hình các cổng dịch vụ của XAMPP?

1.4. Trình bày quy trình thay đổi các cổng dịch vụ và tập tin cấu hình của Bài 1.3.

GỢI Ý, ĐÁP ÁN

1.1. Tải file cài đặt tại địa chỉ: https://www.apachefriends.org 1.2. Hai module quan trọng: Apache, MySQL.

1.3. Khi có sự xung đột các cổng dịch vụ (Ví dụ: máy tính đã được cài đặt VMWare).

1.4. Cấu hình Main port và SSL port. Thay đổi nội dung httpd.conf và httpd- ssl.conf.

(17)

BÀI 2: QUẢN TRỊ MYSQL TRÊN PHPMYADMIN Mã bài: 29.2

Giới thiệu:

Một trong những công cụ để quản lý MySQL được sử dụng phổ biến nhất hiện nay là ứng dụng web phpmyadmin. Với phpmyadmin, chúng ta có thể dễ dàng quản lý MySQL bằng các thao tác click chuột trên giao diện web mà không cần phải nhớ hết các cấu trúc lệnh sql.

Mục tiêu:

 Biết quy trình tạo, hủy CSDL

 Biết quy trình tạo, hiệu chỉnh cấu trúc, hủy table

 Phân biệt các kiểu dữ liệu thông dụng trong MySQL

 Trình bày các bước cập dữ liệu trên table

 Biết quy trình sao lưu và phục hồi dữ liệu

 Tạo đươc CSDL, table

 Tạo quan hệ giữa các table

 Cập nhật dữ liệu trên table

 Sao lưu và phục hồi dữ liệu

 Cẩn thận chọn đúng CSDL

 Không thay đổi các thông tin hệ thống ảnh hưởng đến việc truy xuất CSDL trên phpmyadmin

Nội dung chính:

1. Mở giao diện phpmyadmin

Cách 1: click chuột lên Admin của module MySQL trong XAMPP Control Panel.

Hình 2.1. Mở phpmyadmin từ XAMPP Control Panel Cách 2: truy cập vào địa chỉ

http://localhost/phpmyadmin (hoặc http://localhost:8080/phpmyadmin)

(18)

Hình 2.2. Giao diện phpmyadmin quản lý MySQL 5. Tạo CSDL

Bước 1: trong giao diện phpmyadmin, click chuột lên biểu tượng Home ở khung trái.

Bước 2: chọn Databases ở khung phải.

Bước 3: nhập tên CSDL cần tạo (Bookstore), chọn utf8mb4_general_ci trong danh sách Collation rồi chọn Create.

Hình 2.3. Nhập tên và chọn Collation để tạo CSDL mới 6. Hủy CSDL

Bước 1: chọn biểu biểu Home.

Bước 2: chọn Databases.

Bước 3: đánh dấu chọn CSDL cần hủy rồi click chọn biểu tượng Drop.

(19)

Hình 2.4. Danh sách cơ sở dữ liệu 7. Tạo, hiệu chỉnh cấu trúc và hủy table

4.1. Tạo table

Bước 1: click chuột lên biểu tượng New trong CSDL.

Hình 2.5. Cây danh sách table trong cơ sở dữ liệu Bước 2: nhập tên table cần tạo, khai báo danh sách cột và kiểu dữ liệu.

Hình 2.6. Tạo table Lưu ý:

(20)

 Name: nhập tên cột

 Type: chọn kiểu dữ liệu

 Length: kích thước/độ dài (khi Type là CHAR/VARCHAR)

 Chọn cột làm khóa: chọn PRIMARY trong danh sách Index của cột tương ứng

 Khi khóa gồm nhiều cột: chọn PRIMARY cho các cột tương ứng

 A_I (Auto Increment): giá trị của cột sẽ tự phát sinh tăng dần khi thêm dòng dữ liệu mới vào table. Nghĩa là, khi nhập dòng dữ liệu mới thì chúng ta không cần phải nhập giá trị cho cột này. Chỉ sử dụng khi table có duy nhất một cột làm khóa và Type của cột đó là số nguyên.

Bước 3: click chuột lên nút 4.2. Hiệu chỉnh cấu trúc table

Bước 1: ở khung trái, chọn table cần hiệu chỉnh.

Bước 2: chọn Structure ở khung phải.

Hình 2.7. Cấu trúc của table

 Mỗi dòng là một cột của table.

 Muốn xóa cột nào thì click chuột lên biểu tượng Drop trên dòng tương ứng.

 Muốn thay đổi thông tin của cột thì click chuột lên Change

 Muốn thêm cột thì nhập số cột cần thêm vào ô Add bên dưới rồi chọn Go 4.3. Hủy table

Bước 1: chọn CSDL trong khung trái.

Hình 2.8. Danh sách table trong CSDL

(21)

Bước 2: trong hình trên, mỗi dòng là một table bên trong CSDL. Muốn hủy table nào thì chọn click chuột lên biểu tượng trên dòng tương ứng.

Biểu tượng sẽ xóa tất cả dữ liệu trong table nhưng không hủy table.

8. Tạo khóa ngoại

Ví dụ: Tạo quan hệ 1-N cho các table chude và sach (một chude có nhiều sach).

Bước 1: chọn cơ sở dữ liệu, table sach trong cây bên trái.

Bước 2: chọn Structure.

Bước 3: chọn Relation view.

Bước 4: nhập tên cho khóa ngoại (FK_SACH_CHUDE), chọn cột làm quan hệ trong các table sach và chude rồi chọn Save.

Hình 2.9. Tạo khóa ngoại 9. Tạo Unique

Unique: không phải là khóa của table nhưng vẫn được kiểm tra là duy nhất khi thêm hoặc sửa các dòng dữ liệu trong table.

Bước 1: chọn cơ sở dữ liệu, table sach trong cây bên trái.

Bước 2: chọn Structure.

Bước 3: nhập số cột làm Unique rồi chọn Go.

Hình 2.10. Xác định số cột làm Unique

Bước 4: đặt tên, chọn UNIQUE trong danh sách Index choice, chọn các cột rồi chọn Go.

(22)

Hình 2.11. Khai báo thông tin Unique 10. Đọc, thêm, xóa, sửa dữ liệu

Bước 1: chọn cơ sở dữ liệu, table trong khung trái.

Bước 2: chọn Browse trong khung phải để xem dữ liệu.

Hình 2.12. Các dòng dữ liệu trong table

 Click chuột lên biểu tượng để hiện chỉnh dòng dữ liệu tưng ứng

 Click chuột lên biểu tượng để xóa dòng dữ liệu Bước 3: muốn thêm dữ liệu thì click chuột lên biểu tượng

Bước 4: nhập thông tin cho dòng dữ liệu cần thêm rồi click chuột lên nút Go.

Hình 2.13. Giao diện thêm dòng dữ liệu mới

(23)

11. Sao lưu và phục hồi dữ liệu 8.1. Sao lưu dữ liệu

Bước 1: chọn CSDL ở khung trái.

Bước 2: chọn

Hình 2.14. Chọn định dạng export dữ liệu Bước 3: click chuột lên nút Go.

Bước 4: chọn ổ đĩa, thư mục chứa tập tin sao lưu.

8.2. Phục hồi dữ liệu Bước 1: chọn CSDL.

Bước 2: chọn

Bước 3: click chuột lên Browse, chọn đến tập tin đã sao lưu trước đó.

Hình 2.15. Chọn dữ liệu import Bước 4: click chuột lên nút bên dưới.

(24)

CÂU HỎI, BÀI TẬP

2.1. Tạo cơ sở dữ liệu tracuudiem và các table bên trong (bao gồm các khóa, unique, quan hệ).

2.2. Sao lưu dữ liệu tracuudiem.

2.3. Xóa cơ sở dữ liệu tracuudiem rồi phục hồi lại.

GỢI Ý, ĐÁP ÁN 2.1. Cơ sở dữ liệu TraCuuDiem

Cấu trúc table lop

Khóa và Unique của table lop

Cấu trúc table monhoc

Khóa và Unique của table monhoc

(25)

Cấu trúc table sinhvien

Khóa và Unique của table sinhvien

Danh sách khóa ngoại của table sinhvien

Cấu trúc table ketqua

Danh sách khóa ngoại trong table ketqua

(26)

BÀI 3: TỔNG QUAN VỀ PHP Mã bài: 29.3

Giới thiệu:

Các trang web PHP là sự kết hợp giữa các HTML element và đoạn mã thực thi PHP. Chúng ta sẽ cùng tìm hiểu việc nhúng đoạn mã PHP trong các HTML element như thế nào.

Mục tiêu:

 Biết cấu trúc của đoạn mã PHP

 Biết sử dụng biến, toán tử, các lệnh xuất trong PHP

 Cẩn thận kiểu dữ liệu phù hợp khi tính toán

 Cẩn thận phân biệt chữ in, thường, cú pháp của PHP Nội dung chính:

1. Cấu trúc đoạn mã PHP

Tập tin chứa đoạn mã PHP phải có phần mở rộng .php Đoạn mã PHP được đặt trong các cặp thể sau:

Thẻ mở Thẻ đóng

<?php ?>

Ví dụ:

<?php

echo “PHP chào bạn!”;

?>

Chú ý: mỗi lệnh của PHP kết thúc bằng dấu chấm phẩy “;”.

12. Sử dụng các lệnh xuất 2.1. Lệnh xuất echo

Cú pháp: echo $arg1;

Ví dụ:

<?php

$holot = “Nguyễn Văn”; $ten = “Thành”;

echo “Họ tên: Nguyễn Văn Thành”;

echo “Họ: $holot”; echo “Tên: $ten”;

echo “Họ tên: $holot $ten”;

echo “Họ tên: ”. $holot. “ ”. $ten;

?>

Muốn xuống hàng thì dùng ký tự \n.

(27)

<?php

$holot = “Nguyễn Văn”;

$ten = “Thành”;

echo “Họ tên:\n$holot $ten”;

?>

2.2. Lệnh xuất print

Cú pháp: print (string $arg);

Ví dụ:

<?php

print(“Họ tên: $holot $ten”);

?>

2.3. Hàm sprintf

Công dụng: trả về một chuỗi được định dạng.

Cú pháp:

sprintf (string $format [, mixed $args [, mixed $... ]]);

o $format: chuỗi định dạng.

o $args: các tham số truyền vào chuỗi định dạng.

o Các định dạng đại diện trong $format

 %b: tham số là số nguyên, hiển thị dưới dạng nhị phân.

 %c: tham số là số nguyên, hiển thị dưới dạng ký tự ASCII.

 %d: tham số là số nguyên, hiển thị dưới dạng số nguyên có dấu.

 %f: tham số là số thực, hiển thị dưới dạng số thực chấm động.

 %o: tham số là số nguyên, hiển thị dưới dạng hệ bát phân.

 %s: tham số là chuỗi, hiển thị dưới dạng chuỗi.

 %u: tham số là số nguyên, hiển thị dưới dạng số nguyên không dấu.

 %x, %X: tham số là số nguyên, hiển thị dưới dạng thập lục phân.

Ví dụ:

<?php

$hoten = “Nguyễn Văn Thành; $tuoi = 20;

$s = sprintf(“Họ tên: %s, tuổi: %d”, $hoten, $tuoi);

echo $s;

?>

2.3. Lệnh xuất printf

Công dụng: kết hợp giữa lệnh xuất echo và hàm sprintf dùng để xuất một chuỗi được định dạng.

(28)

Cú pháp:

printf ( string $format [, mixed $args [, mixed $... ]] ) Ví dụ:

<?php

$hoten = “Nguyễn Văn Thành”; $tuoi=20;

printf(“Họ tên: %s, tuổi: %d”, $hoten,$tuoi);

?>

2.4. Lệnh var_dump

Công dụng: hiển thị chuỗi cho biết kiểu dữ liệu và giá trị của biểu thức.

Cú pháp: var_dump(<biểu_thức>);

<biểu_thức>: có thể là biến, hằng giá trị hoặc một biểu thức tính toán Ví dụ:

<?php $a=2; var_dump($a); ?>

13. Khai báo và sử dụng biến, hằng

 Khai báo biến: $tên_biến;

 Quy tắc đặt tên biến:

o Bắt đầu bằng ký tự $, theo sau là 1 ký tự hoặc dấu _, tiếp đó là ký tự, hoặc số hoặc dấu _.

o Nêu khởi tạo giá trị ban đầu ngay khi khai báo biến.

o Không trùng tên biến với tên hàm.

o Không được bắt đầu bằng ký số.

o Lưu ý: phân biệt chữ HOA – chữ thường.

 Gán giá trị cho biến: $tên_biến = <Giá trị>;

 Khai báo biến toàn cục: dùng từ khóa global đặt trước tên biến.

Ví dụ: global $cfg_sitename= ‘Bookstore site’;

 Các phương thức kiểm tra giá trị của biến

o isset($tên_biến): kiểm tra biến có tồn tại hay không.

o empty($tên_biến): kiểm tra biến có rỗng (null, không chứa giá trị) hay không.

o is_numeric($tên_biến): kiểm tra biến có phải là kiểu số hay không o is_double($ten_biến): kiểm tra biến có double hay không

o gettype($tên_biến): xác định kiểu dữ liệu của biến

 Sử dụng hằng

(29)

o Hằng là một giá trị không thay đổi trong quá trình thực thi ứng dụng.

o Quy tắc đặt tên hằng: giống tên biến, thường dùng ký tự IN HOA.

o Cú pháp định nghĩa hằng: define (“TÊN_HẰNG”, <Giá trị>);

Ví dụ: define (“PI”, 3.14159);

14. Sử dụng các toán tử

Toán tử Ý nghĩa

. Nối hai chuỗi

$a=$b Gán giá trị của $b cho $a

$c=$a+$b Tính tổng $a và $b rồi gán cho $c

$a++ Tăng $a lên 1 đơn vị

$a += $b Tương đương với $a = $a + $b

$c=$a-$b Tính hiệu của $a trừ $b rồi gán cho $c

$a-- Giảm $a 1 đơn vị

$a -= $b Tương đương với $a = $a - $b

$c = $a * $b Tính tích của $a và $b rồi gán cho $c

$a *= $b Tương đương với $a = $a * $b

$c = $a / $b Tính thương $a chia $b rồi gán cho $c

$a /= $b Tương đương $a = $a / $b

$a==$b TRUE nếu $a bằng $b

$a === $b TRUE nếu $a bằng $b và cùng kiểu

dữ liệu

$a != $b hoặc $a <> $b TRUE nếu $a khác $b

$a !== $b TRUE nếu $a khác $b hoặc khác kiểu

dữ liệu

$a < $b TRUE nếu $a nhỏ hơn $b

$a > $b TRUE nếu $a lớn hơn $b

$a <= $b TRUE nếu $a nhỏ hơn hoặc bằng $b

$a >= $b TRUE nếu $a lớn hơn hoặc bằng $b

$a <=> $b Nếu $a nhỏ hơn $b thì trả về -1

Nếu $a bằng $b thì trả về 0 Nếu $a lớn hơn $b thì trả về 1 CÂU HỎI, BÀI TẬP

3.1. Phần mở rộng của tập tin chứa đoạn mã php? Cấu trúc của đoạn mã php?

3.2. Công dụng và cú pháp của các lệnh echo, print, printf, var_dump? Viết đoạn mã PHP ví dụ cua mỗi lệnh.

3.3. Công dụng và cú pháp của hàm sprintf? Viết đoạn mã PHP ví dụ.

3.4. Quy tắc đặt tên biến, khai báo hằng? Viết đoạn mã PHP ví dụ.

(30)

BÀI 4: ĐỌC DỮ LIỆU TỪ ĐỊA CHỈ VÀ FORM Mã bài: 29.4

Giới thiệu:

Bài này giúp HSSV biết kiến thức và kỹ năng truyền và truy xuất dữ liệu giữa các trang.

Mục tiêu:

 Biết phân biệt GET và POST

 Biết nhận và xử lý dữ liệu từ địa chỉ và FORM

 Thực hiện được các biện pháp an toàn cho máy tính Nội dung chính:

1. $_GET

 Là mảng kết hợp các cặp Key-Value được truyền thông qua tham số kèm theo URL.

 Thường được sử dụng trong các chức năng: tìm kiếm, hiển thị danh sách sản phẩm theo nhóm/chủ đề.

 Chuỗi địa chỉ có tham số có thể từ liên kết, hoặc từ form có phương thức GET.

 Cú pháp: $_GET[“tên_tham_số”]

Ví dụ: http://localhost:8080/bookstore/index.php?option=chude&id=1 o $_GET[“option”] có giá trị là “chude”.

o $_GET[“id”] có giá trị là 1.

15. $_POST

 Là mảng kết hợp các cặp Key-Value được truyền khi người dùng submit từ một form.

 Thường được sử dụng trong các chức năng thêm/xóa/sửa dữ liệu, đăng nhập.

 Thông tin được gửi từ form với phương thức POST không giới hạn lượng thông tin gửi đi và sẽ không được hiển thị trên URL nên người dùng không thể thấy được.

 Cú pháp: $_POST[“tên_điều_khiển”]

 Tên_điều_khiển: giá trị của thuộc tính name của điểu khiển trong form Ví dụ: Trên trang trang1.php có form như sau:

(31)

Nhập họ tên: <input type=“text” name=“hoten” />

<input type=“submit” value=“GỬI” />

</form>

Trên trang2.php, muốn hiển thị dữ liệu người dùng đã submit trang1.php

<?php

$s = $_POST[“hoten”];

echo “Họ tên đã nhập: ”, $s;

?>

16. $_REQUEST

 Là mảng kết hợp bao gồm $_GET và $_POST

 Tức là, có thể dùng $_REQUEST thay cho $_GET và $_POST CÂU HỎI, BÀI TẬP

4.1. Tạo trang hiển thị chu vi và diện tích của hình chữ nhật, biết chiều dài và chiều rộng được truyền theo địa chỉ.

Ví dụ: http://localhost/bookstore/bai4.1.php?dai=5&rong=4

4.2. Tạo trang bookstore/admin/chude/them.php chứa form cho phép nhập thông tin cho chude, hiển thị lại những dữ liệu đã nhập khi người dùng submit.

4.3. Tạo trang tracuudiem/admin/monhoc/them.php chứa form cho phép nhập dữ liệu cho môn học mới, dữ liệu submit từ form sẽ được gửi đến trang tracuudiem/admin/monhoc/post.php. Trang post.php sẽ hiển thị lại các dữ liệu đã nhập từ them.php.

(32)

GỢI Ý, ĐÁP ÁN 4.1. Bài toán hình chữ nhật

4.2. Tạo trang bookstore/admin/chude/them.php Sử dụng Bootstrap 4 để thiết kế giao diện

Xử lý đọc dữ liệu post từ form: chèn đoạn mã bên dưới vào trước thẻ form

(33)

BÀI 5: THAO TÁC VỚI CÁC KIỂU DỮ LIỆU TRONG PHP Mã bài: 29.5

Giới thiệu:

Bài này cung cấp cho HSSV kiến thức và kỹ năng tính toán, sử dụng hàm với từng kiểu dữ liệu trong PHP.

Mục tiêu:

 Biết sử dụng các kiểu dữ liệu trong PHP

 Biết sử dụng các phép toán, hàm liên quan với các kiểu dữ liệu

 Tạo được trang web nhận, xử lý và hiển thị kết quả

 Cẩn thận truyền tham số có kiểu dữ liệu phù hợp cho hàm Nội dung chính:

1. Luận lý

Kiểu bool, chỉ có một trong hai giá trị là TRUE/true hoặc FALSE/false. Khi biến có giá trị là TRUE thì lệnh xuất giá trị của biến sẽ hiển thị giá trị 1. Khi biến có giá trị FALSE thì lệnh xuất sẽ không hiển thị nội dung.

Ví dụ:

17. Số nguyên

Giá trị có thể là số trong hệ thập phân, thập lục phân (cơ số 8) và bát phân (cơ số 16).

Ví dụ:

(34)

18. Số thực

Số thực trong PHP không phân biệt float hay double. Khi giá trị của biến/biểu thức có dấu chấm thập phân thì PHP tự hiểu là số thực.

Ví dụ:

19. Hàm toán học

Hàm Công dụng

abs($x) Trả về giá trị tuyệt đối của $x

ceil($x) Trả về số nguyên nhỏ nhất lớn hơn $x

floor($x) Trả về số nguyên lớn nhất nhỏ hơn $x

pi() Giá trị của PI

min Tìm giá trị nhỏ nhất

max Tìm giá trị lớn nhất

(35)

round($x, $n) Trả về số thực từ $x được làm tròn còn $n số thập phân

pow($x, $y) Tính $x lũy thừa $y

rand($x, $y) Trả về số nguyên ngẫu nhiên trong đoạn từ $x đến $y

20. Chuỗi, ký tự

 Mỗ ký tự chiếm 1 byte.

 Mỗi chuỗi có thể chứa một hay nhiều ký tự.

 Chuỗi không có giới hạn về kích thước.

 Hằng chuỗi được đặt trong cặp dấu nháy kép hoặc nháy đơn.

21. Hàm trên chuỗi

Hàm Công dụng

trim($s) Bỏ các khoảng trắng ở 2 đầu chuỗi s

strlen($s) Trả về chiều dài của $s

strcmp($s1, $s2) So sánh hai chuỗi $s1 và $s2

strpos($s_main, $s_sub) Trả về vị trí đầu tiên tìm thầy $s_sub trong $s_main. Nếu không tìm thấy thì trả về FALSE

str_replace($s1, $s2, $s_main) Tìm trong $s_main, thay $s1 bằng $s2 substr($s, $pos, [$len]) Từ vị trí $pos trong $s, lấy ra $len ký

tự

implode(“;”, array($s1, $s2)) Kết hợp $s1 và $s2 thành một chuỗi cách nhau bằng dấu chấm phẩy “;”

explode(“;”, $s) Tách chuỗi $s thành mảng các chuỗi

con dựa vào dấu chấm phẩm “;”

22. Mảng 7.1. Khai báo Khai báo:

$tên_mảng = array();

Ví dụ:

$a = array();

Khai báo và khởi tạo

 Trường hợp 1: không định nghĩa khóa/thuộc tính cho mỗi phần tử. Sử dụng trong trường hợp dùng mảng để chứa danh sách các phần tử có cùng kiểu dữ liệu.

Cách 1: $tên_mảng = array(GT1, GT2, …,GTn);

Cách 2: $tên_mảng = [GT1, GT2, …,GTn];

(36)

Ví dụ:

$a1 = array(5, 2, 6, 1, 7);

$a2 = [6, 7, 2, 5, 1];

 Trường hợp 2: Định nghĩa khóa/thuộc tính cho mỗi phần tử. Sử dụng trong trường hợp dùng mảng để chứa thông tin của một đối tượng.

Cách 1: $tên_mảng = array(“K1”=>GT1, “K2”=>GT2, …,

“Kn”=GTn);

Cách 2: $tên_mảng = [“K1”=>GT1, “K2”=>GT2, …, “Kn”=GTn];

Trong đó:

o “K1”, “K2”, … “Kn”: tên các khóa/thuộc tính.

o GT1, GT2, …, GTn: giá trị tương ứng của khóa/thuộc tính Ví dụ: tạo mảng $sach1 lưu thông tin một quyển sách

$sach1 = array(

‘isbn’ => ‘123456’,

‘tensach’ => ‘Thiết kế web’,

‘chudeid’ => 1,

‘nxbid’ => 2,

‘namxb’ => 2015,

‘dongia’ => 75000,

‘noidung’ => ‘Nội dung sách Thiết kế web’

);

Ví dụ: Tạo tập tin config.php chứa khai báo biến mảng toàn cục $cfg lưu thông tin cấu hình của website.

7.2. Truy xuất

Cú pháp: $tên_mảng[<khóa>]

Ví dụ:

$x = $a[1]; //$x sẽ có giá trị là 2

(37)

$y = $sach1[‘tensach’];//$y sẽ có giá trị là ‘Thiết kế web’

 Đếm số phần tử trong mảng: $n = count($tên_mảng)

 Duyệt mảng

o Cách 1: duyệt mảng không có khóa, đã lưu số phần tử của mảng vào biến

for ($i=0; $i<$n; $i++) {

//Xử lý trên mỗi phần tử $tên_mảng[$i]

} Ví dụ:

$mang = array(1, 2, 3, 5, 6, 4);

$n = count($mang);

for ($i=0; $i<$n; $i++) echo “\t” . $mang[$i];

o Cách 2: duyệt mảng khi chưa lưu số phần tử vào biến, chỉ quan tâm đến giá trị, không quan tâm đến khóa của từng phần tử

foreach ($tên_mảng as $giá_trị) {

//Xử lý trên $giá_trị }

Ví dụ:

$mang = array(1=> “Một”, 2=> “Hai”, 3=> “Ba”, 4=> “Bốn”);

foreach($mang as $x) echo “\t $x”;

o Cách 3: duyệt mảng có khóa do người tạo, lấy cả khóa và giá trị foreach ($tên_mảng as $khóa=>&$giá_trị)

{

//Xử lý trên $khóa và $giá_trị }

Ví dụ:

$mang = array(

‘masv’ => ‘sv01’,

‘holot’=> ‘Nguyễn Văn’,

‘ten’ => ‘Thanh’

);

foreach ($mang as $k=>&$v)

(38)

echo “$k => $v”;

7.3. Thêm phần tử vào mảng

$biến_mảng[] = <Giá trị>;

Ví dụ:

$a = [1, 2, 3, 4];

$a[] = 99; //$a[4]=99 7.4. Hàm trên mảng

Hàm Công dụng

aray_search Trả về vị trí có giá trị cần tìm trong mảng Ví dụ:

$k = array_search(<Giá trị cần tìm>, $tên_mảng);

array_merge Ghép 2 mảng vào 1 mảng

$a = array_merge($tên_mảng_1, $tên_mảng_2);

array_count_value s

Đếm số lần xuất hiện của từng giá trị trong mảng Ví dụ:

$mang = array(1, “hello”, 1, “world”, “hello”, 2, “chào”, 1)

$mang_slxh = array_count_values($mang);

//$mang_slxh là Array([1]=>3, “hello”=>2, “world=>3, 2=>1, “chào”=>1)

array_unique Tạo mảng chứa mỗi giá trị xuất hiện 1 lần duy nhất Ví dụ:

$mang1 = array(1, 3, 1, 2, 5, 1, 3, 4);

$mang2 = array_unique($mang1);

//$mang2 là Array(1, 3, 2, 5, 4)

array_diff Tạo mảng chứa giá trị chỉ thuộc mảng 1 mà không thuộc mảng 2

Ví dụ:

$mang1 = array(“a”=> “xanh”, “đỏ”, “tím”, “vàng”);

$mang2 = array(“b”=>”xanh”, “vàng”, “đỏ”);

$mang_con_1 = array_diff($mang1, $mang2);

//$mang_con_1 là array([0]=> “tím”) CÂU HỎI, BÀI TẬP

5.1. Tạo trang tracuudiem/admin/sinhvien/them.php chứa form cho phép nhập các thông của sinh viên mới: Mã sinh viên, Họ tên, Lớp, Ngày sinh, Giới tính, Điện thoại, Email. Dữ liệu submit được lưu vào mảng sinhvien. Xuất thông tin trong mảng sinhvien.

(39)

GỢI Ý, ĐÁP ÁN

Đoạn mã HTML cho Giới tính

(40)

Đoạn mã PHP lưu thông tin submit vào mảng sinhvien

(41)

BÀI 6: CẤU TRÚC ĐIỀU KHIỂN Mã bài: 29.6

Giới thiệu:

Bài này cung cấp cho HSSV sử dụng được các cấu trúc điều khiển trong PHP.

Mục tiêu:

 Biết công dụng của các cấu trúc điều khiển

 Sử dụng các cấu trúc điều khiển để giải các bài toán trong PHP

 Thực hiện được các biện pháp an toàn cho máy tính

 Cẩn thận tránh vòng lặp vô hạn Nội dung chính:

1. if, if … else 1.1. Cấu trúc if

Công dụng: kiểm tra nếu thỏa điều kiện thì thực hiện.

Cú pháp:

if (<Điều kiện>) {

//Các lệnh được thực hiện khi điều kiện đúng }

Ví dụ:

$a=3; $b=5;

if($b>$a)

echo $b . “>” . $a;

1.2. Cấu trúc if … else

Công dụng: kiểm tra nếu điều kiện đúng thì thực hiện CV1, nếu điều sai thì thực hiện CV2.

Cú pháp:

if (<Điều kiện>) {

//Các công việc 1 }

else {

//Các công việc 2 }

(42)

Ví dụ:

$a=3; $b=5;

if($b>$a)

echo $b . “>” . $a;

else

echo $a . “>” . $b;

23. switch

Công dụng: thực hiện công việc theo mỗi trường hợp.

Cú pháp:

switch(<Biểu thức>) {

case <gt1>:

//thực hiện các công việc khi <Biểu thức> có giá trị là <gt1>

break;

case <gt2>:

//thực hiện các công việc khi <Biểu thức> có giá trị là <gt2>

break;

[

case <gt_i>:

//thực hiện công việc khi <Biểu thức> có giá trị

<gt_i>

break;

] [

default:

//thực hiện các công việc khi <Biểu thức> có gí trị khác

] }

Ví dụ:

$t=2;

switch ($t) {

case 1: echo “Một”; break;

case 2: echo “Hai”; break;

case 3: echo “Ba”; break;

(43)

}

24. for, foreach 3.1. Vòng lặp for Cú pháp:

for (bt1; bt2; bt3) {

//Các lệnh được thực hiện khi bt2 đúng }

 bt1: biểu thức khởi tạo biến đếm

 bt2: biểu thức điều kiện

 bt3: biểu thức thay đổi giá trị biến đếm Ví dụ:

3.2. Vòng lặp foreach

Công dụng: duyệt từng phần tử trong danh sách/mảng Cách 1: chỉ quan tâm đến giá trị các phần tử

Cú pháp:

foreach (array_expression as $value) {

//Các lệnh thực hiện cho mỗi phần tử }

Ví dụ:

(44)

Cách 2: truy cập khóa và giá trị của từng phần tử Cú pháp:

foreach (array_expression as $key => &$value) {

//Các lệnh thực hiện với khóa, giá trỉ của mỗi phần tử }

Ví dụ:

(45)

25. while, while … endwhile, do … while Cú pháp while:

while (<biểu thức điều kiện>) {

//Các lệnh thực hiện cho mỗi lần lặp }

Cú pháp while … endwhile:

while (<biểu thức điều kiện):

//Các lệnh thực hiện cho mỗi lần lặp endwhile;

Cú pháp do … while:

do {

//Các lệnh thực hiện cho mỗi lần lặp }while(<biểu thức điều kiện>);

Ví dụ:

26. Các lệnh break, continue Công dụng: thoát khỏi vòng lặp Ví dụ:

(46)

CÂU HỎI, BÀI TẬP

6.1. Tạo trang web cho phép nhập vào các hệ số nguyên a, b, c của phương trình bậc 2. Sau khi submit thì hiển thị kết quả nghiệm của phương trình.

6.2. Tạo trang web nhập vào tháng, năm. Sau khi submit thì hiển thị lịch các ngày trong tháng đó.

6.3. Tạo trang web nhập vào năm. Sau khi submit thì hiển thị lịch (dương lịch) các tháng năm đó. Lịch của mỗi tháng giống mẫu của Bài 6.2.

(47)

BÀI 7: XÂY DỰNG VÀ SỬ DỤNG HÀM Mã bài: 29.7

Giới thiệu:

Bài này cung cấp cho HSSV kiến thức và kỹ năng xây dựng và sử dụng hàm tự định nghĩa.

Mục tiêu:

 Biết cú pháp định nghĩa hàm

 Xây dựng và sử dụng hàm

 Tạo trang web xử lý và hiển thị dữ liệu có sử dụng hàm

 Tránh xây dựng các hàm mà PHP đã có sẵn Nội dung chính:

1. Định nghĩa hàm Cú pháp:

function <TênHàm> ($ts1, $ts2, …) {

//các lệnh

[return <giá trị>;]

}

Ví dụ 1:

function Xuat ($n) {

for ($i=0; $i<$n; $i++) echo $i;

}

Ví dụ 2:

function LuyThua ($a, $b) {

$kq = 1;

for ($i=1; $i<=$b; $i++)

$kq = $kq * $a;

return $kq;

}

27. Tham số của hàm

Tham trị: như các ví dụ ở mục 1

Tham biến: thêm dấu & trước tham số Ví dụ:

(48)

Tham số có giá trị mặc định

CÂU HỎI, BÀI TẬP 7.1. Làm lại các bài tập của Bài 6 (sử dụng hàm).

(49)

BÀI 8: SỬ DỤNG INCLUDE VÀ REQUIRE Mã bài: 29.8

Giới thiệu:

Bài này cung cấp cho HSSV kiến thức và kỹ năng dùng các lệnh include và require để chia nhỏ chức năng vào từng trang và sử dụng cho các trang khác.

Mục tiêu:

 Biết công dụng của các lệnh include, require

 Sử dụng các lệnh include, include_once, require, require_once

 Tạo trang web xử lý có sử dụng các tập tin thư viện

 Xác định cẩn thận tập tin cần sử dụng 1 lần hay nhiều lần Nội dung chính:

1. include, include_once

Công dụng chung: đặt các lệnh từ một tin thư viện vào vị trí hiện tại của lệnh include (include_once).

Khác nhau: include_once sẽ kiểm tra nếu chưa sử dụng tập tin thư viện thì mới đặt các lệnh vào.

Ví dụ 1:

Ví dụ 2:

(50)

28. require, require_once require: tương tự include

require_once: tương tự include_once

CÂU HỎI, BÀI TẬP

8.1. Làm lại bài tập của Bài 7, sử dụng hàm và require/ require_once, include/

include_once

(51)

BÀI 9: TẠO CÁC LỚP ĐỐI TƯỢNG Mã bài: 29.9

Giới thiệu:

Bài này cung cấp cho HSSV kiến thức và kỹ năng lập trình hướng đối tượng trong PHP.

Mục tiêu:

 Biết cú pháp định nghĩa lớp đối tượng

 Xây dựng và sử dụng lớp đối tượng.

 Tạo trang web sử dụng các lớp đối tượng xử lý

 Xác định cẩn thận các lớp đối tượng cần xây dựng phù hợp với CSDL Nội dung chính:

1. Tổng quan Ý nghĩa

Đối tượng (Object) là những thực thể tồn tại trong thế giới thực.

Hình 9.1: Mối tương quan giữa đối tượng thực tế với đối tượng trong lập trình Ví dụ

 Con người

o Sinh viên Nguyễn Văn A o Nhân viên Huỳnh Thị B

 Đồ vật

o Phòng học 1PM1 o Máy tính PCCH1 Tiếp cận hướng đối tượng

Là kỹ thuật biểu diễn tự nhiên đối tượng trong thực tế với đối tượng trong chương trình.

Lớp đối tượng

(52)

Là một khái niệm trong lập trình hướng đối tượng, mô tả những thực thể có chung tính chất và hành vi. Class định nghĩa những thuộc tính và hành vi được dùng cho những đối tượng của lớp đó.

Kết quả của sự trừu tượng hóa (Abstraction) các đối tượng là:

 Cùng loại

 Cùng các thông tin mô tả về đối tượng

Chúng ta sẽ đặt các tập tin chứa định nghĩa lớp đối tượng trong thư mục models của ứng dụng web.

29. Xây dựng lớp đối tượng (class) 2.1. Tạo lớp đối tượng

class <TênLớp>

{

//Khai báo các thuộc tính

//Gán và lấy giá trị các thuộc tính //Định nghĩa các phương thức

}

2.2. Khai báo thuộc tính

Thuộc tính: thành phần lưu trữ các tính chất, đặc điểm của đối tượng.

Cú pháp: [<khóa truy cập>] <Tên thuộc tính>

<khóa truy cập>: private, protected, public Nếu không có khóa truy cập thì sẽ hiểu là public.

 private: chỉ có thể gọi thuộc tính/phương thức ngay bên trong định nghĩa lớp đối tượng.

 public: được phép gọi thuộc tính/phương thức bên ngoài định nghĩa lớp đối tượng.

 protected: được phép gọi thuộc tính/phương thức bên trong định nghĩa lớp đối tượng và lớp dẫn xuất.

Chú ý: có thể thiết lập những giá trị mặc định ban đầu cho tất cả các thuộc tính được tạo ra từ lớp đó.

Ví dụ: Tập tin models/chude.php chứa định nghĩa lớp đối tượng CChude

(53)

2.3. Xây dựng phương thức

Phương thức là chức năng mà đối tượng có thể thực hiện, có thể có hoặc không có giá trị trả về.

Cú pháp:

[<khóa truy cập>] function <Tên phương thức> (các tham số) {

//các lệnh xử lý }

 Phương thức khởi tạo: phương thức có tên là __construct hoặc trùng với tên lớp. Chỉ được định nghĩa tối đa 1 phương thức khởi tạo cho mỗi lớp đối tượng.

Ví dụ:

hoặc

 Biện pháp nạp chồng phương thức khởi tạo

(54)

 Phương thức hủy: phương thức có tên là __destruct. Chỉ được định nghĩa tối đa 1 phương thức hủy cho mỗi lớp đối tượng.

Ví dụ:

 Các phương thức xử lý khác: đọc danh sách, thêm/xóa/sửa dòng dữ liệu, tính toán, …

Ghi chú:

Trong các phương thức của lớp, có thể truy cập các thuộc tính hay phương thức thông qua con trỏ $this. Con trỏ $this được dùng để chỉ đối tượng hiện tại đang thực thi phương thức.

2.4. Từ khóa static

Sử dụng từ khóa static khi khai báo thuộc tính (hoặc phương thức) để cho biết đó là thuộc tính (hoặc phương thức) lớp.

Ví dụ: phương thức lớp List trả về mảng chứa danh sách các đối tượng CChude.

Trong ví dụ trên, chúng ta đã định nghĩa phương thức lớp GetList với từ khóa static.

30. Sử dụng lớp đối tượng 3.1. Khởi tạo đối tượng

Cú pháp: $<tên biến> = new <Tên lớp>();

Ví dụ: khởi tạo đối tượng chủ đề không có tham số

$cd1 = new CChude();

(55)

Ví dụ: khởi tạo đối tượng chủ đề có tham số

$cd2 = new CChude(4, ‘Điện’);

3.2. Gán giá trị cho các thuộc tính

Cú pháp: $<tên biến>-><tên thuộc tính> = <giá trị>;

Ví dụ:

$cd1->Ten = “Công nghệ Thông tin”;

3.3. Gọi sử dụng các phương thức

 Phương thức không có giá trị trả về Cú pháp:

$<tên biến>-><tên phương thức>(các giá trị truyền vào nếu có);

Ví dụ: $cd1->setTen(‘CNTT’);

 Phương thức có giả trị trả về Cú pháp:

$<tên biến> = $<tên biến đối tượng>-><Tên phương thức>(các giá trị truyền vào nếu có);

Ví dụ:

$s = $cd1->getTen();

echo $s;

 Truy xuất thuộc tính/phương thức static Cú pháp:

<Tên lớp>::<Tên thuộc tính/Phương thức>

Ví dụ: tạo trang danhsachchude.php hiển thị danh sách chủ đề

(56)

Trong ví dụ trên, chúng ta không được truy cập vào tên chủ đề trực tiếp bằng

$cd->Ten vì thuộc tính $Ten đã được khai báo với khóa truy cập private trong định nghĩa lớp đối tượng. Chúng ta phải truy cập tên của chủ đề bằng phương thức getTen đã được định nghĩa với khóa truy cập public.

CÂU HỎI, BÀI TẬP

9.1. Xây dựng các lớp đối tượng tương ứng với từng table trong CSDL bookstore và tracuudiem. Mỗi lớp đối tượng được định nghĩa bên trong tập tin .php, đặt trong thư mục models của ứng dụng web.

9.2. Xây dựng các phương thức khởi tạo, hủy, đọc/cập nhật thuộc tính, trả về danh sách cho từng lớp đối tượng đã xây dựng ở Bài 9.1.

GỢI Ý, ĐÁP ÁN Tham khảo tập tin bookstore/models/chude.php

(57)

BÀI 10: TRUY XUẤT MYSQL TRONG PHP Mã bài: 29.10

Giới thiệu:

Bài này cung cấp cho HSSV kiến thức và kỹ năng lập trình PHP để truy xuất dữ liệu từ MySQL và hiển thị trên trang web.

Mục tiêu:

 Biết các bước đọc, ghi dữ liệu MySQL bằng PHP

 Tạo được lớp đối tượng xử lý dữ liệu MySQL

 Tạo trang web đơn giản hiển thị dữ liệu MySQL

 Thực hiện được các biện pháp an toàn cho máy tính Nội dung chính:

1. Giới thiệu PDO

 PDO – PHP Data Objects: là một lớp truy cập dữ liệu cung cấp phương thức chuẩn để truy cập vào nhiều loại CSDL khác nhau.

Hình 10.1: Các CSDL mà PDO có thể truy cập

 PDO cung cấp một lớp truy cập dữ liệu trừu tượng. Nghĩa là, dù chúng ta đang sử dụng CSDL nào, đều có thể sử dụng phương thức như nhau để truy xuất CSDL.

 PDO không cung cấp một CSDL trừu tượng. Vì vậy, chúng ta cần phải sử dụng một lớp trừu tượng nếu chúng ta cần CSDL đó.

31. Lý do chọn PDO

 Hướng đối tượng: rất phù hợp để tích hợp vào mô hình MVC (rất nhiều framework lớn hiện nay sử dụng PDO).

(58)

Hình 10.2: Mô hình làm việc giữa PDO và các loại CSDL

 Nhanh và đơn giản: việc thao tác với từng loại CSDL sẽ do từng driver tương ứng đảm nhiệm.

Hình 10.3: Mô hình driver tương ứng với các CSDL của PDO

 Linh động: Đễ chuyển đổi sang CSDL khác, chúng ta chỉ cần thay đổi tên driver tương ứng.

 An toàn: với giải pháp PDOStatement, chúng ta không còn lo sợ SQL injection tấn công.

Hình 10.4: Mô hình giải pháp PDOStatement 32. Tạo kết nối – Hủy kết nối

3.1 Tạo kết nối Cú pháp:

$dbh = new PDO(<driver>, <username>, <password>,

<driver_options>);

Tham số:

 <driver>: tên driver dùng để làm việc với CSDL

(59)

 <username>: tên đăng nhập vào CSDL

 <password>: mật khẩu đăng nhập vào CSDL

 <driver_options>: tham số tùy chọn, dùng để bổ sung thêm các trạng thái kết nối của PDO.

Hình 10.5: Mô hình dùng PDO kết nối đến CSDL từ PHP Server hỗ trợ khá nhiều driver:

 PDO_DBLIB (Microsoft SQL Server)

 PDO_IBM (IBM DB2)

 PDO_MYSQL (MySQL)

 PDO_OCI (Oracle Call Interface)

 PDO_PGSQL (Postgre SQL)

Xem server hỗ trợ những loại driver nào:

<?php

printf_r(PDO:getAvailableDrivers());

?>

3.2. Hủy kết nối

$dbh = null;

3.3. Xử lý lỗi kết nối try

{

$dbh = new PDO(‘mysql:host=localhost;

dbname=bookstore’, ‘bctech’, ‘@12345Aa’);

//Các lệnh đọc, ghi dữ liệu

$dbh = NULL;

}

catch (PDOException $e) {

printf ‘Error: ’ . $e->getMessage() . ‘<br />’;

die();

}

Ví dụ: Tạo tập tin models/ketnoi.php thực hiện các các công việc kết nối, đọc, thêm, xóa, sửa cơ sở dữ liệu trong ứng dụng bookstore.

(60)

Trong ví dụ trên, chúng ta đã tạo biến toàn cục $dbh là một đối tượng PDO kết nối đến CSDL MySQL. Các thông tin kết nối đã được lưu trong biến toàn cục

$cfg khai báo trong tập tin config.php.

33. Thực thi lệnh SQL

4.1. Các lệnh Insert, Update, Delete Cú pháp:

$dbh -> exec(<sqlstatement>);

<sqlstatement>: tham số bắt buộc, là câu lệnh cập nhật dữ liệu được gửi đi.

Kết quả trả về: số dòng bị ảnh hưởng. Nếu không có dòng nào bị tác động thì kết quả là 0. Nếu không thực thi được thì kết quả là false.

4.2. Câu lệnh Select Cú pháp:

$dbh -> query(<sqlstatement>);

Tham số: <sqlstatement>: tham số bắt buộc, là câu lệnh truy vấn được gửi đi.

34. Transaction

 Một giao tác (transaction) là một chuỗi hoặc nhiều câu lệnh SQL được kết hợp lại với nhau thành một khối công việc. Việc kết hợp các câu lệnh lại với nhau trong một giao tác nhằm đảm bảo tính toàn vẹn dữ liệu và khả năng phục hồi dữ liệu.

 Trong một giao tác, các câu lệnh có thể độc lập với nhau nhưng tất cả các câu lệnh trong một giao tác đòi hỏi phải thực thi trọn vẹn hoặc không một câu lệnh nào được thực thi.

(61)

Hình 10.6: Mô hình Transaction của PDO Transaction được định nghĩa dựa trên các câu lệnh xử lý sau đây:

 BEGIN TRANSACTION: bắt đầu một transaction

 COMMIT: đánh dấu kết thúc transaction. Câu lệnh này báo hiệu sự kết thúc thành công của một transaction. Sau câu lệnh này, một transaction mới sẽ được bắt đầu.

 ROLLBACK: hủy transaction và đưa CSDL về trang thái như trước khi transaction bắt đầu. Một transaction mới sẽ bắt đầu sau khi câu lệnh ROLLBACK được thực thi.

35. PDO Statement

Việc truy cập CSDL trực tiếp qua đối tượng PDO không an toàn. Thay vào đó, chúng ta sẽ thực hiện thông qua đối tượng PDOStatement.

6.1. Prepared statement

Sử dụng prepared statement sẽ giúp tránh các SQL injection.

Cú pháp: $statement = $dbh->prepare(<query>);

Tham số:

<query>: tham số bắt buộc, là câu lệnh được gửi đi.

Ví dụ:

$statement = $dbh->prepare(‘SELECT * FROM chude’);

6.2. Thực thi

Cú pháp: $statement->execute([array $params=NULL]);

(62)

$params: mảng tham số truyền vào phương thức execute. Mặc định nếu không truyền tham số thì $params=NULL.

6.3. Duyệt dữ liệu

Duyệt lần lượt từng mẫu tin

Cú pháp: $statement->fetch([int $fetch_style]);

Dữ liệu được lấy thông qua phương thức fetch(). Trước khi gọi fetch(), cần phải cho PDO biết các dữ liệu muốn lấy thông quan tham số tùy chọn

$fetch_style.

Hình 10.7: Mô hình tương quan giữa đối tượng và dãy mẫu tin thông qua PDO Giá trị của $fetch_style:

 PDO::FETCH_NUM: kết quả trả về là một mảng (có chỉ số) chứa giá trị của một dòng dữ liệu với mỗi phần tử là nội dung của một cột  truy cập bằng cách gọi từng phần tử của mảng $row[0], $row[1], $row[2], …

 PDO::FETCH_ASSOC: kết quả trả về là một mảng (có chỉ số chuỗi) chứa giá trị của một dòng dữ liệu với mỗi phần tử là nội dung của một cột  truy cập bằng cách gọi từng phần tử của mảng: $row[“tên cột 1”],

$row[“tên cột 2”], …

 PDO::FETCH_BOTH: kết quả trả về là một mảng (có chỉ số chuỗi và số) chứa giá trị của một dòng dữ liệu với mỗi phần tử là nội dung của một cột

 truy cập bằng cách gọi từng phần tử của mảng theo FETCH_NUM hoặc FETCH_ASSOC.

 PDO::FETCH_OBJ: kết quả trả về là một mẫu tin trong bộ các mẫu tin như là một đối tượng  truy cập bằng cách gọi từng thuộc tính của đối tượng:

$<tên đối tượng>-><tên cột 1>, $<tên đối tượng>-><tên cột 2>, … Đọc danh sách các mẫu tin

$statement->fetchAll([int $fetch_style, [$column_index]]) Tham số:

 $fetch_style:

o PDO::FETCH_BOTH: giá trị mặc định. Kết quả trả về là mảng. Mỗi phần tử bên trong là mảng 1 chiều (có chỉ số chuỗi và số) chứa nội dung

(63)

của một dòng dữ liệu, với mỗi phần tử bao gồm khóa/tên cột và giá giá trị tương ứng.

o PDO::FETCH_COLUMN: kết quả trả về là mảng 1 chiều chứa tất cả các giá trị của một cột được chỉ định.

 $column_index: kết quả trả về là một cột được chỉ định khi $fetch_style có giá trị là PDO::FETCH_COLUMN.

6.4. Truyền tham số trong câu truy vấn Cú pháp:

$statement->bindParam(mixed $parameter, $mixed &$variable [, int $data_type, [,int $length [,$mixed

$driver_options]]]);

Tham số:

$parameter: tên tham số

$variable: giá trị tham số

$data_type: tùy chọn kiểu dữ liệu của tham số, có cú pháp PDO:PARAMS_*

$length: tùy chọn, chiều dài của kiểu dữ liệu

$driver_options: tùy chọn driver 6.5. Đếm số lượng mẫu tin

Cú pháp: $statement->rowCount();

Trả về số lượng mẫu tin bị tác động bởi câu lệnh insert, update, delete Ví dụ: hoàn chỉnh trang hiển thị danh sách chủ đề trong CSDL bookstore.

Bước 1: viết thêm các lệnh định nghĩa lớp đối tượng dbmodel

(64)

Bước 2: cập nhật lại phương thức List của lớp đối tượng chude bên trong tập tin models/chude.php

Bước 3: cập nhật tập tin danhsachchude.php

(65)

CÂU HỎI, BÀI TẬP

10.1. Cập nhật tập tin danhsachchude.php sao cho tên của mỗi chủ đề là liên kết, khi người dùng click vào thì truy cập đến địa chỉ sachchude.php?id=<chudeid>

Ví dụ: khi click lên Công nghệ Thông tin thì liên kết đến sachchude.php?id=1 10.2. Định nghĩa lớp đối tượng CSach trong tập tin models/sach.php và tập tin sachchude.php sao cho khi người dùng truy cập theo địa chỉ sachchude.php?

id=<chudeid> thì hiển thị tên các quyển sách của chủ đề tương ứng.

Ví dụ: kết quả hiển thị khi truy cập sachchude.php?id=1

Tài liệu tham khảo

Đề cương

Tài liệu liên quan

- Ngôn ngữ định nghĩa dữ liệu: thể hiện trong các hệ QTCSDL là các công cụ hỗ trợ cho việc tạo lập CSDL như các thao tác khai báo tên cột, kiểu dữ liệu của cột, …..

Tội phạm

Website là một tập hợp gồm một hoặc nhiều trang web liên quan được tổ chức dưới một địa chỉ truy cập chung?. Địa chỉ website là địa chỉ truy cập trung của

Văn bản: Em nhấn Ctrl+S hoặc nháy nút phải chuột lên vị trí không có ảnh, video hay liên kết và chọn lệnh Lưu thành… Trong cửa sổ mới được mở ra sau đó em gõ tên tệp

Hiện nay, Bộ Tài chính đã xây dựng và đưa vào vận hành 04 CSDL về TSC gồm: (i) CSDL về tài sản nhà nước - tài sản nhà nước (TSNN) (quản lý tài sản là đất, nhà thuộc

1. Mọi tài sản của Bệnh viện đều phải được giao, phân công, phân cấp rõ thẩm quyền, trách nhiệm cho từng cá nhân và khoa, phòng quản lý, sử dụng. Tài sản của Bệnh

+ Phòng Hành chính Quản trị tham mưu giúp Giám đốc tổ chức thẩm định thiết kế bàn vẽ thi công và dự toán công trình; trường hợp cần thiết thì Giám đốc thuê tư vấn thẩm

The article content survey research methods and retraces average error processing applications to connect the ground and measure the value of GPS in geodetic control