Nội dung học phần Phần 01: Các hàm thường dùng trong PHP Ôn lại kiến thức Phần 02: Lập trình hướng đối tượng trong PHP Phần 03: Xây dựng ứng dụng PHP theo mô hình 3-Tiers Phần 04: Một s
Trang 1CÔNG NGHỆ WEB VÀ ỨNG DỤNG
Giảng viên phụ trách:
Nguyễn Hoàng Tùng
Bộ môn Tin học Email: nhoangtung@agu.edu.vn
Trang 2Thông tin chung
Tên môn học: Công nghệ Web và Ứng dụng
Trang 3Điều kiện cần để học môn này
Trang 4Mô tả vắn tắt nội dung học phần
Học phần cung cấp các kiến thức về lập trình web với PHP từ
cơ bản đến nâng cao Phần cuối cùng hướng dẫn sinh viên xây dựng một ứng dụng web động bằng PHP
Trang 5Nội dung học phần
Phần 01: Các hàm thường dùng trong PHP (Ôn lại kiến thức)
Phần 02: Lập trình hướng đối tượng trong PHP
Phần 03: Xây dựng ứng dụng PHP theo mô hình 3-Tiers
Phần 04: Một số thành phần bổ trợ trong Web
Phần 05: Giới thiệu ASP.NET MVC 4 (Phần mở rộng)
Trang 6Tiêu chuẩn đánh giá sinh viên
Dự lớp: Đầy đủ theo quy chế (điểm danh đột xuất)
Đánh giá:
Tiểu luận ASP.NET MVC (30% - Có báo cáo nhóm)
Đồ án môn học theo nhóm (70% - Có báo cáo nhóm)
Đánh giá theo thang điểm 10 sau đó quy về thang 4
Trang 7Tài liệu học tập
Slide bài giảng,
Phạm Hữu Khang, Hoàng Đức Hải, Xây Dựng Ứng Dụng Web Bằng PHP Và MySQL, NXB Phương Đông,
Steven Holzner, Thiết Kế Web Động Với PHP 5 (Tái Bản Lần 3), Gia Việt biên dịch, NXB Thống Kê,
Trang web: www.w3schools.com/php/default.asp
Trang 8Thông tin giảng viên
Nguyễn Hoàng Tùng
Bộ môn Tin học – Khoa KTCNMT – ĐH An Giang
DĐ: 0975.058.876
Email: nhoangtung@agu.edu.vn, hoangtung@inbox.com
Trang web: http://hoangtungag.tk
Địa điểm làm việc: Phòng ND210, Khu trung tâm
Trang 9Giải đáp thắc mắc về môn học
Trang 10CÁC HÀM PHP THƯỜNG DÙNG
Giảng viên phụ trách:
Nguyễn Hoàng Tùng
Bộ môn Tin học Email: nhoangtung@agu.edu.vn
Trang 11Nội dung chính của slide này
Trang 12Chuỗi ký tự
Khai báo biến:
$str = " chuỗi ký tự ";
Các hàm về kiểu chuỗi ký tự: (chỉ nêu tên)
ltrim(), rtrim(), trim(): Xóa khoảng trắng bên trái, phải, cả 2
nl2br(): Định dạng HTML, biến ký tự “ \n ” thành “ <br /> ”
addslashes(): Biến một chuỗi có thể lưu trữ trong CSDL
substr(): Tách một chuỗi con từ một chuỗi
strpos(): Xác định vị trí xuất hiện của chuỗi trong một chuỗi
str_replace(): Thay thế chuỗi
explode(): Tách chuỗi thành các chuỗi con
implode(): Ngược lại với hàm explode(), dùng để ghép chuỗi
Trang 14Nội dung chính của slide này
Trang 15Các hàm bảo mật trong chuỗi
string addslashes(string $str)
string stripslashes(string $str)
string htmlspecialchars (string $str [, int $quote_style [, string $charset ]])
string md5(string $str [, bool $raw_output])
string sha1(string $str [, bool $raw_output])
Trang 16Các hàm bảo mật trong chuỗi
string addslashes(string $str)
Thêm ký tự backslash ( \) phía trước các ký tự ‘ " \ NUL
trong chuỗi $str Thường dùng trong các câu lệnh SQL để tránh xảy ra lỗi khi lưu và lấy dữ liệu từ CSDL
Các hàm tương tự:
string quotemeta (string $str )
string addcslashes (string $str , string $charlist )
Trang 17Các hàm bảo mật trong chuỗi
Trang 18Các hàm bảo mật trong chuỗi
string htmlspecialchars(string $str [, int $quote_style [, string $charset ]])
Chuyển đổi các ký tự đặc biệt & ' " < > trong chuỗi $str
thành các thực thể HTML (Convert special characters to HTML entities)
Khi đó:
& &
" " // khi không có ENT_NOQUOTES
' ' // khi có ENT_QUOTES
< <
> >
Ngược lại: htmlspecialchars_decode
Trang 19Các hàm bảo mật trong chuỗi
string md5(string $str [, bool $raw_output])
MD5: Message Digest 5 là một hàm băm mật mã được sử
dụng phổ biến với giá trị băm dài 128 bit
Thường dùng để mã hóa mật khẩu, kiểm tra tính toàn vẹn của tập tin,…
Trang 20Các hàm bảo mật trong chuỗi
string sha1(string $str [, bool $raw_output])
Thuật toán SHA-1 (Secure Hash Algorithm 1) tạo ra chuỗi
mã băm có chiều dài cố định 160 bit từ chuỗi bit dữ liệu đầu
vào $str có chiều dài tùy ý
Được sử dụng phổ biến và có công dụng như MD5, ngoài ra SHA-1 còn được sử dụng rất nhiều trong thương mại điện
Trang 21Nội dung chính của slide này
Trang 22Các hàm về thời gian
string date(string $format [, int $timestamp])
array getdate([int $timestamp])
bool checkdate(int $month, int $day, int $year)
int time(void)
Trang 23Các hàm về thời gian
string date(string $format [, int $timestamp])
Trả về thời gian hiện tại theo định dạng $format
$today = date("h-i-s, j-m-y"); //01-48-26, 10-01-11
$today = date("D M j G:i:s Y"); //Mon Jan 10 1:48:26 2011
$today = date("H:i:s"); //01:48:26
?>
Trang 24Các hàm về thời gian
array getdate([int $timestamp])
Trả về một array thông tin về thời gian hiện tại
Array(
[seconds] => 41 [minutes] => 2 [hours] => 2 [mday] => 10 [wday] => 1 [mon] => 1 [year] => 2011 [yday] => 9 [weekday] => Monday [month] => January [0] => 1294599761 )
<? $now = getdate(); echo $now['year'] //Output: 2011 ?>
Trang 25Các hàm về thời gian
bool checkdate(int $month, int $day, int $year)
Kiểm tra ngày, tháng, năm đưa vào có hợp lệ hay không?
Giới hạn của tham số:
Tháng ( $month ) từ 1 đến 12,
Ngày ( $day ) từ 1 đến 31, phụ thuộc theo tháng,
Năm ( $year ) từ 1 đến 32767
<?php
var_dump(checkdate( 2 , 29 , 2011 )); //False
var_dump(checkdate( 4 , 18 , 1986 )); //True
?>
Trang 27Nội dung chính của slide này
Trang 29Mảng
Sử dụng:
Truy xuất 1 phần tử trong mảng: $arr [ $key ]
$key có ý nghĩa rộng hơn index, dùng tham chiếu đến 1 phần tử của mảng
Ví dụ: Tạo mảng gồm 10 phần tử là các số nguyên lấy ngẫu
nhiên trong [0,100] Khởi tạo $key là 0
Xóa 1 phần tử trong mảng: unset($arr[$key])
Trang 30Mảng
Các hàm về mảng:
foreach(): truy xuất các phần tử của mảng
foreach($arr as $key => $value)
Trang 31Mảng
Các hàm về mảng:
each(): truy xuất các phần tử của mảng
while($item = each($arr))
{
echo $item['key'].", ";
echo $item['value']."<br />";
}
Hàm each() trả về phần tử kế tiếp của mảng Từ khóa key
và value trong trường hợp này phải giữ nguyên.
Trang 32Mảng
Các hàm về mảng:
list(): truy xuất các phần tử của mảng
while( list($k,$v) = each($arr))
{
echo $k.", ";
echo $v."<br />";
}
Hàm list($k,$v) tách cặp giá trị (key,value) của phần tử
có “chỉ số” là $key ra hai biến $k và $v tương ứng
Trang 33Mảng
Các hàm về mảng:
count(), sizeof(): Trả về kích thước của mảng
current(), end(): Trả về phần tử hiện tại, cuối cùng của mảng
prev(), next(): Trả về phần tử liền trước, kế kiếp
sort(): Sắp xếp mảng theo value của phần tử
ksort(): Sắp xếp mảng theo key của phần tử
is_array(): Kiểm tra 1 biến có phải là mảng (trả về 1và 0)
Trang 34
Mảng
Mảng động:
Ví dụ: Cho mảng gồm 10 số tự nhiên, tạo một mảng con chứa
những số lẻ của mảng này, in ra mảng con này
Trang 35Nội dung chính của slide này
Trang 36Upload file lên server
Form upload:
Lưu ý:
Luôn sử dụng phương thức POST
Luôn sử dụng enctype="multipart/form-data" trong thẻ FORM
<form action="upload.php" method="post"
enctype="multipart/form-data">
File upload:
<input type=" file " name=" myfile " />
<input type=" submit " value=" Upload " />
</form>
Trang 37Upload file lên server
Trang 38Upload file lên server
Xử lý:
<?php
$dir = "data/"; //Upload vào thư mục data
if($_FILES['myfile']['name'] != "") {
$fileupload = $dir $_FILES['myfile']['name'];
if(move_uploaded_file($_FILES['myfile']['tmp_name'],
$fileupload )) {
echo "Upload file thành công!";
} else{
echo "Upload file không thành công!";
} }
else{
echo "Vui lòng chọn file để upload!";
}
?>
Trang 39Upload file lên server
Upload nhiều file:
<form action="upload.php" method="post"
enctype="multipart/form-data">
Files upload: <br />
File 1: <input type=" file " name=" myfile[] " /><br />
File 2: <input type=" file " name=" myfile[] " /><br />
File 3: <input type=" file " name=" myfile[] " /><br />
<input type=" submit " value=" Upload " />
</form>
Trang 40Upload file lên server
Xử lý upload nhiều file:
<?php
foreach($_FILES['myfile']['error'] as $key => $error) {
if($error == 0) {
$tmp_name = $_FILES['myfile']['tmp_name'][$key];
$name = $_FILES['myfile']['name'][$key];
move_uploaded_file($tmp_name, "data/$name");
} }
?>
Trang 41Giải đáp thắc mắc
Trang 42LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
TRONG PHP
Giảng viên phụ trách:
Nguyễn Hoàng Tùng
Bộ môn Tin học Email: nhoangtung@agu.edu.vn
Trang 43Nội dung chính của phần này
Giới thiệu
Khai báo một lớp
Thuộc tính, phương thức
Truy cập các thành phần của lớp bằng $this
Giải quyết vấn đề không cho phép overloading trong PHP
Trang 44Giới thiệu
OOP chỉ có trong phiên bản từ PHP 5.x về sau
Đặc điểm OOP trong PHP 5.x: Không cho phép đa kế thừa!
Trang 45Khai báo một lớp
Khai báo lớp:
class tên_lớp
{
//khai báo thuộc tính
//khai báo phương thức
//sử dụng private hay public và protected để xác định phạm vi
}
Với PHP5.x, tất cả các thành viên của một lớp đều phải được khai báo tính rõ ràng với các từ khoá tương ứng là public,
protected và private
Trang 46Khai báo một lớp
Không khai báo lớp:
Trong nhiều file,
Trong nhiều khối lệnh,
Bắt đầu bằng (đối với tên lớp và tên phương thức)
Sử dụng:
Tạo biến đối tượng:
• $tên_object = new tên_class([giá trị khởi tạo]);
• $sv = new SinhVien("Nguyen Hoang Tung");
Sử dụng thuộc tính, phương thức:
• $tên_object->tên_thuộc_tính;
• $tên_object->tên_phương_thức([tham số]);
Trang 47$sv = new SinhVien("DTH051187", "Hoang Tung");
echo "Mã số SV: ".$sv->mSSV.", Họ tên: ".$sv->hoTen;
?>
Nên khởi gán giá trị ban đầu
Trang 48Sai!
Đúng!
Trang 49?>
Trang 50Hàm tạo (Contructor)
Có 2 loại hàm tạo:
Hàm tạo thông thường: Tên hàm giống tên lớp
Hàm tạo tự động thực thi: construct()
Khi cài đặt, chỉ sử dụng một trong 2 loại hàm tạo trên
Trang 51Hàm hủy (Destructor)
destruct()
Thường được dùng để dọn dẹp, đóng kết nối tới CSDL
Trang 52Đối tượng static
Lưu ý, không áp dụng static đối với hàm tạo
?>
Trang 53Đối tượng static
Lưu ý, không cần sử dụng new để khai báo đối tượng
<?php
{
{
echo "MSSV: " self::$mSSV;
echo "Họ tên: " self::$hoTen;
} }
SinhVien::HienThi();
?>
Trang 54Kế thừa
Dùng từ khóa extends để thể hiện kế thừa:
class SinhVienTH extends SinhVien {}
<?php
parent::SinhVien($mS, $hTen);
$this->soTinChi = $sTC;
}
parent::HienThi($mS, $hTen);
echo "Số tín chỉ: " $this->soTinChi;
} }
?>
Trang 55Hàm autoload
Hàm autoload() không phải là thành phần của lớp
Khi thực thi nó sẽ trả về tên lớp được khai báo ngay sau nó
Sử dụng rất tốt trong việc tối ưu hóa dòng lệnh
Trang 56Giải đáp thắc mắc
Trang 58Nội dung chính của slide này
Mô hình 3-Tiers
Xây dựng ứng dụng mẫu theo 3-Tiers
Trang 59Mô hình 3-Tiers
Tại sao lại sử dụng 3-Tiers?
Mô hình 3-Tiers là gì?
Trang 60Tại sao lại sử dụng 3-Tiers?
Muốn hiểu tại sao người ta chia một phần mềm có lưu trữ
dữ liệu thành 3 lớp (3-Tiers), thì phải nhìn từ lịch sử lập
trình, nghĩa là tại sao người ta cần chia một phần mềm ra thành nhiều phần khác nhau? Rồi những phần đó tại sao lại
được xếp nhóm vào 3 lớp chính là Presentation, Business
Logics và Data?
Từ đây trở đi, thuật ngữ phần mềm có nghĩa là phần mềm có lưu trữ dữ liệu
Trang 61Tại sao lại sử dụng 3-Tiers?
Sau nhiều năm phát triển, kinh nghiệm cho người ta thấy chia phần mềm thành 3-Tiers sẽ có tác dụng tốt nhất cho:
Phát triển phần mềm: Có tính chuyên nghiệp hóa, có thể chia
cho nhiều nhóm được đào tạo nhiều kỹ năng khác nhau, từ thiết kế mỹ thuật cho đến lập trình đến tổ chức Database
Bảo trì: Với các lớp được phân chia theo như đã nói, thì các
thành phần của một hệ thống dễ được thay đổi, nhưng sự thay đổi có thể được cô lập trong từng lớp, hoặc chỉ ảnh hưởng đến lớp ngay gần kề của nó, chứ không phát tán náo loạn trong cả chương trình
Mở rộng: Việc thêm chức năng vào cho từng lớp sẽ dễ dàng
hơn là phân chia theo cách khác
Trang 62Mô hình 3-Tiers là gì?
“3-Tiers là một kiến trúc kiểu client/server mà trong đó giao
diện người dùng (UserInterface), các quy tắc xử lý nghiệp vụ
kế.” (dịch từ Wikipedia)
Trang 63Mô hình 3-Tiers là gì?
Như vậy, mô hình này phân tách ứng dụng ra làm 3 module riêng biệt, bao gồm:
Lớp Presentation: Để giao tiếp với người dùng, nhiệm vụ
chính là hiển thị dữ liệu và nhận dữ liệu từ người dùng
Lớp Business Logic: Xử lý dữ liệu, cung cấp các chức năng
của phần mềm
Lớp Data: Lưu trữ dữ liệu, cho phép lớp Business Logic có thể
tìm kiếm, trích xuất, cập nhật,… dữ liệu
Trang 64Mô hình 3-Tiers là gì?
Trang 65Xây dựng ứng dụng mẫu theo 3-Tiers
Các trang khác ngoài index.php
Code mẫu theo mô hình 3-Tiers
Trang 66Lớp DataService
Chứa thông tin kết nối đến CSDL:
server : Sever chứa CSDL muốn kết nối đến
username : Tên đăng nhập CSDL
password : Mật khẩu đăng nhập
database : Tên cơ sở dữ liệu cần kết nối
Chứa các hàm xử lý trực tiếp với CSDL:
Hàm kết nối
Hàm thực thi truy vấn
Hàm xử lý dữ liệu trước khi thực thi truy vấn
Lớp này được thực thi trên Server
Trang 67Lớp DataService
Trang 68Lớp Data
Chứa các hàm truy vấn đến CSDL
Lấy dữ liệu (SELECT) Dùng ExecuteQuery()
Thêm mới, Cập nhật, Xóa Dùng ExecuteNonQuery()
Các hàm trong lớp này gọi hàm trực tiếp từ lớp DataService
để thực thi truy vấn
Lớp này được thực thi trên Server
Trang 69Lớp Data
Tên lớp
Một số hàm thực thi
truy vấn
Trang 71Lớp Business
Danh sách các thuộc tính (Properties)
Trang 72Lớp Presentation
Trong thiết kế web, lớp này còn được gọi là Front-end (theo cách hiểu đơn giản), tức là phần giao diện mà người dùng nhìn thấy, thao tác được
Phần này chứa các giao diện hiển thị nội dung, các form nhập liệu, hộp thoại giao tiếp với người dùng
Lớp này được thực thi phía Client
Trang 73Lớp Presentation
Trang 74Trang index.php
Hàm autoload($class_name) dùng để lấy
tên lớp đang thực thi thông qua toán tử new
Kỹ thuật dùng include thông qua file do.php
Trang 75Trang index.php
Kỹ thuật dùng include thông qua file do.php
Trang 76Các trang khác ngoài index.php
Hàm autoload() bên
trang index.php sẽ “bắt”
được tên lớp là sachbs
Đảm bảo rằng mọi trang khác phải được
truy xuất thông qua trang index.php
Trang 77Code mẫu theo mô hình 3-Tiers
Demo bài tập quản lý sách trực tuyến
Source code mẫu tham khảo tại trang web:
http://www.mediafire.com/?uddl71c31o889
Tài liệu môn học:
http://www.mediafire.com/?0cfkrezobdzu6
Trang 78Giải đáp thắc mắc
Trang 79MỘT SỐ CHỨC NĂNG BỔ TRỢ
Giảng viên phụ trách:
Nguyễn Hoàng Tùng
Bộ môn Tin học Email: nhoangtung@agu.edu.vn
Trang 80Nội dung chính của slide này
Tạo mã xác nhận (Captcha)
Bình chọn (Vote)
Kỹ thuật phân trang (Paging)
Giỏ hàng (Shopping cart)
Trang 81Tạo mã xác nhận (Captcha)
CAPTCHA: Completely Automated Public Turing test to tell
Computers and Humans Apart (Phép thử Turing để phân biệt giữa người và máy)
Như cái tên CAPTCHA đã cho ta biết, nó là một phép thử để xác định xác suất đối tượng được thử là con người, cho phép quản trị viên các trang web phân biệt đâu là người đâu
là máy
Trang 82• Hầu hết mọi người có thể vượt qua
• Các chương trình máy tính hiện tại không thể vượt qua
Demo
Trang 83Bình chọn (Vote)
Giới thiệu
Demo