Đoàn Phan Thái

Bài giảng

LẬP TRÌNH WEB

Bình Thuận, 01/2019

LẬP TRÌNH WEB

Đoàn Phan Thái

dpthai@btu.edu.vn

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

1.1. Giới thiệu: - MySQL là hệ quản trị cơ sở dữ liệu (Database Management System - DBMS), được xây dựng bởi David Axmark và Michael Monty Widenius năm 1995. MySQL còn được biết đến như là một hệ quản trị cơ sở dữ liệu quan hệ (Relational Database Management System -RDBMS) mã nguồn mở nổi tiếng thế giới.

- Hiện nay, MySQL được phát triển, phân phối và hỗ trợ bởi công ty Oracle.

- Một số đặc điểm nổi bật của MySQL:

+ Quản trị dữ liệu theo mô hình Client/Server. + Mã nguồn mở và không cần trả phí sử dụng. + Hoạt động trên nhiều hệ điều hành và với nhiều ngôn ngữ (PHP, C/C++, Java…). + Hỗ trợ ngôn ngữ truy vấn có cấu trúc (Structured Query Language - SQL). + Dễ sử dụng, tốc độ nhanh và có thể làm việc với bộ dữ liệu lớn. + Đảm bảo an toàn bảo mật với cơ chế phân quyền người dùng.

1.2. Kiểu dữ liệu: - MySQL cung cấp nhiều kiểu dữ liệu1 để mô tả nhiều loại thông tin lưu trữ khác nhau, cho phép thiết kế chính xác các trường dữ liệu của bảng trong cơ sở dữ liệu.

- MySQL chia làm 3 nhóm dữ liệu: dữ liệu kiểu số (Numeric Data Types), dữ liệu kiểu chuỗi (String Types) và dữ liệu kiểu ngày giờ (Date and Time Types). Tuy nhiên, chỉ một số kiểu dữ liệu là thường xuyên sử dụng và các kiểu còn lại ít thông dụng hơn.

Bảng 1: Các kiểu dữ liệu thông dụng.

Kiểu dữ liệu Diễn giải

Dữ liệu kiểu số (Numeric Data Types)

TINYINT [(M)]

Kiểu số nguyên có giá trị từ -128  127 hay từ 0  255. Giá trị M chỉ số bit kích thước, mặc định M=1.

BOOL Tương tự như kiểu TINYINT(1), số 0 là false và số 1 là true.

1 Kiểu dữ liệu của MySQL theo địa chỉ tài liệu: https://dev.mysql.com/doc/refman/8.0/en/data-type- overview.html

SMALLINT [(M)] Kiểu số nguyên có giá trị từ -32,768  32,767 hay từ 0  65,535.

Trang 1

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web

INT [(M)] Kiểu số nguyên có giá trị từ -2,147,483,648  2,147,483,647 hay từ 0  4,294,967,295.

FLOAT [(M,D)] Kiểu số thập phân có độ chính xác đơn (khoảng 7 chữ số thập phân). M là tổng số chữ số và D là số chữ số sau dấu thập phân.

DOUBLE [(M,D)] Kiểu số thập phân có độ chính xác kép (khoảng 15 chữ số thập phân).

Dữ liệu kiểu chuỗi (String Types)

CHAR [(M)]

Kiểu chuỗi có độ dài cố định, tối đa 255 ký tự. M là số ký tự, mặc định M=1. Nếu giá trị thật kiểu Char không bằng với độ dài khai báo M thì phần thiếu bên phải sẽ được thêm bằng các ký tự trắng một cách tự động.

VARCHAR(M)

Kiểu chuỗi có độ dài thay đổi, tối đa 65,535 ký tự. Nếu giá trị thật kiểu Varchar không bằng với độ dài khai báo M thì lưu trữ đúng theo độ dài chuỗi thực tế. Khai báo M là bắt buộc khi sử dụng kiểu Varchar.

TEXT [(M)] Kiểu chuỗi ký tự (Character Strings), chứa tối đa 65,535 ký tự, thường dùng khi chứa lượng lớn dữ liệu ký tự.

BLOB [(M)] (Binary Large Objects) Kiểu chuỗi nhị phân (Binary Strings), chứa tối đa 65,535 bytes, thường dùng khi chứa lượng lớn dữ liệu nhị phân (hình ảnh, tập tin thực thi, phim ảnh,...).

ENUM('value1','value2',...) Kiểu dữ liệu chứa danh sách gồm các giá trị kiểu chuỗi, danh sách chứa tối đa 65,535 giá trị.

Dữ liệu kiểu ngày giờ (Date and Time Types)

DATE

Kiểu ngày theo định dạng YYYY-MM-DD, có giá trị từ 1000-01-01  9999-12-31. Cho phép gán giá trị kiểu số và kiểu chuỗi sang kiểu ngày.

TIME Kiểu thời gian theo định dạng HH:MM:SS.

YEAR[(M)]

Giá trị thời gian là năm theo dạng 2/4 chữ số. Ở định dạng 2 chữ số: 70  69, (nghĩa là 1970  2069), ở định dạng 4 chữ số: 1901  2155.

Trang 2

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web 1.3. Quản lý cơ sở dữ liệu với phpMyAdmin: a) Kích hoạt máy chủ ảo:

- Khởi động ứng dụng XAMPP, chọn START để kích hoạt dịch vụ Apache và MySQL.

1

2

Hình 1.1: Thao tác kích hoạt dịch vụ Apache và MySQL.

b) Mở trang quản trị phpMyAdmin: - Nhập vào trình duyệt địa chỉ: http://localhost/phpmyadmin.

Chọn ngôn ngữ

Chọn kích thước phông chữ

Hình 1.2: Giao diện phpMyAdmin.

Trang 3

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web 1.3.1. Thao tác với cơ sở dữ liệu:

1.3.1.1. Tạo và xóa cơ sở dữ liệu:

a) Tạo cơ sở dữ liệu:

- phpMyAdmin là công cụ quản trị MySQL với giao diện đồ họa thân thiện và dễ dùng. Các thao tác tạo CSDL như sau:

1

2 3 5

4

Hình 1.3: Thao tác tạo cơ sở dữ liệu.

- Nếu CSDL được tạo thành công sẽ xuất hiện thông báo cùng với mã SQL.

Hình 1.4: Thông báo tạo cơ sở dữ liệu thành công.

- CSDL vừa tạo sẽ có các thông số quan trọng để phục vụ kết nối sau này:

+ Server: localhost + User: root + Password: (mặc định không có) + Database: qlsv

Trang 4

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web b) Xóa cơ sở dữ liệu:

- Nếu không cần sử dụng CSDL nữa, người dùng có thể xóa chúng để giảm không gian lưu trữ trên máy chủ.

1 2

3

4

Hình 1.5: Thao tác xóa CSDL.

- Người dùng cần xác nhận trước khi xóa CSDL:

Hình 1.6: Thông báo xác nhận xóa CSDL.

- Người dùng sẽ nhận được thông báo xóa CSDL thành công.

Hình 1.7: Thông báo xóa CSDL thành công.

1.3.1.2. Sao lưu và phục hồi cơ sở dữ liệu:

a) Sao lưu cơ sở dữ liệu:

- Trong quá trình làm việc, để bảo vệ CSDL tránh các sự cố không mong muốn, người dùng cần thường xuyên sao lưu CSDL qua chức năng Export.

Trang 5

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web

1

2

3

4

Tên máy chủ (localhost)

5

6

7

Hình 1.8: Thao tác sao lưu CSDL theo định dạng SQL.

Trang 6

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web b) Phục hồi cơ sở dữ liệu:

- Khi xảy ra sự cố làm hư hỏng dữ liệu, phpMyAdmin cho phép người dùng phục hồi dữ liệu đã sao lưu qua chức năng Import.

1

3 2

4

5

Hình 1.9: Thao tác phục hồi CSDL.

- Trong trường hợp CSDL đang tồn tại thì không cho phép phục hồi và người dùng sẽ nhận được thông báo lỗi #1007.

Hình 1.10: Thông báo lỗi #1007.

Trang 7

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web - Nếu phục hồi CSDL thành công thì sẽ xuất hiện thông báo đến người dùng:

Hình 1.11: Thông báo phục hồi CSDL thành công.

1.3.2. Thao tác với bảng dữ liệu:

1.3.2.1. Tạo và xóa bảng dữ liệu:

a) Tạo bảng dữ liệu:

- phpMyAdmin cho phép người dùng tạo các bảng (Table) trong CSDL như sau:

2

4 1

3 5

5

Hình 1.12: Thao tác tạo bảng dữ liệu.

- Bảng dữ liệu mới tạo chưa có trường dữ liệu. Các thao tác tạo trường dữ liệu như sau:

Trang 8

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web

Tạo khóa chính

Tạo khóa ngoại

1

2 3

Hình 1.13: Thao tác tạo các trường dữ liệu của bảng.

- Bảng dữ liệu mới được tạo thành công như sau:

Trường làm khóa chính

Trường làm khóa ngoại

Hình 1.14: Thông tin của bảng dữ liệu được tạo thành công.

Trang 9

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web b) Xóa bảng dữ liệu:

- Khi không còn sử dụng các bảng dữ liệu thì người dùng có thể xóa đi.

3

1

2

Hình 1.15: Thao tác xóa bảng dữ liệu.

- Hộp thoại xác nhận trước khi xóa bảng:

Hình 1.16: Thông báo xác nhận xóa bảng.

1.3.2.2. Quan hệ giữa các bảng dữ liệu:

- phpMyAdmin cung cấp chức năng Designer cho phép người dùng tạo quan hệ giữa các bảng dữ liệu. Các thao tác tạo quan hệ ràng buộc khóa chính, khóa ngoại giữa các bảng:

2

1

Trang 10

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web

3

4

7

5 8

6 5

Hình 1.17: Thao tác tạo quan hệ giữa các bảng.

- Ý nghĩa các lựa chọn khi tạo khóa ngoại:

+ CASCADE: Khi Delete/Update dữ liệu ở bảng cha (Parent Table) thì sẽ tự động

Delete/Update dữ liệu ở bảng con (Child Table).

+ SET NULL: Khi Delete/Update dữ liệu ở bảng cha thì sẽ tự động thiết lập NULL cho bảng con. Nếu khai báo trường dữ liệu của bảng con là NOT NULL thì không thể lựa chọn SET NULL.

+ RESTRICT: Không cho phép Delete/Update dữ liệu ở bảng cha nếu bảng con có dữ

liệu tương ứng.

+ NO ACTION: Tương tự như RESTRICT.

1.3.2.3. Thêm, xóa và sửa dữ liệu:

a) Thêm dữ liệu vào bảng:

- Người dùng cần thêm dữ liệu vào bảng chứa khóa chính rồi mới đến bảng chứa khóa ngoại.

3

1 4

2 5 5

Hình 1.18: Thao tác thêm dữ liệu vào bảng.

Trang 11

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web b) Sửa dữ liệu trong bảng:

- Khi cần sửa dữ liệu, người dùng cần kiểm tra khóa ràng buộc dữ liệu.

3 1

2 5

4

5

6

Hình 1.19: Thao tác sửa dữ liệu trong bảng.

c) Xóa dữ liệu trong bảng:

- Khi cần xóa dữ liệu, người dùng cần kiểm tra khóa ràng buộc dữ liệu.

Trang 12

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web

1

2

3

Hình 1.20: Thao tác xóa dữ liệu trong bảng.

- Người dùng cần xác nhận trước khi xóa dữ liệu:

Hình 1.21: Thông báo xác nhận xóa dữ liệu.

1.3.2.4. Thay đổi cấu trúc bảng dữ liệu:

- Sau khi tạo bảng và các trường dữ liệu, người dùng có thể chỉnh sửa, thêm bớt các trường dữ liệu đã tạo.

Trang 13

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web

3 1

2

5 Hành động điều chỉnh

Thêm trường dữ liệu

Hình 1.22: Thao tác chỉnh sửa trường dữ liệu.

1.3.2.5. Sao chép, di chuyển và đổi tên bảng dữ liệu:

- Thẻ Operations cho phép thực hiện các thao tác sao chép, di chuyển và đổi tên bảng dữ liệu.

1 3

2

Di chuyển bảng dữ liệu

Đổi tên bảng dữ liệu

Trang 14

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web

Sao chép bảng dữ liệu

Hình 1.23: Các chức năng trong thẻ Operations.

1.4. Câu lệnh SQL trong MySQL: - SQL (Structured Query Language) là ngôn ngữ truy vấn có cấu trúc, tuân theo chuẩn của ANSI (American National Standards Institute - Viện tiêu chuẩn quốc gia Hoa kỳ) để phục vụ các hệ quản trị cơ sở dữ liệu quan hệ.

- Các câu lệnh SQL chia làm 2 nhóm chính:

+ Ngôn ngữ định nghĩa dữ liệu (Data Definition Language - DDL): Tập hợp các lệnh

SQL (Create, Drop, Alter…) để tạo cấu trúc cho cơ sở dữ liệu như Table, Query, View…

+ Ngôn ngữ thao tác dữ liệu (Data Manipulation Language - DML): Tập hợp các lệnh

SQL (Select, Insert, Delete, Update,…) để thao tác dữ liệu.

- MySQL là một trong số các sản phẩm cơ sở dữ liệu quan hệ hỗ trợ tốt ngôn ngữ SQL để tương tác với cơ sở dữ liệu.

1.4.1. Nhóm lệnh định nghĩa dữ liệu:

1.4.1.1. Lệnh Create:

a) Tạo CSDL: - Sử dụng lệnh CREATE DATABASE để tạo CSDL. Cú pháp như sau:

CREATE DATABASE db_name

- Tham số:

+ db_name: Tên CSDL.

Ví dụ: Tạo CSDL Quản lý sinh viên.

CREATE DATABASE qlsv

Trang 15

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web - Trong giao diện phpMyAdmin, sử dụng thẻ SQL để viết lệnh như sau:

1

2

3

4

Hình 1.24: Thao tác tạo CSDL.

- Trường hợp máy chủ đang tồn tại CSDL qlsv thì xuất hiện lỗi #1007:

Hình 1.25: Lỗi tạo CSDL.

- Muốn tránh lỗi trên thì tạo CSDL với cú pháp như sau:

CREATE DATABASE IF NOT EXISTS db_name

Ví dụ: Tạo CSDL Quản lý sinh viên.

CREATE DATABASE IF NOT EXISTS qlsv

- CSDL mới được tạo sẽ có thông số Charset2 và Collate3 mặc định (Charset=latin1, Collate=latin1_swedish_ci). Để quy định cụ thể Charset và Collate khi tạo CSDL thì sử dụng cú pháp sau:

2 Charset (hay Character Set) là một tập hợp các ký tự đã được mã hóa. 3 Collate là một tập các quy tắc để so sánh các ký tự trong Charset.

CREATE DATABASE db_name CHARACTER SET charset_name COLLATE collation_name

Trang 16

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web Ví dụ: Tạo CSDL Quản lý sinh viên với Charset=ascii và Collate=ascii_general_ci.

CREATE DATABASE qlsv CHARACTER SET ascii COLLATE ascii_general_ci

- Trong giao diện phpMyAdmin, kiểm tra Charset và Collate như sau:

Hình 1.26: Câu lệnh kiểm tra Charset và Collate.

- Kết quả kiểm tra Charset và Collate của CSDL:

Hình 1.27: Kết quả kiểm tra Charset và Collate.

b) Tạo bảng dữ liệu:

- Sử dụng lệnh CREATE TABLE để tạo bảng dữ liệu. Cú pháp như sau:

[constraint pk_name] primary key (col_name,...), [constraint fk_name] foreign key (col_name,...) references table_name

CREATE TABLE [IF NOT EXISTS] table_name ( /* Khai báo các trường dữ liệu */ col_name data_type [col_attribute] , (col_name,...) ) ENGINE=engine_name

- Tham số:

+ table_name: Tên bảng dữ liệu. + col_name: Tên cột (trường) dữ liệu. + data_type: Các kiểu dữ liệu thường sử dụng như: bool, int, float, double, char, varchar, text, date, enum… + col_attribute: Các thuộc tính của một cột (trường) dữ liệu:

Trang 17

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web

 NOT NULL: Không cho phép giá trị NULL.  DEFAULT: Thiết lập giá trị mặc định (tự động hiển thị trong trường dữ liệu).  AUTO_INCREMENT: Tự động tăng giá trị lên 1 đơn vị khi thêm dữ liệu.  PRIMARY KEY: Thiết lập khóa chính (cho một hay nhiều trường dữ liệu).

+ pk_name, fk_name: Tên ràng buộc khóa chính/khóa ngoại. + engine_name: Các kiểu lưu trữ dữ liệu thông dụng: InnoDB, MyISAM, MEMORY…

Ví dụ: Tạo CSDL Quản lý sinh viên như sau: sinhvien(masv, tensv, ngaysinh, gioitinh, makh) khoa(makh, tenkh) hocbong(masv, hocbonghk, xeploai) monhoc(mamh, tenmh, tinchi)

/* Tao bang sinh vien voi masv la khoa chinh */

CREATE TABLE sinhvien (

masv varchar(10) primary key, tensv varchar(40) not null, ngaysinh date, gioitinh enum('Nam', 'Nữ') default 'Nam', makh varchar(10) /* , FOREIGN KEY (makh) REFERENCES khoa(makh) */

) ENGINE=InnoDB

- Mã SQL trong giao diện phpMyAdmin như sau:

2

1

3

4

Hình 1.28: Thao tác tạo bảng dữ liệu.

Trang 18

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web /* Tao bang khoa voi makh la khoa chinh */

CREATE TABLE khoa (

makh varchar(10) primary key, tenkh varchar(30) not null

) ENGINE=InnoDB

/* Tao bang hocbong voi khoa chinh gom 2 truong la masv va hocbonghk */

CREATE TABLE hocbong (

masv varchar(10), hocbonghk varchar(3), xeploai varchar(10), constraint pk_hocbong primary key (masv, hocbonghk), constraint fk_hocbong foreign key (masv) references sinhvien(masv)

) ENGINE=InnoDB

/* Tao bang mon hoc voi mamh la khoa chinh */

CREATE TABLE monhoc (

… … …

) ENGINE=InnoDB

- Trong phpMyAdmin, chọn CSDL qlsv và chọn thẻ Designer, kết quả tạo các bảng dữ liệu và quan hệ ràng buộc như sau:

Hình 1.29: Quan hệ ràng buộc giữa các bảng dữ liệu.

Trang 19

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web 1.4.1.2. Lệnh Drop:

a) Xóa CSDL: - Sử dụng lệnh DROP DATABASE để xóa CSDL. Cú pháp như sau:

DROP DATABASE db_name

Ví dụ: Xóa CSDL Quản lý sinh viên.

DROP DATABASE qlsv

- Trường hợp máy chủ không có CSDL qlsv thì xuất hiện lỗi #1008:

Hình 1.30: Lỗi xóa CSDL.

- Muốn tránh lỗi trên thì xóa CSDL với cú pháp như sau:

DROP DATABASE IF EXISTS db_name

Ví dụ: Xóa CSDL Quản lý sinh viên.

DROP DATABASE IF EXISTS qlsv

b) Xóa bảng dữ liệu: - Sử dụng lệnh DROP TABLE để xóa bảng dữ liệu. Cú pháp như sau:

DROP TABLE [IF EXISTS] table_name

Ví dụ: Xóa bảng monhoc trong CSDL Quản lý sinh viên.

DROP TABLE IF EXISTS monhoc

- Hộp thoại thông báo xuất hiện để xác nhận xóa bảng monhoc:

Hình 1.31: Thông báo xác nhận xóa bảng .

Trang 20

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web 1.4.1.3. Lệnh Alter: a) Sửa đổi cấu trúc CSDL: - Sử dụng lệnh ALTER DATABASE để sửa đổi cấu trúc CSDL. Cú pháp như sau:

ALTER DATABASE db_name [ CHARACTER SET charset_name ] [ COLLATE collation_name ]

Ví dụ: Sửa lại Charset và Collate cho CSDL Quản lý sinh viên để có thể sử dụng tiếng Việt.

ALTER DATABASE qlsv CHARACTER SET utf8 COLLATE utf8_unicode_ci

b) Sửa đổi cấu trúc bảng dữ liệu: - Sử dụng lệnh ALTER TABLE để đổi tên bảng dữ liệu4. Cú pháp như sau:

ALTER TABLE old_table_name RENAME new_table_name

Ví dụ: Đổi tên bảng monhoc thành tbl_monhoc.

ALTER TABLE monhoc RENAME tbl_monhoc

- Sử dụng lệnh ALTER TABLE để thêm cột dữ liệu của bảng. Cú pháp như sau:

ALTER TABLE table_name ADD COLUMN col_name datatype [col_attribute] [first | after col_name]

Ví dụ: Trong bảng sinh viên, thêm cột stt ở đầu tiên và cột diachi ở cuối cùng.

ALTER TABLE sinhvien ADD COLUMN stt int not null first, ADD COLUMN diachi varchar(50)

Ví dụ: Thêm cột sdt vào sau cột makh (trước cột diachi) của bảng sinh viên.

4 Lệnh tương đương: RENAME TABLE old_table TO new_table

ALTER TABLE sinhvien ADD COLUMN sdt varchar(10) after makh

Trang 21

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web - Sử dụng lệnh ALTER TABLE để xóa cột dữ liệu của bảng. Cú pháp như sau:

ALTER TABLE table_name DROP COLUMN col_name

Ví dụ: Xóa cột stt của bảng sinhvien.

ALTER TABLE sinhvien DROP COLUMN stt

- Sử dụng lệnh ALTER TABLE để thiết lập khóa chính cho bảng. Cú pháp như sau:

ALTER TABLE table_name ADD [CONSTRAINT pk_name] PRIMARY KEY (col_name,…)

Ví dụ: Thiết lập cột mamh làm khóa chính của bảng monhoc.

ALTER TABLE monhoc ADD PRIMARY KEY (mamh)

- Sử dụng lệnh ALTER TABLE để hủy khóa chính của bảng. Cú pháp như sau:

ALTER TABLE table_name DROP PRIMARY KEY

Ví dụ: Hủy khóa chính của bảng monhoc.

ALTER TABLE monhoc DROP PRIMARY KEY

- Sử dụng lệnh ALTER TABLE để thiết lập khóa ngoại của bảng. Cú pháp như sau:

ALTER TABLE fk_table_name ADD [CONSTRAINT fk_name] FOREIGN KEY (col_name,…) REFERENCES pk_table_name (col_name,...)

Ví dụ: Thiết lập cột makh làm khóa ngoại cho bảng sinhvien.

ALTER TABLE sinhvien ADD CONSTRAINT fk_sinhvien FOREIGN KEY (makh) REFERENCES khoa (makh)

Trang 22

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web - Kết quả hiển thị trong thẻ Designer:

Hình 1.32: Quan hệ ràng buộc giữa các bảng dữ liệu.

- Sử dụng lệnh ALTER TABLE để hủy khóa ngoại của bảng. Cú pháp như sau:

ALTER TABLE table_name DROP FOREIGN KEY fk_name

Ví dụ: Hủy khóa ngoại của bảng sinhvien.

ALTER TABLE sinhvien DROP FOREIGN KEY fk_sinhvien

- MySQL cho phép người dùng xem tên khóa chính/khóa ngoại của bảng dữ liệu với câu lệnh sau:

SHOW KEYS FROM table_name [FROM db_name]

Hoặc:

SHOW KEYS FROM db_name.table_name

- Sử dụng lệnh ALTER TABLE để đổi tên cột dữ liệu của bảng. Cú pháp như sau:

ALTER TABLE table_name CHANGE [COLUMN] old_col_name new_col_name data_type

Ví dụ: Trong bảng sinhvien, đổi tên cột sdt thành sodienthoai, có kiểu varchar(15).

ALTER TABLE sinhvien CHANGE COLUMN sdt sodienthoai varchar(15)

- Sử dụng lệnh ALTER TABLE để đổi kiểu dữ liệu, thuộc tính, vị trí các cột dữ liệu của bảng. Cú pháp như sau:

ALTER TABLE table_name MODIFY [COLUMN] col_name data_type [col_attribute] [first | after col_name]

Trang 23

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web Ví dụ: Trong bảng sinhvien, đổi cột diachi có kiểu varchar(50) thành kiểu varchar(100) và mặc định giá trị là Bình Thuận.

ALTER TABLE sinhvien MODIFY COLUMN diachi varchar(100) default 'Bình Thuận'

Ví dụ: Trong bảng sinhvien, đổi cột sodienthoai lên trước cột diachi.

ALTER TABLE sinhvien MODIFY COLUMN sodienthoai varchar(15) after makh

- Sử dụng lệnh ALTER TABLE để đổi kiểu lưu trữ dữ liệu. Cú pháp như sau:

ALTER TABLE table_name ENGINE = engine_name

Ví dụ: Đổi kiểu lưu trữ của bảng monhoc từ MyISAM sang InnoDB.

ALTER TABLE monhoc ENGINE = InnoDB

- MySQL cho phép người dùng xem thông tin bảng dữ liệu với câu lệnh sau:

SHOW TABLE STATUS [ FROM db_name] [ LIKE 'table_name' | WHERE expr ]

Ví dụ: Xem thông tin ENGINE của bảng monhoc.

SHOW TABLE STATUS LIKE 'monhoc'

1.4.2. Nhóm lệnh thao tác dữ liệu:

1.4.2.1. Lệnh Select:

- Lệnh SELECT dùng để liệt kê các mẫu dữ liệu từ một hoặc nhiều bảng. Cú pháp như sau:

SELECT [ALL | DISTINCT] col_name [, col_name ...] [FROM table_name [AS] alias_name] [, table_name ...] ] [WHERE where_condition] [GROUP BY {col_name | expression} [ASC | DESC] ] [HAVING where_condition] ] [ORDER BY {col_name | expression} [ASC | DESC] ] [LIMIT [offset,] row_count]

Trang 24

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web - Tham số:

+ col_name: Tên cột (trường) dữ liệu. + table_name: Tên bảng dữ liệu. + alias_name: Tên bí danh của bảng dữ liệu. + where_condition: Điều kiện lọc dữ liệu. + expression: Biểu thức có thể là hàm, toán tử hoặc kết hợp cả hai. + offset: Vị trí dòng dữ liệu (dòng đầu tiên có vị trí là 0). + row_count: Số lượng dòng dữ liệu tối đa.

- Các ví dụ tiếp theo sẽ minh họa với CSDL Northwind như sau:

5

Hình 1.33: Quan hệ giữa các bảng trong CSDL Northwind.

Ví dụ: Cho biết tất cả thông tin của các công ty Vận chuyển.

SELECT * FROM Shippers

Ví dụ: Cho biết danh sách các thành phố là quê hương của nhân viên.

SELECT DISTINCT City FROM Employees

Ví dụ: Cho biết thông tin về họ, tên và ngày sinh của nhân viên ở London.

SELECT Firstname, Lastname, BirthDate FROM Employees WHERE City = 'London'

Trang 25

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web Ví dụ: Cho biết mỗi khách hàng đã đặt hàng bao nhiêu lần.

SELECT CustomerID, count(CustomerID) as SOLAN FROM Orders GROUP BY CustomerID

Ví dụ: Cho biết khách hàng FRANK đã đặt hàng bao nhiêu lần.

SELECT CustomerID, count(CustomerID) as SOLAN FROM Orders GROUP BY CustomerID HAVING CustomerID = 'FRANK'

Ví dụ: Cho biết tất cả thông tin khách hàng với phần tên sắp xếp tăng dần và phần họ sắp xếp giảm dần.

SELECT * FROM Employees ORDER BY Firstname asc, Lastname desc

Ví dụ: Cho biết 10 khách hàng đầu tiên có số lần đặt hàng nhiều nhất.

SELECT CustomerID, count(CustomerID) as SOLAN FROM Orders GROUP BY CustomerID ORDER BY count(customerID) desc LIMIT 0, 10

1.4.2.2. Lệnh Insert:

- Lệnh INSERT dùng để thêm dữ liệu vào các bảng của CSDL. Cú pháp như sau:

INSERT [INTO] table_name [ (col_name,...) ] VALUES ({expression | DEFAULT},...) [, (...)]

Hoặc:

INSERT [INTO] table_name [ (col_name,...) ] SET col_name = {expression | DEFAULT}

Hoặc:

INSERT [INTO] table_name [ (col_name,...) ] SELECT …

Trang 26

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web - Tham số:

+ table_name: Tên bảng dữ liệu. + col_name: Tên cột (trường) dữ liệu. + expression: Biểu thức có thể là hàm, toán tử hoặc kết hợp cả hai.

Ví dụ: Thêm vào CSDL một công ty Vận chuyển.

INSERT INTO Shippers(CompanyName, Phone) VALUES('FPT Corporation','(04)73007300')

Hoặc:

INSERT INTO Shippers SET CompanyName='FPT Corporation', Phone='(04)73007300'

Ví dụ: Thêm vào CSDL cùng lúc 3 công ty Vận chuyển.

INSERT INTO Shippers(CompanyName, Phone) VALUES('FPT Corporation','(04)73007300'), ('TRAN ANH DIGITAL WORLD

JSC','(84-4) 3766.7708'), ('Công ty Phong Vũ','(08) 6290 8777')

Ví dụ: Thêm vào CSDL tên các công ty Vận chuyển từ tên các công ty Cung cấp. Biết rằng chỉ chọn các công ty Cung cấp có mã số bé hơn 4.

INSERT INTO Shippers(CompanyName) SELECT Suppliers.CompanyName FROM Suppliers WHERE SupplierID < 4

1.4.2.3. Lệnh Delete:

- Lệnh DELETE dùng để xóa dữ liệu trong các bảng của CSDL. Cú pháp như sau:

DELETE FROM table_name [WHERE where_condition] [ORDER BY col_name [ASC | DESC] ] [LIMIT row_count]

- Tham số:

+ table_name: Tên bảng dữ liệu. + where_condition: Điều kiện lọc dữ liệu. + col_name: Tên cột (trường) dữ liệu. + row_count: Số lượng dòng dữ liệu tối đa.

Trang 27

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web Ví dụ: Xóa công ty Vận chuyển DHL Express. Biết rằng công ty có mã là 10.

DELETE FROM Shippers WHERE ShipperID = 10

Ví dụ: Xóa công ty Vận chuyển DHL Express. Biết rằng chỉ xóa 3 công ty theo thứ tự giảm dần mã số công ty.

DELETE FROM Shippers WHERE CompanyName = 'DHL Express' ORDER BY ShipperID DESC LIMIT 3

1.4.2.4. Lệnh Update:

- Lệnh UPDATE dùng để cập nhật (sửa) dữ liệu vào các bảng của CSDL. Cú pháp như sau:

UPDATE table_name SET col_name = {expression | DEFAULT} [, col_name = …] ... [WHERE where_condition] [ORDER BY col_name [ASC | DESC] ] [LIMIT row_count]

- Tham số:

+ table_name: Tên bảng dữ liệu. + col_name: Tên cột (trường) dữ liệu. + expression: Biểu thức có thể là hàm, toán tử hoặc kết hợp cả hai. + where_condition: Điều kiện lọc dữ liệu. + row_count: Số lượng dòng dữ liệu tối đa.

Ví dụ: Thay đổi tên công ty Vận chuyển từ 'FPT Corporation' thành 'FPT Express'. Biết rằng công ty 'FPT Corporation' có mã là 4.

UPDATE Shippers SET CompanyName = 'FPT Express' WHERE ShipperID = 4

Ví dụ: Thay đổi tên công ty Vận chuyển từ 'DHL Corp' thành 'DHL Express'.

UPDATE Shippers SET CompanyName = 'DHL Express' WHERE CompanyName = 'DHL Corp' ORDER BY ShipperID DESC LIMIT 3

Trang 28

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web 1.5. Một số hàm MySQL thông dụng:

1.5.1. Hàm COUNT(): - Hàm COUNT() được dùng để đếm số lượng mẫu tin có trong bảng.

Ví dụ: Cho biết số lượng nhân viên.

SELECT COUNT(*) FROM Employees

Ví dụ: Cho biết số lượng nhân viên đến từ Mỹ.

SELECT COUNT(*) FROM Employees WHERE Country = 'USA'

Ví dụ: Cho biết số lượng nhân viên đến từ các quốc gia USA, UK, Japan. Đặt tên cột cho bảng kết quả là SoLuong.

SELECT COUNT(*) As SoLuong FROM Employees WHERE Country IN ('USA', 'UK', 'Japan')

1.5.2. Hàm MAX(): - Hàm MAX() trả về giá trị lớn nhất của trường dữ liệu.

Ví dụ: Cho biết đơn đặt hàng có mức giảm giá cao nhất.

SELECT MAX(Discount) FROM Order_Details

1.5.3. Hàm MIN(): - Hàm MIN() trả về giá trị nhỏ nhất của trường dữ liệu

Ví dụ: Cho biết đơn đặt hàng có mức giảm giá nhỏ nhất.

SELECT MIN(Discount) FROM Order_Details

1.5.4. Hàm SUM(): - Hàm SUM() được dùng để tính tổng các giá trị của trường dữ liệu.

Ví dụ: Cho biết tổng số lượng hàng đã đặt.

SELECT SUM(Quantity) FROM Order_Details

Trang 29

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web 1.5.5. Hàm ROUND(): - Hàm ROUND() được dùng để làm tròn số thập phân.

SELECT ROUND(845.5463, 1)  845.5 SELECT ROUND(845.5463, 2)  845.55 SELECT ROUND(845.5463, 3)  845.546 SELECT ROUND(845.5463, 0)  846 SELECT ROUND(845.5463, -1)  850 SELECT ROUND(845.5463, -2)  800 Ví dụ:

1.5.6. Hàm LTRIM(): - Hàm LTRIM() được dùng để gỡ bỏ các khoảng trắng bên trái chuỗi.

Ví dụ:

SELECT LTRIM(' MySQL ')  'MySQL '.

1.5.7. Hàm RTRIM(): - Hàm RTRIM() được dùng để gỡ bỏ các khoảng trắng bên phải chuỗi.

Ví dụ:

SELECT RTRIM(' MySQL ')  ' MySQL'.

1.5.8. Hàm TRIM(): - Hàm TRIM() được dùng để gỡ bỏ các ký tự xác định trong chuỗi.

Ví dụ:

SELECT TRIM(' MySQL ')  'MySQL'.

1.5.9. Hàm SUBSTRING(): - Hàm SUBSTRING() được dùng để trích xuất chuỗi ký tự con trong chuỗi ký tự cha.

Ví dụ:

SELECT SUBSTRING('CSDL MySQL',6,5)  'MySQL'.

1.5.10. Hàm CHAR_LENGTH(): - Hàm CHAR_LENGTH trả về độ dài các ký tự trong chuỗi.

Ví dụ:

SELECT CHAR_LENGTH ('MySQL')  5

Trang 30

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web 1.5.11. Hàm CONCAT(): - Hàm CONCAT() được dùng để nối các chuỗi lại với nhau.

Ví dụ:

SELECT CONCAT('CSDL ', 'MySQL ', '5.1')  'CSDL MySQL 5.1'. SELECT CONCAT('btu', '.edu', '.vn') AS Domain 'btu.edu.vn'

1.5.12. Hàm REVERSE(): - Hàm REVERSE() được dùng để đảo ngược chuỗi.

Ví dụ:

SELECT REVERSE('MySQL')  'LQSyM'.

1.5.13. Hàm CURDATE(): - Hàm CURDATE() trả về giá trị là ngày hiện tại theo định dạng 'YYYY-MM-DD' hoặc 'YYYYMMDD'.

Ví dụ:

SELECT CURDATE()  '2018-04-11' SELECT CURDATE() + 0  20180411

1.5.14. Hàm DATE_FORMAT(): - Hàm DATE_FORMAT() được dùng để định dạng giá trị ngày.

Ví dụ:

SELECT DATE_FORMAT(CURDATE(),'%d-%m-%Y')  '11-04-2018' SELECT DATE_FORMAT(CURDATE(),'%W-%M-%Y')

 'Wednesday-April-2018'

1.5.15. Hàm YEAR(): - Hàm YEAR() trả về giá trị là năm.

Ví dụ:

SELECT YEAR(CURDATE())  '2018' SELECT YEAR('2016-01-19')  '2016'

Trang 31

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 1: HỆ QUẢN TRỊ CSDL MYSQL

Lập trình Web

BÀI TẬP

1/ Cho CSDL Quản lý nhân sự: nhanvien(manv, tennv, ngaysinh, gioitinh, diachi, sdt, mapb) phongban(mapb, tenpb, ngaytl) chucvu(macv, tencv)

Viết mã MySQL thực hiện các yêu cầu sau: a) Tạo CSDL qlNhanSu với Charset là utf8 và Collate là utf8_unicode_ci. b) Tạo bảng nhanvien với khóa chính là manv, bảng phongban với khóa chính là mapb, bảng chucvu với khóa chính là macv. Các bảng có ENGINE là InnoDB. c) Thiết lập khóa ngoại cho bảng nhanvien là cột mapb. d) Ở bảng nhanvien, thêm cột email vào sau cột sdt. e) Ở bảng phongban, đổi cột ngaytl thành ngaythanhlap. f) Ở bảng chucvu, thêm cột hesopc (có kiểu int). g) Thay đổi thuộc tính Default để cột tencv có giá trị mặc định 'Nhân viên'. h) Chuyển cột email lên trước cột sdt. i) Đổi kiểu dữ liệu cột hesopc từ int sang float. j) Xóa cột ngaythanhlap, Xóa bảng chucvu.

2/ Cho CSDL Quản lý học sinh: hocsinh(mahs, tenhs, ngaysinh, sdt, malop) lop(malop, tenlop) hocbong(mahs, hocbonghk, xeploai)

Viết mã MySQL thực hiện các yêu cầu sau: a) Tạo CSDL qlHocSinh với thông số mặc định. b) Thay đổi thông số của CSDL qlHocSinh với Charset là utf8 và Collate là utf8_unicode_ci. c) Tạo bảng hocsinh với khóa chính là mahs, bảng lop với khóa chính là malop, bảng hocbong. Các bảng có ENGINE là InnoDB. d) Thiết lập khóa chính cho bảng hocbong với tên pk_hocbong gồm 2 cột là mahs và hocbonghk. e) Thiết lập khóa ngoại là cột malop cho bảng hocsinh. f) Ở bảng hocsinh, thêm cột gioitinh có kiểu enum với 2 giá trị là Nam (mặc định) và Nữ. g) Chuyển cột gioitinh đứng trước cột sdt. h) Xóa khóa ngoại của bảng hocsinh. i) Xóa cột sdt. j) Xóa khóa chính của bảng hocbong và xóa CSDL.

Trang 32

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

2.1. Giới thiệu:

- PHP (Hypertext Preprocessor hay Personal Home Page) là ngôn ngữ kịch bản chạy trên máy chủ (Server Side), cho phép người dùng dễ dàng xây dựng các ứng dụng Web và tương tác tốt với các cơ sở dữ liệu: Access, MySQL, SQL Server, Oracle...

- Ngôn ngữ PHP được bắt đầu bởi thẻ .

- Cấu trúc lệnh của PHP có thể được tách thành nhiều phần và có thể nhúng vào mọi vị trí trong trang HTML (Hypertext Markup Language), nhúng dạng Scriptlet là và nhúng dạng Script là .

- PHP là ngôn ngữ có phân biệt chữ hoa chữ thường, mỗi lệnh được ngăn cách bới dấu chấm phẩy (;).

- Nối 2 chuỗi với nhau là dấu chấm (.).

- Viết mã chương trình đầu tiên Hello World:

Bước 1: Mở chương trình Notepad (hoặc phpDesigner)

Bước 2: Viết đoạn mã:

Bước 3: Lưu lại thành tập tin hello.php theo đường dẫn D:\xampp\htdocs\hello.php

Bước 4: Trong trình duyệt, gõ đường dẫn http://localhost/hello.php. Kết quả như sau:

Hình 2.1: Chương trình Hello World.

- Nếu thay đổi đoạn mã: echo '

Hello World!

' thì kết quả:

Hình 2.2: Chương trình Hello World 2.

Trang 33

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web 2.2. Kiểu dữ liệu:

- PHP có 4 kiểu dữ liệu cơ bản: Boolean, Integer, Float và String.

Bảng 2.1: Các kiểu dữ liệu thông dụng.

Kiểu dữ liệu Diễn giải

Boolean Chỉ chứa giá trị true hoặc false

Integer

Kiểu số nguyên, giá trị lớn nhất khoảng 2 tỷ (kích thước phụ thuộc nền tảng sử dụng 32bits/64bits). Hằng PHP_INT_SIZE cho biết kích thước của số nguyên và hằng PHP_INT_MAX cho biết giá trị số nguyên lớn nhất.

Float Kiểu số thực, giá trị lớn nhất khoảng 1.8E308 (kích thước phụ thuộc nền tảng sử dụng 32bits/64bits).

String

Kiểu chuỗi, chứa ký tự và số. Một số ký tự thoát thông dụng: • \n: Xuống dòng. • \r: Trở về đầu dòng. • \t: Khoảng cách tab. • \\: Dấu backslash \ • \$: Dấu dollar $ • \": Dấu nháy đôi • \': Dấu nháy đơn

- Giá trị NULL có nghĩa là không có gì cả (không phải khoảng trắng, không phải chuỗi rỗng và không phải Zero). Nếu biến chưa được gán thì có giá trị NULL (hoặc biến bị hủy bỏ giá trị khi sử dụng hàm unset).

Ví dụ:

  
  

Trang 34

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web 2.3. Biến và hằng:

2.3.1. Biến và khai báo biến:

- Trong PHP, tên biến bắt đầu bằng ký hiệu $ và tiếp theo là các chữ, số, dấu gạch dưới. Ký tự đầu tiên của tên biến phải là chữ hoặc là dấu gạch dưới, không được là số.

Ví dụ:

//Tương tự $ten="Nguyen Van Hung" //Kết quả: Nguyen Van Hung

//Kết quả: $ho Hung

- Biến cần khởi tạo trước khi sử dụng và không cần khai báo. Ví dụ:

- Trong dấu nháy đôi, biến (và ký tự thoát) được thay thế nhưng trong dấu nháy đơn thì không. Ví dụ:

Ví dụ: "; echo '$a1 co gia tri: ', gettype($a1),".
"; echo "Hom nay la $ngay.
"; ?>

Trang 35

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web

Hình 2.3: Kết quả sử dụng biến.

- Một số hàm kiểm tra kiểu dữ liệu của biến: is_bool, is_int, is_float, is_string, is_array, is_null, is_numeric, gettype, settype, isset, unset, empty…

- Phạm vi hoạt động của biến:

+ Biến cục bộ (Local Variable): Biến được khai báo trong một hàm thì được xem là biến cục bộ của hàm đó. Khi kết thúc hàm thì biến này cũng bị xóa.

+ Biến toàn cục (Global Variable): Biến được khai báo bên ngoài hàm và được sử dụng ở bất kì nơi đâu trong chương trình. Nếu muốn sử dụng biến toàn cục bên trong hàm thì khai báo với từ khóa global.

//Biến toàn cục

//Biến cục bộ

//a=1 //a=5

+ Biến tĩnh (Static Variable): Biến không mất giá trị khi ra khỏi hàm, khai báo biến với từ khóa static ở bên trong hàm.

Ví dụ: "; } Output(); echo $a; ?>

Ví dụ:

Trang 36

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

//KQ: $a = 0 //KQ: $a = 1 //KQ: $a = 2

Lập trình Web Ví dụ:

Ví dụ: "; } Increment(); Increment(); Increment(); ?>

- PHP định nghĩa sẵn một số biến toàn cục (Superglobals): $GLOBALS, $_FILES, $_SERVER, $_ENV, $_GET, $_REQUEST, $_POST, $_SESSION, $_COOKIE.

2.3.2. Hằng và khai báo hằng:

define($name,$value);

- Không như một số ngôn ngữ, hằng trong PHP được khai báo theo cú pháp:

- Tham số:

//Hiển thị giá trị hằng hw //Lỗi vì phân biệt hw và HW //Lỗi vì ko thể gán giá trị cho hằng

+ $name: Tên hằng. + $value: Giá trị hằng (các kiểu dữ liệu cho phép: int, float, string, boolean hay null).

//Phiên bản PHP của Server //HDH của Server

Ví dụ:

- Tương tự như biến, PHP cũng xây dựng sẵn các hằng dành riêng để sử dụng. Ví dụ:

Trang 37

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web 2.4. Cấu trúc điều khiển:

2.4.1. Nhóm lệnh rẽ nhánh:

2.4.1.1. Câu lệnh if:

if (expression) {

statement

}

- Dạng 1: Nếu expression=true thì thực hiện statement.

Ví dụ: $b) echo "a>b"; ?>

Ví dụ: $b) { echo "a>b
"; echo "$a>$b"; } ?>

if (expression) {

statement_1

} else {

statement_2

}

- Dạng 2: Nếu expression=true thì thực hiện statement_1, ngược lại thực hiện statement_2.

Ví dụ: $b) echo "a>b"; else echo "a<=b"; ?>

Trang 38

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

if (expression_1) {

statement_1

} elseif(expression_2) {

statement_2

}else {

statement_3

}

Lập trình Web - Dạng 3: Nếu expression_1=true thì thực hiện statement_1, ngược lại nếu expression_2=true thì thực hiện statement_2, ngược lại thực hiện statement _3.

Ví dụ: $b) echo "a>b"; elseif ($a == $b) echo "a=b"; else echo "a

- Các lệnh if có thể lồng bên trong nhau không giới hạn, khi đó thì lệnh else sẽ cùng cặp với lệnh if gần nhất.

Ví dụ:

Trang 39

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web 2.4.1.2. Câu lệnh switch:

- Mô tả: Lệnh rẽ nhánh có điều kiện, thực hiện:

+ Nếu expression bằng một trong các value thì thực hiện statement tương ứng cho đến khi gặp lệnh break;

switch (expression) {

case value_1:

statement_1 break;

case value_2:

statement_2 break;

case value_n:

statement_n break;

[default:

statement_default]

}

+ Nếu expression khác tất cả các value thì thực hiện statement_default (nếu có).

Ví dụ:

Trang 40

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web Ví dụ:

2.4.2. Nhóm lệnh lặp:

2.4.2.1. Câu lệnh for:

- Mô tả: Lệnh lặp hoạt động qua các bước sau:

+ Bước 1: Thực hiện expr1 để khởi tạo giá trị ban đầu cho biến đếm.

+ Bước 2: Thực hiện expr2 để kiểm tra điều kiện. Nếu điều kiện đúng thì thực hiện statement và sang bước 3, ngược lại thì thoát vòng lặp for.

for (expr1; expr2; expr3) {

statement

}

+ Bước 3: Thực hiện expr3 để tăng hoặc giảm biến đếm và quay lại bước 2.

Trang 41

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

//Hiển thị giá trị i

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

//Dừng vòng lặp

//Hiển thị giá trị i

Lập trình Web Ví dụ: "; echo $i; //i=11 ?>

//Nhảy đến vòng lặp kế tiếp

//Hiển thị giá trị i

- Lệnh break cho phép thoát vòng lặp dù cho vòng lặp vẫn chưa kết thúc. Ví dụ: 10) break; echo "Value: $i
"; $i++; } echo $i; ?>

- Lệnh continue cho phép nhảy đến vòng lặp kế tiếp (bỏ qua đoạn mã bên dưới nó). Ví dụ: "; } echo $i; ?>

2.4.2.2. Câu lệnh while:

- Mô tả: Lệnh lặp hoạt động qua các bước sau:

+ Bước 1: Thực hiện expression để kiểm tra điều kiện. Nếu điều kiện đúng thì sang bước 2, ngược lại thì thoát vòng lặp while.

while (expression) {

statement

}

+ Bước 2: Thực hiện statement và quay lại bước 1.

Trang 42

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

//i=11

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

//Dừng vòng lặp

Lập trình Web Ví dụ: "; $i++; } echo $i; ?>

Ví dụ: 10) break; echo "Value: $i
"; $i++; } echo $i; //i=11 ?>

2.4.2.3. Câu lệnh do while:

- Mô tả: Lệnh lặp hoạt động qua các bước sau:

+ Bước 1: Thực hiện statement và sang bước 2.

do {

statement

} while(expression);

//i=11

+ Bước 2: Thực hiện expression để kiểm tra điều kiện. Nếu điều kiện đúng thì quay lại bước 1, ngược lại thì thoát vòng lặp do while.

Ví dụ: "; $i++; } while ($i < 11); echo $i; ?>

Trang 43

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web 2.4.2.4. Câu lệnh foreach:

foreach (array_name as $value) {

statement

}

- Mô tả: Lệnh lặp thường được sử dụng với cấu trúc mảng. Ở mỗi vòng lặp, phần tử hiện tại của mảng array_name sẽ được gán cho biến $key và biến $value, thao tác được lặp lại cho đến phần tử cuối cùng của mảng.

foreach (array_name as $key => $value) {

statement

}

(length=9) (length=8) (length=10)

Hoặc:

Ví dụ: $value) echo "Key: $key; Value: $value
"; /* Key: 0; Value: Thanh Tam Key: 1; Value: Ngoc Lan Key: 2; Value: Thanh Tung */ var_dump($nhanvien); /* array (size=3) 0 => string 'Thanh Tam' 1 => string 'Ngoc Lan' 2 => string 'Thanh Tung' */ reset($nhanvien); //Chuyển con trỏ của mảng về phần tử đầu tiên while (list($key, $value) = each($nhanvien)) //Gán giá trị cho $key và $value { echo "Key: $key; Value: $value
"; } ?>

Trang 44

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web 2.5. Cấu trúc mảng:

2.5.1. Mảng một chiều:

- Mảng (Array) trong PHP gồm 2 thành phần là key và value để truy cập vào từng phần tử của mảng, key là chỉ mục và value là giá trị của phần tử.

//Hiển thị Thanh Tam //Hiển thị Ngoc Lan //Hiển thị Minh Tu

//Key=4,Value=My Linh

//Hiển thị chi tiết mảng

(length=9) (length=8) (length=10) (length=7) (length=7)

2.5.1.1. Mảng có chỉ mục là số nguyên:

//Key=1,Value=Ngoc Lan //Key=3,Value=Minh Tu

//Hiển thị chi tiết mảng

(length=10) (length=9) (length=8) (length=7)

Ví dụ: string 'Thanh Tam' 1 => string 'Ngoc Lan' 2 => string 'Thanh Tung' 3 => string 'Minh Tu' 4 => string 'My Linh' */ ?>

Ví dụ: string 'Thanh Tung' 0 => string 'Thanh Tam' 1 => string 'Ngoc Lan' 3 => string 'Minh Tu' */ ?>

Trang 45

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

//Hiển thị Ngoc Lan

//Hiển thị chi tiết mảng

(length=9) (length=8) (length=10)

//Hiển thị Thanh Tam //Hiển thị Thanh Tung

//Hiển thị chi tiết mảng

(length=9) (length=8) (length=10)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web Ví dụ: "Thanh Tam", "Ngoc Lan", "Thanh Tung"); echo $nhanvien[2]; var_dump($nhanvien); /* array (size=3) 1 => string 'Thanh Tam' 2 => string 'Ngoc Lan' 3 => string 'Thanh Tung' */ $hocvien = array("Thanh Tam", 3 => "Ngoc Lan", "Thanh Tung"); echo $hocvien[0]; echo $hocvien[4]; var_dump($hocvien); /* array (size=3) 0 => string 'Thanh Tam' 3 => string 'Ngoc Lan' 4 => string 'Thanh Tung' */?>

//Hiển thị henry //Hiển thị male

(length=5) (length=2) (length=4) (length=15)

2.5.1.2. Mảng có chỉ mục là chuỗi:

Ví dụ: 'henry', 'age' => '25', 'gender' => 'male'); echo $student['name']; echo $student['gender']; $student['email'] = 'henry@gmail.com'; var_dump($student); /* array (size=4) 'name' => string 'henry' 'age' => string '25' 'gender' => string 'male' 'email' => string 'henry@gmail.com' */?>

Trang 46

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

//Hiển thị chi tiết mảng

(length=3)

(length=4)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web - Ở các ngôn ngữ khác, các phần tử của mảng phải có cùng kiểu dữ liệu nhưng ngôn ngữ PHP cho phép các phần tử mảng có thể khác kiểu dữ liệu nhau. Ví dụ: 1, 4 => 'Four', 19, 2 => 'Two'); //Hiển thị mảng với Key=>Value print_r($data); //Array([0] => 1 [1] => 1 [2] => Two [8] => 1 [4] => Four [9] => 19) var_dump($data); /* array (size=6) 0 => int 1 1 => int 1 2 => string 'Two' 8 => int 1 4 => string 'Four' 9 => int 19 */ ?>

- PHP cung cấp một số hàm để xử lý các phần tử của mảng:

Bảng 2.2: Một số hàm xử lý phần tử của mảng.

int count(mixed $var

Hàm Diễn giải

[, int $mode=COUNT_NORMAL])

mixed reset(array &$array)

Đếm số phần tử của mảng.

mixed next(array &$array)

Chuyển con trỏ về phần tử đầu tiên.

mixed prev(array &$array)

Chuyển con trỏ về phần tử kế sau.

mixed end(array &$array)

Chuyển con trỏ về phần tử kế trước.

mixed current(array &$array)

Chuyển con trỏ về phần tử cuối cùng.

mixed key(array &$array)

Truy xuất giá trị của phần tử hiện tại.

mixed each(array &$array)

Truy xuất chỉ mục của phần tử hiện tại.

void list(mixed $var [, mixed $var...]) Gán giá trị cho các biến từ một mảng.

Truy xuất chỉ mục và giá trị của phần tử hiện tại. Hàm each() thường sử dụng với hàm list() để duyệt mảng.

Trang 47

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

//Kích thước mảng

//Chỉ mục của phần tử hiện tại //Giá trị của phần tử hiện tại

//Chuyển con trỏ sang phần tử kế sau

//Chuyển con trỏ về phần tử đầu tiên

//Chỉ mục của phần tử hiện tại //Giá trị của phần tử hiện tại

//Lặp lại cho đến hết mảng

Lập trình Web - Có nhiều cách khác nhau để duyệt mảng trong PHP.

Ví dụ: 'apple', 'fruit2' => 'orange', 'fruit3' => 'watermelon' ); //Duyet mang voi for echo "
Duyet mang voi for
"; $size = count($fruits); for ($i = 0; $i < $size; $i++) { $key = key($fruits); $value = current($fruits); echo "$key => $value
"; next($fruits); } //Duyet mang voi while echo "
Duyet mang voi while
"; reset($fruits); while (list($key, $value) = each($fruits)) { echo "$key => $value
"; } //Duyet mang voi do while echo "
Duyet mang voi do while
"; reset($fruits); do { $key = key($fruits); $value = current($fruits); echo "$key => $value
"; } while (next($fruits)); //Duyet mang voi foreach echo "
Duyet mang voi foreach
"; foreach ($fruits as $key => $value) { echo "$key => $value
"; } ?>

Trang 48

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web 2.5.2. Mảng hai chiều:

(length=9) (length=11)

- Mảng hai chiều trong PHP được xem như ma trận, mỗi phần tử của mảng là một mảng con (hoặc nếu là mảng đa chiều thì có nhiều mảng con).

Ví dụ: "; //C echo $monhoc[0][1] . "
"; //Java echo $monhoc[2][0] . "
"; //Photoshop echo $monhoc[2][1] . "
"; //VideoStudio var_dump($monhoc); /* array (size=3) 0 => array (size=2) 0 => string 'C' (length=1) 1 => string 'Java' (length=4) 1 => array (size=2) 0 => string 'HTML' (length=4) 1 => string 'PHP & MySQL' (length=11) 2 => array (size=2) 0 => string 'Photoshop' 1 => string 'VideoStudio' */ $monhoc = array( 'App' => array("C", "Java"), 'Web' => array("HTML", "PHP & MySQL"), 'Video' => array("Photoshop", "VideoStudio") ); echo $monhoc['App'][0] . "
"; //C echo $monhoc['App'][1] . "
"; //Java echo $monhoc['Video'][0] . "
"; //Photoshop echo $monhoc['Video'][1] . "
"; //VideoStudio

Trang 49

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

(length=1) (length=4)

(length=4) (length=11)

(length=9) (length=11)

//7 //9

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web var_dump($monhoc); /* array (size=3) 'App' => array (size=2) 0 => string 'C' 1 => string 'Java' 'Web' => array (size=2) 0 => string 'HTML' 1 => string 'PHP & MySQL' 'Video' => array (size=2) 0 => string 'Photoshop' 1 => string 'VideoStudio' */ $monhoc = array( 'Minh Anh' => array("C" => 7, "Java" => 6), 'Ngoc Tan' => array("HTML" => 8, "PHP & MySQL" => 5), 'Thu Thao' => array("Photoshop" => 9, "VideoStudio" => 6) ); echo $monhoc['Minh Anh']["C"] . "
"; echo $monhoc['Thu Thao']["Photoshop"] . "
"; var_dump($monhoc); /* array (size=3) 'Minh Anh' => array (size=2) 'C' => int 7 'Java' => int 6 'Ngoc Tan' => array (size=2) 'HTML' => int 8 'PHP & MySQL' => int 5 'Thu Thao' => array (size=2) 'Photoshop' => int 9 'VideoStudio' => int 6 */

Trang 50

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web //Duyệt mảng hai chiều foreach($monhoc as $k => $v) { echo "
"; foreach($v as $key => $value) echo "$k: $key => $value
"; } /* Minh Anh: C => 7 Minh Anh: Java => 6 Ngoc Tan: HTML => 8 Ngoc Tan: PHP & MySQL => 5 Thu Thao: Photoshop => 9 Thu Thao: VideoStudio => 6 */ reset($monhoc); while (list($k) = each($monhoc)) { echo "
$k:
"; while (list($key, $value) = each($monhoc["$k"])) echo " $key-$value
"; } /* Minh Anh: C-7 Java-6 Ngoc Tan: HTML-8 PHP & MySQL-5 Thu Thao: Photoshop-9 VideoStudio-6 */ //Có thể khai báo mảng hai chiều như sau: $App = array("C", "Java"); $Web = array("HTML", "PHP & MySQL"); $Video = array("Photoshop", "VideoStudio Pro"); $monhoc = array($App, $Web, $Video); ?>

Trang 51

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web 2.6. Hàm trong PHP:

2.6.1. Xây dựng hàm:

- Hàm là những đoạn mã nhỏ được thiết kế để để xử lý những công việc nào đó (tính toán độ dài đoạn đường, truy xuất dữ liệu từ cơ sở dữ liệu, kiểm tra dữ liệu đầu vào…) hoặc công việc có tính chất lặp đi lặp lại trong chương trình.

- Hàm phân chia chương trình thành các module nhỏ hơn, giúp việc tổ chức và bảo trì dễ dàng hơn.

function func_name([$para_1 [, $para_2…]]) {

/* code */ [return $value;]

}

//Toán tử điều kiện 3 ngôi

- Hàm trong PHP gồm hàm trả về giá trị và hàm không trả về giá trị (hàm chỉ thực thi lệnh), cả hai được khai báo với cú pháp:

- Trong PHP, hàm có thể được khai báo trước hoặc sau lời gọi hàm. Ví dụ:

Trang 52

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web - Nếu hàm có sử dụng tham số (Parameter) thì khi gọi hàm các đối số (Argument) truyền vào phải theo đúng thứ tự tham số của hàm lúc định nghĩa. Có thể xây dựng hàm với tham số bắt buộc hoặc tham số mặc định. Một số quy định khi xây dựng hàm với tham số mặc định:

+ Nếu hàm có nhiều tham số thì tham số mặc định phải được đặt ở sau tham số bắt buộc.

+ Tham số mặc định chỉ nhận giá trị mặc định là hằng số như chuỗi hoặc số.

+ Khi gọi hàm, nếu tham số mặc định được truyền giá trị thì giá trị mặc định sẽ được bỏ qua.

//$u tham trị; $v tham chiếu

Ví dụ: Ket qua: " . tinh2so($a, $b); echo "
Ket qua: " . tinh2so($a, $b, "-"); echo "
Ket qua: " . tinh2so($a, $b, "/"); ?>

//a = 5, b = 10

- Tương tự các ngôn ngữ khác, PHP cho phép truyền tham số cho hàm bao gồm truyền tham trị (Passing by value) và truyền tham chiếu (Passing by reference). Nếu truyền tham số cho hàm theo tham chiếu thì khai báo tham số với ký hiệu '&' đứng trước tên biến. Ví dụ: b = $b";

Trang 53

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

//Gán hàm cho biến

//Hello World! //say_hello

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web ?> - Trong PHP cho phép tạo bí danh cho hàm nếu gán tên hàm cho biến. Ví dụ: $say"; ?>

- Hàm trong PHP khá đặc biệt, cho phép định nghĩa hàm này lồng vào bên trong hàm khác. Hàm lồng bên trong sẽ không thực hiện nếu hàm bên ngoài (hàm cha) chưa được triệu gọi. Tuy nhiên, hàm bên ngoài chỉ nên gọi một lần duy nhất vì khi đó hàm lồng bên trong sẽ được định nghĩa, nếu tiếp tục gọi hàm bên ngoài thì hàm bên trong sẽ được định nghĩa lần nữa và gây ra lỗi. Ví dụ:
"; //Chỉ gọi được hàm binh_phuong() sau khi đã gọi hàm tong_binh_phuong() echo "Binh phuong cua $a: " . binh_phuong($a) . "
"; echo "Binh phuong cua $b: " . binh_phuong($b) . "
"; //Lỗi vì gọi hàm tong_binh_phuong() lần nữa sẽ định nghĩa lại hàm binh_phuong() $tbp=tong_binh_phuong($a,$b); ?>

Trang 54

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

//Tính Fibo của 10 số

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web - Hàm đệ quy (Recursive Function) là hàm mà gọi lại chính nó. PHP cho phép sử dụng hàm đệ quy để xử lý nhiều bài toán như: duyệt thư mục và tập tin, tìm kiếm trên cây nhị phân, danh sách liên kết, đường đi trên đồ thị… Ví dụ: So lan goi ham: $count"; /* Day so Fibonacci: 1 1 2 3 5 8 13 21 34 55 So lan goi ham: 276 */ ?>

2.6.2. Một số hàm xử lý cơ bản:

2.6.2.1. Hàm xử lý mảng:

Bảng 2.3: Một số hàm xử lý mảng.

array array_merge(array $array1

[, array $array2

Hàm Diễn giải

[, array $... ]])

array array_combine(array $keys, array $values)

Kết hợp các phần tử của một hoặc nhiều mảng thành một mảng.

array array_values(array $input)

Kết hợp mảng keys và mảng values thành một mảng mới.

Trả về mảng các values từ một mảng đã có chỉ mục.

Trang 55

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

array array_keys(array $input

[, mixed $search_value

Lập trình Web

[, bool $strict=false]])

bool array_key_exists(mixed $key,

array $search)

Trả về mảng các keys từ một mảng đã có chỉ mục.

bool in_array(mixed $value,

array $haystack

Kiểm tra key đã cho có tồn tại trong mảng.

[, bool $strict])

mixed array_search(mixed $value,

array $haystack

Kiểm tra value đã cho có tồn tại trong mảng.

[, bool $strict])

mixed array_shift(array &$array)

Tìm key của value tương ứng trong mảng.

int array_unshift(array &$array,

mixed $var

Xóa phần tử đầu tiên của mảng và trả về value của phần tử này.

[, mixed $... ])

mixed array_pop(array &$array)

Thêm một hay nhiều phần tử vào đầu mảng và trả về kích thước (số phần tử) của mảng mới.

int array_push(array &$array,

mixed $var

Xóa phần tử cuối cùng của mảng và trả về value của phần tử này.

[, mixed $... ])

mixed array_rand(array $input

[, int $num_req=1])

Thêm một hay nhiều phần tử vào cuối mảng và trả về kích thước (số phần tử) của mảng mới.

bool shuffle(array &$array)

Chọn ngẫu nhiên một hay nhiều phần tử trong mảng.

array array_reverse(array $array

[, bool $preserve_keys=false])

Xáo trộn ngẫu nhiên thứ tự các phần tử của mảng.

bool sort(array &$array

[, int $sort_flags=SORT_REGULAR])

Đảo ngược thứ tự các phần tử của mảng.

bool rsort(array &$array

[, int $sort_flags=SORT_REGULAR])

Sắp xếp các phần tử của mảng theo thứ tự giá trị từ nhỏ đến lớn (chỉ mục theo thứ tự ở dạng số).

bool asort(array &$array

[, int $sort_flags=SORT_REGULAR])

Sắp xếp các phần tử của mảng theo thứ tự giá trị từ lớn xuống nhỏ (chỉ mục theo thứ tự ở dạng số).

Sắp xếp các phần tử của mảng theo thứ tự giá trị từ nhỏ đến lớn (thứ tự chỉ mục cũng thay đổi theo).

Trang 56

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

bool arsort(array &$array

[, int $sort_flags=SORT_REGULAR])

Lập trình Web

bool ksort(array &$array

[, int $sort_flags=SORT_REGULAR])

Sắp xếp các phần tử của mảng theo thứ tự giá trị từ lớn xuống nhỏ (thứ tự chỉ mục cũng thay đổi theo).

bool krsort(array &$array

[, int $sort_flags=SORT_REGULAR])

Sắp xếp các phần tử của mảng theo thứ tự chỉ mục từ nhỏ đến lớn (thứ tự giá trị cũng thay đổi theo).

array array_slice(array $array,

int $offset

Sắp xếp các phần tử của mảng theo thứ tự chỉ mục từ lớn xuống nhỏ (thứ tự giá trị cũng thay đổi theo).

[, int $length

[, bool $preserve_keys=false]])

array array_splice(array &$input,

int $offset

[, int $length=0

Trích xuất một phần của mảng.

[, mixed $replacement]])

array array_unique(array $array

[, int $sort_flags=SORT_REGULAR])

Sắp xếp các phần tử của mảng theo thứ tự chỉ mục từ lớn xuống nhỏ (thứ tự giá trị cũng thay đổi theo).

array array_pad(array $input,

int $pad_size,

Xóa bỏ các giá trị trùng nhau trong mảng.

mixed $pad_value)

array array_fill(int $start_index,

int $num,

Mở rộng kích thước mảng và thêm cùng một giá trị mới.

mixed $value)

array array_fill_keys(array $keys,

mixed $value)

Điền giá trị vào mảng.

array range(mixed $low,

mixed $high

Điền giá trị vào mảng mà các giá trị của mảng chính là các chỉ mục.

[, number $step])

array array_change_key_case(

array $input

Tạo mảng gồm các giá trị từ low đến high.

[, int $case=CASE_LOWER])

array array_count_values(array $input)

Chuyển đổi các chỉ mục của mảng thành in hoa hoặc in thường.

Đếm các giá trị giống nhau trong mảng và trả về mảng mới với chỉ mục là các giá trị và giá trị chính là số đếm được.

Trang 57

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

int count(mixed $var

[, int $mode=COUNT_NORMAL])

Lập trình Web

array array_chunk(array $input,

int $size

Đếm số phần tử của mảng (hoặc thuộc tính của một đối tượng).

[, bool $preserve_keys=false])

array array_flip(array $trans)

Phân tách một mảng thành mảng đa chiều có kích thước nhỏ hơn.

array array_diff(array $array1,

array $array2

[, array $ ... ])

Chuyển đổi chỉ mục thành giá trị và giá trị thành chỉ mục của mảng.

array array_ diff_key(array $array1,

array $array2

[, array $ ... ])

So sánh giá trị và trả về các phần tử ở trong array1 nhưng không có trong các array còn lại (thứ tự chỉ mục giữ nguyên).

array array_diff_assoc(array $array1,

array $array2

[, array $... ])

So sánh chỉ mục và trả về các phần tử ở trong array1 nhưng không có trong các array còn lại (thứ tự chỉ mục giữ nguyên).

array array_intersect(array $array1,

array $array2

[, array $ ... ])

So sánh cặp chỉ mục => giá trị (key => value) và trả về các phần tử ở trong array1 nhưng không có trong các array còn lại (thứ tự chỉ mục giữ nguyên).

array array_intersect_key(

array $array1,

array $array2

So sánh giá trị và trả về các phần tử giống nhau ở trong array1 với các array còn lại (thứ tự chỉ mục giữ nguyên).

[, array $ ... ])

array array_intersect_assoc(

array $array1,

array $array2

[, array $ ... ])

So sánh chỉ mục và trả về các phần tử giống nhau ở trong array1 với các array còn lại (thứ tự chỉ mục giữ nguyên).

So sánh cặp chỉ mục => giá trị (key => value) và trả về các phần tử giống nhau ở trong array1 với các array còn lại (thứ tự chỉ mục giữ nguyên).

Trang 58

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web 2.6.2.2. Hàm xử lý chuỗi:

Bảng 2.4: Một số hàm xử lý chuỗi.

int strlen(string $str)

Hàm Diễn giải

mixed str_word_count(string $str

[, int $format=0

Tính độ dài chuỗi.

[, string $charlist]])

string strtoupper(string $str)

Đếm tổng số từ có trong chuỗi.

string strtolower(string $str)

Đổi chữ thường thành chữ in hoa.

string lcfirst(string $str)

Đổi chữ in hoa thành chữ thường.

string ucfirst(string $str)

In thường ký tự đầu tiên của chuỗi.

string ucwords(string $str)

In hoa ký tự đầu tiên của chuỗi.

int ord(string $str)

In hoa ký tự đầu tiên của mỗi từ trong chuỗi.

string chr(int $ascii )

Chuyển ký tự đầu tiên của chuỗi thành mã ASCII.

string nl2br(string $str

[, bool $is_xhtml=true])

Chuyển mã ASCII thành ký tự.

string wordwrap(string $str

[, int $width=75

[, string $break="\n"

Thay thế ký tự \r và \n trong chuỗi bởi thẻ

[, bool $cut=false]]])

string md5(string $str

[, bool $raw_output=false])

Xuống dòng chuỗi ký tự dựa vào độ dài đã cho.

string sha1(string $str

[, bool $raw_output=false])

Mã hóa chuỗi thành dãy số thập lục phân gồm 32 ký tự.

string hash(string $hash_name,

string $data

Mã hóa chuỗi thành dãy số thập lục phân gồm 40 ký tự (hoặc định dạng nhị phân 20 ký tự).

[, bool $raw_output=false])

string sprintf(string $format

[, mixed $args

Mã hóa chuỗi.

[, mixed $... ]])

Định dạng chuỗi.

Trang 59

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

string number_format(float $number

[, int $decimals])

string number_format(float $number,

int $decimals,

Lập trình Web

string $dec_point,

string $thousands_sep)

string trim(string $str

[, string $charlist])

Định dạng số (số thập phân, hàng ngàn…).

string ltrim(string $str

Xóa ký tự ở đầu và cuối chuỗi. Mặc định sẽ xóa các ký tự sau: • " " (ASCII 32 (0x20)): Ký tự khoảng trắng. • "\t" (ASCII 9 (0x09)): Ký tự Tab (ngang). • "\n" (ASCII 10 (0x0A)): Ký tự xuống dòng mới. • "\r" (ASCII 13 (0x0D)): Ký tự trở về đầu dòng. • "\0" (ASCII 0 (0x00)): Ký tự NULL. • "\x0B" (ASCII 11 (0x0B)): Ký tự Tab dọc (tăng tốc độ máy in).

[, string $charlist])

string rtrim(string $str

Xóa ký tự ở đầu chuỗi.

[, string $charlist])

array explode(string $delimiter,

string $str

Xóa ký tự ở cuối chuỗi.

[, int $limit=-1])

array split(string $pattern,

string $str

Phân tách chuỗi ban đầu thành mảng các chuỗi con.

[, int $limit])

array spliti(string $pattern,

string $str

Phân tách chuỗi ban đầu thành mảng các chuỗi con (phân biệt chữ hoa/thường).

[, int $limit])

string implode(string $glue,

array $pieces)

Phân tách chuỗi ban đầu thành mảng các chuỗi con (không phân biệt chữ hoa/thường).

string implode(array $pieces)

Kết hợp các phần tử của mảng thành chuỗi.

Trang 60

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

string substr(string $str,

int $start

Lập trình Web

[, int $length])

string strstr(string $str,

mixed $needle

Trích một phần của chuỗi.

[, bool $before_needle=false])

string stristr(string $str,

mixed $needle

[, bool $before_needle=false])

Trích một phần của chuỗi từ vị trí xuất hiện đầu tiên đến cuối chuỗi (phân biệt chữ hoa/chữ thường).

string strrchr(string $str,

mixed $needle)

Trích một phần của chuỗi từ vị trí xuất hiện đầu tiên đến cuối chuỗi (không phân biệt chữ hoa/chữ thường).

int strpos(string $str,

mixed $needle

Trích một phần của chuỗi từ vị trí xuất hiện cuối cùng đến cuối chuỗi (phân biệt chữ hoa/chữ thường).

[, int $offset=0])

int stripos(string $str,

mixed $needle

Tìm vị trí xuất hiện đầu tiên trong (không phân biệt chữ chuỗi hoa/chữ thường).

[, int $offset=0])

int strrpos(string $str,

mixed $needle

Tìm vị trí xuất hiện đầu tiên trong chuỗi (phân biệt chữ hoa/chữ thường).

[, int $offset=0])

int strripos(string $str,

mixed $needle

Tìm vị trí xuất hiện cuối cùng trong chuỗi (không phân biệt chữ hoa/chữ thường).

[, int $offset=0])

mixed str_replace(mixed $search,

mixed $replace,

Tìm vị trí xuất hiện cuối cùng trong chuỗi (phân biệt chữ hoa/chữ thường).

mixed $subject

[, int &$count])

mixed substr_replace(mixed $str,

string $replacement,

Tìm kiếm và thay thế chuỗi.

int $start

[, int $length])

Thay thế một phần của chuỗi.

Trang 61

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web 2.6.2.3. Hàm xử lý ngày/giờ:

date_default_timezone_set("Asia/Ho_Chi_Minh");

- Thiết lập time_zone ở Việt Nam ở đầu chương trình với câu lệnh sau:

$timezone = DateTimeZone::listIdentifiers(); foreach ($timezone as $item) { echo $item . "
"; }

- Ở mỗi vùng địa lý đều có time_zone khác nhau và xem danh sách time_zone như sau:

Bảng 2.5: Một số hàm xử lý ngày/giờ.

string date(string $format

[, int $timestamp])

Hàm Diễn giải

Định dạng ngày/giờ. Một số đặc tả định dạng ngày/giờ: • d: Ngày (số) 01  31. • D: Ngày (chuỗi) Mon  Sun. • j: Ngày (số) 1  31. • l: Ngày (chuỗi) Sunday  Saturday. • S: Thứ tự ngày trong tháng (st, nd, rd, th). • z: Ngày trong năm (số) 0  365. • F: Tháng (chuỗi) January  December. • m: Tháng (số) 01  12. • M: Tháng (chuỗi) Jan  Dec. • n: Tháng (số) 1  12. • t: Ngày trong tháng (số) 28  31. • Y: Năm (số) 1900  9999. • y: Năm (số) 00  99. • a: Buổi sáng/chiều am/pm. • g: Kiểu 12 giờ 1  12. • G: Kiểu 24 giờ 0  23. • h: Kiểu 12 giờ 01  12. • H: Kiểu 24 giờ 00  23. • i: Phút (số) 00  59. • s: Giây (số) 00  59. • c: Kiểu ISO 8061. Có thể thêm ký tự ”/”, ”.” hoặc ”–” để định dạng bổ sung.

Trang 62

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

int mktime([int $hour=date("H") [, int $minute=date("i")

[, int $second=date("s")

[, int $month=date("n")

Lập trình Web

[, int $day=date("j")

[, int $year=date("Y")

[, int $is_dst=-1]]]]]]])

int strtotime(string $time

Chuyển ngày/giờ ra số nguyên. Thường kết hợp với hàm date().

[, int $now])

int time(void)

Chuyển chuỗi ngày/giờ ra số nguyên.

array getdate(

[int $timestamp=time()])

Cho biết thông tin ngày/giờ hiện tại ở dạng số nguyên. Thường kết hợp với hàm date().

bool checkdate(int $month,

int $day,

Cho biết thông tin ngày/giờ hiện tại ở dạng mảng với key tương ứng: year, Mon, month, mday, weekday, hours, minutes, seconds...

int $year)

Kiểm tra tính hợp lệ của ngày/tháng/năm.

2.7. Khai báo tiền xử lý:

- Các ngôn ngữ đều cho phép module hóa chương trình và PHP cũng không ngoại lệ. Các đoạn mã (thư viện) sẽ được tách biệt so với chương trình chính và sẽ được nhúng vào (import) để sử dụng khi cần thiết.

- PHP cung cấp các lệnh để import: include, include_once và require, require_once. Các lệnh này dùng để import một tập tin A.php vào một tập tin B.php, giúp cho B.php có thể sử dụng được các thư viện trong A.php.

Bảng 2.6: Ý nghĩa các chỉ thị.

include

Chỉ thị Diễn giải

include_one

Import một tập tin php vào tập tin hiện tại. Nếu thực hiện Import hai lần cùng một tập tin php thì xuất hiện cảnh báo lỗi (chương trình vẫn hoạt động).

require

Import chỉ một lần tập tin php vào tập tin hiện tại nếu có hai lệnh import giống nhau.

require_one

Import một tập tin php vào tập tin hiện tại. Nếu thực hiện Import hai lần cùng một tập tin php thì xuất hiện thông báo lỗi (chương trình ngừng hoạt động).

Tương tự include_one.

Trang 63

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 2: NGÔN NGỮ PHP CƠ BẢN

Lập trình Web

BÀI TẬP

1/ Giải phương trình bậc 2: ax^2+bx+c = 0 2/ Tìm giá trị lớn nhất của 3 số nguyên. 3/ Hiển thị ngày trong tháng nếu biết tháng và năm. 4/ Nhập vào số năm. Kiểm tra có phải năm nhuận? (Năm nhuận là năm chia hết cho 4 hoặc 400 nhưng không phải 100). 5/ In ra bảng cửu chương 2. 6/ Tính n! 7/ Viết hàm để tính kết quả của phép (+), phép trừ (-), phép nhân (*), phép chia (/). 8/ Viết hàm kiểm tra xem một số có phải là số nguyên tố. 9/ Tìm số lớn nhất của mảng số nguyên n phần tử (n=10), các giá trị là ngẫu nhiên. 10/ Sắp xếp mảng số nguyên n phần tử (n=20) theo thứ tự tăng dần. 11/ Tính tổng các phần tử chẳn/lẻ của mảng số nguyên n phần tử (n=20). 12/ Tìm kiếm giá trị k trong mảng số nguyên n phần tử (n=20). 13/ Nhập vào một chuỗi và xuất ra dạng chữ in hoa/in thường/ký tự đầu là chữ hoa… 14/ Định dạng ngày/giờ: - Hiển thị ngày hiện tại theo định dạng: Today is Thursday, Sep. 29, 2016 Today is Thursday 29 September 2016 Today is 29.09.2016, September Today is Thu 29 Sep, 2016 Today is Sep 29, 2016 on Thursday Today is Thursday , 29th of September 2016

- Hiển thị giờ hiện tại theo định dạng:

Now is 10:30: 55 am

15/ Tính: số ngày trong tháng của một năm?; số ngày và số tuần trong năm?; một ngày là ngày thứ mấy?

Trang 64

@2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

3.1. Kết nối cơ sở dữ liệu:

3.1.1. Mở kết nối đến máy chủ MySQL:

resource mysql_connect([string $server=ini_get("mysql.default_host") [, string $username=ini_get("mysql.default_user") [, string $password=ini_get("mysql.default_password") [, bool $new_link=false [, int $client_flags=0 ]]]]]);

- Hàm mysql_connect(): Mở kết nối tới máy chủ MySQL.

- Tham số: + $server: Tên máy chủ MySQL (mặc định là 'localhost:3306'). + $username: Tên tài khoản người dùng kết nối đến máy chủ (mặc định là 'root'). + $password: Mật khẩu người dùng (mặc định là ''). + $new_link: Tạo mã định danh kết nối mới (mặc định là false). + $client_flag: Hằng số kết nối (mặc định là 0).

- Giá trị trả về: Mã định danh kết nối nếu thành công, ngược lại là false.

Ví dụ: Thực hiện kết nối đến máy chủ localhost, tài khoản root, mật khẩu rỗng

Trang 65 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web

Hình 3.1: Đoạn mã PHP kết nối đến máy chủ MySQL.

Chọn Localhost để kiểm tra kết quả

bool mysql_close([resource link_identifier])

- Nếu thay đổi đường dẫn Localhost của máy chủ ảo thì cũng cần điều chỉnh thông số trong phpDesign như sau: Tools | Preferences | Debugger | Localhost | Local server path. - Hàm mysql_close(): Đóng kết nối tới máy chủ MySQL. Hàm này không cần thiết sử dụng vì các kết nối sẽ tự động đóng khi kết thúc Script.

- Tham số $link_identifier: Mã định danh kết nối (được tạo ra bởi hàm mysql_connect()). - Giá trị trả về: Nếu đóng kết nối thành công thì kết quả là true, ngược lại là false.

Ví dụ: Thực hiện kết nối đến máy chủ localhost, tài khoản root, mật khẩu rỗng

Trang 66 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web 3.1.2. Thiết lập CSDL làm việc:

bool mysql_select_db(string $db_name [, resource $link_identifier])

- Hàm mysql_select_db(): Thiết lập CSDL có trên máy chủ.

- Tham số: + $db_name: Tên CSDL. + $link_identifier: Mã định danh kết nối (được tạo ra bởi hàm mysql_connect()).

- Giá trị trả về: Nếu thiết lập thành công thì kết quả là true, ngược lại là false.

'; //Thiet lap CSDL Northwind tren may chu $db = mysql_select_db('northwind', $link) or die ('Error: ' . mysql_error()); echo 'Thiet lap CSDL...OK'; //Truy van va Xu ly ket qua //...... //Dong ket noi mysql_close($link); ?>

Ví dụ: Thiết lập CSDL Northwind

3.2. Truy vấn và hiển thị dữ liệu:

3.2.1. Truy vấn dữ liệu:

resource mysql_query(string $query [, resource $link_identifier])

a) Hàm mysql_query(): Gửi lệnh truy vấn đến CSDL trên máy chủ.

- Tham số: + $query: Chuỗi truy vấn SQL. + $link_identifier: Mã định danh kết nối (được tạo ra bởi hàm mysql_connect()).

- Giá trị trả về: + Với câu lệnh SQL như SELECT, SHOW, DESCRIBE, EXPLAIN, nếu truy vấn thành công thì trả về tập dữ liệu (gọi là resource), ngược lại là false. Kết quả resource nên được xử lý bởi hàm mysql_fetch_array().

Trang 67 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web + Với câu lệnh SQL như INSERT, UPDATE, DELETE, DROP…, nếu truy vấn thành

công thì kết quả là true, ngược lại là false.

//Kết quả lưu trữ trong $result

'; //Thiet lap CSDL Northwind tren may chu $db = mysql_select_db('northwind', $link) or die ('Error: ' . mysql_error()); echo 'Thiet lap CSDL...OK'; //Lệnh SQL truy vấn CSDL $sql = "SELECT * FROM shippers"; $result = mysql_query($sql, $link); if (!$result) die('Invalid query: ' . mysql_error()); //Xu ly ket qua //...... //Dong ket noi mysql_close($link); ?>

Ví dụ:

int mysql_num_rows(resource $result)

b) Hàm mysql_num_rows(): Tính số dòng dữ liệu trong tập dữ liệu kết quả khi thực thi truy vấn SELECT, SHOW.

- Tham số $result: Tập dữ liệu là kết quả khi gọi hàm mysql_query(). - Giá trị trả về: Số dòng dữ liệu nếu thành công, ngược lại là false.

//Ket noi den may chu localhost, tai khoan root, mat khau rong $link=mysql_connect('localhost','root','') or die('Error: ' . mysql_error()); echo 'Ket noi den Server...OK
'; //Thiet lap CSDL Northwind tren may chu $db = mysql_select_db('northwind', $link) or die ('Error: ' . mysql_error()); echo 'Thiet lap CSDL...OK';

Ví dụ:

Trang 68 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web //Truy van SQL $sql = "SELECT * FROM shippers"; $result = mysql_query($sql, $link); //Tinh so dong du lieu tu tap du lieu ket qua $num_rows = mysql_num_rows($result); //Hien thi so dong du lieu echo "So dong du lieu: $num_rows"; //Xu ly ket qua... //Dong ket noi mysql_close($link); ?>

int mysql_num_fields(resource $result)

c) Hàm mysql_num_fields(): Tính số trường (cột) dữ liệu trong tập dữ liệu kết quả.

- Tham số $result: Tập dữ liệu là kết quả khi gọi hàm mysql_query(). - Giá trị trả về: Số trường dữ liệu nếu thành công, ngược lại là false.

//Ket noi den may chu localhost, tai khoan root, mat khau rong $link=mysql_connect('localhost','root','') or die('Error: ' . mysql_error()); echo 'Ket noi den Server...OK
'; //Thiet lap CSDL Northwind tren may chu $db = mysql_select_db('northwind', $link) or die ('Error: ' . mysql_error()); echo 'Thiet lap CSDL...OK'; //Truy van SQL $sql = "SELECT ShipperID, CompanyName FROM shippers"; $result = mysql_query($sql, $link); //Hien thi so truong du lieu echo "So truong du lieu: " . mysql_num_fields($result); //Dong ket noi mysql_close($link); ?>

Ví dụ:

Trang 69 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

int mysql_affected_rows([resource $link_identifier])

Lập trình Web d) Hàm mysql_affected_rows(): Tính số dòng dữ liệu bị tác động khi thực thi truy vấn INSERT, UPDATE, REPLACE hoặc DELETE.

- Tham số $link_identifier: Mã định danh kết nối (được tạo ra bởi hàm mysql_connect()). - Giá trị trả về: Số dòng dữ liệu bị tác động nếu thành công, ngược lại là -1.

'; //Thiet lap CSDL Northwind tren may chu $db = mysql_select_db('northwind', $link) or die ('Error: ' . mysql_error()); echo 'Thiet lap CSDL...OK'; //Truy van SQL $sql = "UPDATE Shippers SET CompanyName = 'DHL Express' WHERE ShipperID >= 3"; $result = mysql_query($sql, $link); //Hien thi so dong du lieu bi tac dong (duoc cap nhat) echo "So dong du lieu cap nhat: " . mysql_affected_rows($link); //Dong ket noi mysql_close($link); ?>

Ví dụ:

3.2.2. Hiển thị dữ liệu:

array mysql_fetch_assoc(resource $result)

a) Hàm mysql_fetch_assoc(): Lấy một dòng dữ liệu trong mảng (tập dữ liệu kết quả) có chỉ số mảng ở dạng chuỗi.

- Tham số $result: Tập dữ liệu là kết quả khi gọi hàm mysql_query(). - Giá trị trả về: Nếu thành công thì kết quả là mảng chứa một dòng dữ liệu từ tập dữ liệu kết quả với chỉ số mảng ở dạng chuỗi, ngược lại là false.

Trang 70 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

//Thoat

//Ket noi den may chu localhost, tai khoan root, mat khau rong $link=mysql_connect('localhost','root','') or die('Error: ' . mysql_error()); //Thiet lap CSDL Northwind tren may chu $db = mysql_select_db('northwind', $link) or die ('Error: ' . mysql_error()); //Truy van SQL $sql = "SELECT ShipperID, CompanyName, Phone FROM Shippers WHERE ShipperID <= 3"; $result = mysql_query($sql, $link); //Kiem tra ket qua if (mysql_num_rows($result) == 0) exit("Khong tim thay du lieu"); //Hien thi bang du lieu echo "Table: Shippers

"; echo "

"; echo ""; echo ""; echo ""; //Hien thi tung dong du lieu while ($row = mysql_fetch_assoc($result)) { echo ""; echo ""; //Chi so mang co kieu chuoi echo ""; echo ""; echo ""; } echo "
ShipperIDCompanyNamePhone
$row[ShipperID]$row[CompanyName]$row[Phone]
"; ?>

Lập trình Web Ví dụ:

Hình 3.2: Kết quả truy vấn bảng Shippers trong CSDL Northwind.

Trang 71 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

array mysql_fetch_row(resource $result)

Lập trình Web b) Hàm mysql_fetch_row(): Lấy một dòng dữ liệu trong mảng (tập dữ liệu kết quả) có chỉ số mảng ở dạng số.

- Tham số $result: Tập dữ liệu là kết quả khi gọi hàm mysql_query(). - Giá trị trả về: Nếu thành công thì kết quả là mảng chứa một dòng dữ liệu từ tập dữ liệu kết quả với chỉ số mảng ở dạng số, ngược lại là false.

//Chi so mang co kieu so

"; echo "$row[0]"; echo "$row[1]"; echo "$row[2]"; echo ""; } ... ?>

Ví dụ:

array mysql_fetch_array(resource $result

[, int $result_type=MYSQL_BOTH])

c) Hàm mysql_fetch_array(): Lấy một dòng dữ liệu trong mảng (tập dữ liệu kết quả) có chỉ số mảng ở dạng số, ở dạng chuỗi hoặc cả hai.

- Tham số: + $result: Tập dữ liệu là kết quả khi gọi hàm mysql_query(). + $result_type: Quy định kiểu mảng trả về (mặc định là MYSQL_BOTH).

 MYSQL_ASSOC: Mảng trả về với chỉ số kiểu chuỗi.  MYSQL_NUM: Mảng trả về với chỉ số kiểu số.  MYSQL_BOTH: Mảng trả về với cả chỉ số kiểu số và chỉ số kiểu chuỗi.

- Giá trị trả về: Nếu thành công thì kết quả là mảng chứa một dòng dữ liệu từ tập dữ liệu kết quả, ngược lại là false.

Trang 72 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

"; echo "$row[0]"; //Chi so mang co kieu so echo "$row[1]"; echo "$row[Phone]"; //Chi so mang co kieu chuoi echo ""; } ... ?>

Lập trình Web Ví dụ:

string mysql_result(resource $result, int $row [, mixed $field=0])

d) Hàm mysql_result(): Lấy một ô dữ liệu trong mảng (tập dữ liệu kết quả).

- Tham số: + $result: Tập dữ liệu là kết quả khi gọi hàm mysql_query(). + $row: Thứ tự dòng trong mảng (tập dữ liệu kết quả), đầu tiên là 0. + $field: Vị trí hoặc tên của trường dữ liệu trong mảng (tập dữ liệu kết quả). Nếu trường

dữ liệu được đặt tên bí danh (Alias) thì sử dụng bí danh thay cho tên trường.

- Giá trị trả về: Nếu thành công thì kết quả là nội dung của một ô dữ liệu trong mảng (tập dữ liệu kết quả), ngược lại là false.

//Thoat

Ví dụ:

Trang 73 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

//United Package

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web //Hien thi ten cong ty co ShipperID=2 echo mysql_result($result, 1, 1); //Dong ket noi mysql_close($link); ?>

bool mysql_free_result(resource $result)

e) Hàm mysql_free_result(): Giải phóng vùng nhớ lưu trữ tập dữ liệu kết quả. Hàm này không cần thiết sử dụng vì tập dữ liệu kết quả sẽ tự động xóa khi kết thúc Script.

- Tham số $result: Tập dữ liệu là kết quả khi gọi hàm mysql_query() với truy vấn SELECT, SHOW, EXPLAIN và DESCRIBE. - Giá trị trả về: Nếu giải phóng thành công thì kết quả là true, ngược lại là false.

Ví dụ:

Trang 74 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web 3.3. Thao tác dữ liệu trong PHP:

3.3.1. Liệt kê dữ liệu:

- PHP kết hợp với lệnh SELECT để hiển thị dữ liệu trên Web.

Ví dụ: Xây dựng trang viewshippers.php để hiển thị thông tin Cty Vận chuyển trong CSDL Northwind.

mysql_connect('localhost','root','')

('Error:

die

or

'

=

.

//Hiển thị kết quả dạng UNICODE

THÔNG TIN CTY VẬN CHUYỂN (Northwind.Shippers) Thoát if(!$result) die("

Lỗi truy vấn dữ liệu: " . mysql_error());

Hình 3.3: Giao diện trang viewshippers.php.

Trang 75 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web //Đóng kết nối mysql_close($link); ?>

"; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; } ?>
THÔNG TIN CTY VẬN CHUYỂN
Thêm Cty Vận chuyển
ShipperIDCompany NamePhone Chức năng
$row[ShipperID]$row[CompanyName]$row[Phone]SửaXóa

Trang 76 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web 3.3.2. Thêm dữ liệu:

- PHP kết hợp với lệnh INSERT để thêm dữ liệu trên Web.

Ví dụ: Xây dựng trang viewshippers.php để hiển thị thông tin Cty Vận chuyển trong CSDL Northwind, trang insertshipper.php để nhập vào thông tin mới của Cty Vận chuyển và trang doinsertshipper.php để thực hiện thêm thông tin mới vào CSDL.

viewshippers.php

insertshipper.php

doinsertshipper.php

Hình 3.4: Sơ đồ trang Web.

THÊM CTY VẬN CHUYỂN (Northwind.Shippers)

Hình 3.5: Giao diện trang insertshipper.php

Trang 77 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

name="phone"

type="text"

size="30"

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web

THÊM CTY VẬN CHUYỂN
ShipperID
Company Name
Phone

Trang 78 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web

=

or

die

('Error:

mysql_connect('localhost','root','')

'

.

THÊM CTY VẬN CHUYỂN (Northwind.Shippers) - Insert
THỰC HIỆN THÊM CTY VẬN CHUYỂN

...Thành công: " . mysql_affected_rows($link); else echo "

...Lỗi thêm dữ liệu: " . mysql_error(); ?>

Xem thông tin Cty Vận chuyển

Hình 3.6: Giao diện trang doinsertshipper.php

Trang 79 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web 3.3.3. Lệnh xóa dữ liệu:

- PHP kết hợp với lệnh DELETE để xóa dữ liệu trên Web.

Ví dụ: Xây dựng trang viewshippers.php để hiển thị thông tin Cty Vận chuyển trong CSDL Northwind, trang dodeleteshipper.php để xóa Cty Vận chuyển.

viewshippers.php

insertshipper.php

dodeleteshipper.php

doinsertshipper.php

Hình 3.7: Sơ đồ trang Web.

Hình 3.8: Giao diện trang dodeleteshipper.php

XÓA CTY VẬN CHUYỂN (Northwind.Shippers)
XÓA CTY VẬN CHUYỂN

Trang 80 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

.

=

'

or

die

('Error:

mysql_connect('localhost','root','')

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web
...Thành công: " . mysql_affected_rows($link); else echo "

...Lỗi xóa dữ liệu: " . mysql_error(); ?>

Xem thông tin Cty Vận chuyển

3.3.4. Lệnh sửa dữ liệu:

- PHP kết hợp với lệnh UPDATE để cập nhật dữ liệu trên Web.

Ví dụ: Xây dựng trang viewshippers.php để hiển thị thông tin Cty Vận chuyển trong CSDL Northwind, trang updateshipper.php để nhập thông tin mới của Cty Vận chuyển và trang doupdateshipper.php để thực hiện cập nhật thông tin mới của Cty Vận chuyển vào CSDL.

updateshipper.php

insertshipper.php

viewshippers.php

dodeleteshipper.php

doupdateshipper.php doinsertshipper.php

Hình 3.9: Sơ đồ trang Web.

Trang 81 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web

=

'

or

die

('Error:

mysql_connect('localhost','root','')

.

//Hiển thị kết quả dạng UNICODE

CẬP NHẬT THÔNG TIN CTY VẬN CHUYỂN (Northwind.Shippers) Thoát if(!$result) die("...Lỗi truy vấn dữ liệu: " . mysql_error()); $row = mysql_fetch_assoc($result); //Đóng kết nối mysql_close($link); ?>

Hình 3.10: Giao diện trang updateshipper.php

Trang 82 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web


CẬP NHẬT THÔNG TIN CTY VẬN CHUYỂN

ShipperID
Company Name
Phone

Trang 83 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web

('Error:

or

die

'')

'root',

mysql_connect('localhost',

CẬP NHẬT THÔNG TIN CTY VẬN CHUYỂN (Northwind.Shippers)
THỰC HIỆN CẬP NHẬT THÔNG TIN CTY VẬN CHUYỂN
...Thành công: " . mysql_affected_rows($link); else echo "

...Lỗi cập nhật dữ liệu: " . mysql_error(); //Đóng kết nối mysql_close($link); ?>

Xem thông tin Cty Vận chuyển

Hình 3.11: Giao diện trang doupdateshipper.php

Trang 84 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web 3.4. Phương thức Get và Post trong PHP:

3.4.1. Phương thức Get:

- Khi làm việc với trình duyệt Web, người dùng đóng vai trò là Client và gửi yêu cầu (đăng nhập, đăng bình luận, tìm kiếm…) tới Server, phía Server sẽ tiến hành phân tích, xử lý và trả kết quả cho Client. Có hai phương thức truyền dữ liệu từ Client đến Server là phương thức Get và phương thức Post. - Phương thức GET là phương thức gửi dữ liệu thông qua đường dẫn URL, những thông tin đằng sau dấu hỏi (?) chính là phần dữ liệu mà Client gửi tới Server.

Ví dụ: Trên trình duyệt, nhập đường dẫn localhost/showstudent.php?id=TH050

 Dữ liệu Client gửi tới Server: id=TH050.

- Nếu gửi nhiều dữ liệu thì sử dụng dấu & để phân cách các giá trị.

Ví dụ: localhost/showstudent.php?id=TH050&uname=tuan.tq&year=1996

 Dữ liệu Client gửi tới Server: id=TH050; uname=tuan.tq; year=1996.

- Dữ liệu được gửi từ Client tới Server bằng phương thức GET đều được lưu trong biến toàn cục $_GET, đây là mảng gồm 2 thành phần là key và value với key là chỉ mục và value là giá trị của phần tử. Cách truy xuất giá trị của $_GET tương tự như truy xuất giá trị của mảng một chiều.

"; //ID=TH050 echo "User: $user
"; //User=tuan.tq echo "Year: $year
"; //Year=1996 ?>

Ví dụ: Lấy dữ liệu từ URL localhost/student.php?id=TH050&user=tuan.tq&year=1996

Trang 85 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web

Hình 3.12: Hiển thị dữ liệu truyền trên đường dẫn.

Phương thức Get

Họ tên:

Ví dụ: Lấy dữ liệu từ Form theo phương thức Get.

uname

sbm

Hình 3.13: Hiển thị dữ liệu truyền qua Form theo phương thức Get.

Trang 86 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

//Năm sinh gồm 4 số

Phương thức Get

Năm sinh:
$current_year) echo 'Năm sinh lớn hơn năm hiện tại'; else echo 'Số tuổi: ' . ($current_year - $year); } ?>

Lập trình Web Ví dụ: Nhập vào năm sinh và hiển thị độ tuổi hiện tại.

sbm year

Hình 3.14: Tính toán dữ liệu Client gửi tới Server qua phương thức Get.

- Các dữ liệu được gửi đi theo phương thức GET đều thể hiện tường minh trên URL nên dữ liệu dễ bị nhận biết và độ an toàn không cao. Chỉ nên dùng phương thức Get khi dữ liệu không cần bảo mật.

Trang 87 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web 3.4.2. Phương thức Post:

- Tương tự phương thức GET, phương thức Post cũng thực hiện truyền dữ liệu từ Client tới Server nhưng dữ liệu không truyền trên URL mà truyền ẩn thông qua form nên khó nhận dạng giá trị và có độ bảo mật cao. - Dữ liệu được gửi từ Client tới Server bằng phương thức POST đều được lưu trong biến toàn cục $_POST. Cách truy xuất giá trị của $_POST tương tự như truy xuất giá trị của mảng một chiều.

Phương thức Post

Username:
password:
"; echo "Password: $_POST[pwd]
"; } ?>

Ví dụ: Hiển thị thông tin tài khoản, mật khẩu đã nhập.

user

sbm psw

Hình 3.15: Hiển thị dữ liệu truyền qua Form theo phương thức Post.

Trang 88 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web

BÀI TẬP

1. Cho CSDL dblogin như sau:

- Xây dựng trang đăng nhập login.php để nhập thông tin username, password.

- Xây dựng trang dologin.php để hiển thị kết quả.

Trang 89 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web 2. Xây dựng trang Web quản lý khách hàng: - Tạo CSDL có bảng dữ liệu như sau:

a) Thiết kế trang viewcustomer.php để hiển thị các thông tin của khách hàng và có các chức năng: thêm, sửa, xóa khách hàng.

b) Thiết kế trang insertcustomer.php để nhập thông tin khách hàng và trang doinsertcustomer.php để thực hiện thêm khách hàng vào CSDL.

Trang 90 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web c) Thiết kế trang updatecustomer.php để nhập thông tin mới của khách hàng và trang doupdatecustomer.php để thực hiện cập nhập thông tin mới vào CSDL.

d) Thiết kế trang dodeletecustomer.php để xóa khách hàng.

3. Xây dựng trang Web quản lý sách: - Tạo CSDL có mô hình quan hệ như sau:

a) Thiết kế trang index.html để liên kết với các trang xemsach.php, xemtacgia.php, xemchitietsach.php.

Trang 91 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)

CHƯƠNG 3: LẬP TRÌNH PHP & MYSQL

Lập trình Web

b) Thiết kế trang xemsach.php, xemtacgia.php để hiển thị các thông tin của sách, tác giả và có các chức năng thêm, xóa, sửa.

c) Thiết kế trang themsach.php, themtacgia.php để thêm sách, tác giả.

d) Thiết kế trang suasach.php, suatacgia.php để sửa thông tin sách, tác giả.

e) Thiết kế trang dodeletesach.php, dodeletetacgia.php để xóa sách, tác giả.

f) Thiết kế trang xemchitietsach.php để hiển thị chi tiết sách và tác giả.

g) Xây dựng thêm bảng nhaxb(manxb, tennxb) vào CSDL. Bổ sung thêm trường manxb vào bảng chitietsach và cũng là khóa ngoại của bảng này.

h) Thiết kế lại trang xemchitietsach.php để hiển thị chi tiết sách.

Trang 92 @2019 Đoàn Phan Thái (dpthai@btu.edu.vn)