Bài giảng Phát triển ứng dụng web - PHP Advances

Tóm tắt Bài giảng Phát triển ứng dụng web - PHP Advances: ...e", "", time() -3600); 3.3 Ví dụ Cookie cookie setcookie $_COOKIE[fieldName] Client Lưu username & password Webserver 3.4 Session là gì? 28 User 1 User 2 User 3 Session: user 1 Session: user 2 Session: user 3 3.4 Session là gì?  Là thông tin về client được server lưu trên máy của s...- 3 letter day (Mon - Sun) l - full name of day (Monday - Sunday) N - 1=Monday, 2=Tuesday, etc (1-7) S - suffix for date (st, nd, rd) w - 0=Sunday, 1=Monday (0-6) z - day of the year (1=365) WEEK W - week of the year (1-52) MONTH F - Full name of month (January - December) m - 2 digi..._get("include_path")); ini_set("include_path", "/inc"); // Works in all PHP versions var_dump(ini_get("include_path")); ini_restore("include_path"); var_dump(ini_get("include_path")); ?> 49 5. Xử lý tập tin & thư mục (tt) file_exist(), is_file(), is_dir(), is_readable(), is_writeable(),...

pdf69 trang | Chia sẻ: havih72 | Lượt xem: 300 | Lượt tải: 0download
Nội dung tài liệu Bài giảng Phát triển ứng dụng web - PHP Advances, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
1PHP Advances
Luong Tran Hy Hien, FIT of HCMUP
Nội dung
1. Hướng đối tượng
2. Truyền nhận dữ liệu (POST/GET)
3. Cookies, Sessions
4. Xử lý ngày tháng
5. Xử lý tập tin & thư mục
6. Upload tập tin lên Server
7. Hình ảnh
8. E-mail, Secure E-mail
9. Xử lý lỗi
2
1. Hướng đối tượng
• Khai báo lớp
• Hàm tạo
• Phạm vi
• Kế thừa
• Hàm serialize,unserialize
3
1. Hướng đối tượng (tt)
• Khai báo
• Hàm tạo
4
51. Hướng đối tượng (tt)
• Khai báo lớp
class tên_lớp
{
các thuộc tính và phương thức
}
• Tạo và hủy một đối tượng
$tên_biến = new tên_lớp();
Đối tượng sẽ tự động bị hủy khi không còn tham chiếu 
nào đến nó
$tên_biến = NULL;
1. Hướng đối tượng (tt)
• Các từ khóa khai báo:
– public: có thể sử dụng bên ngoài lớp
– private: chỉ sử dụng cục bộ bên trong lớp
– protected: sử dụng được bởi các lớp kế thừa
• Một số quy tắc chung:
– Không thể khai báo hai method trùng tên
– Method phải được khai báo ngay bên trong khai 
báo lớp
– Dùng biến giả $this để truy xuất các member và 
method trong lớp
– Dùng toán tử -> để truy xuất đến member và 
method
6
1. Hướng đối tượng (tt)
• Khai báo constructor và destructor
public function __construct(danh sách tham số)
{
khởi tạo giá trị các member
}
constructor được tự động thực hiện khi đối tượng được tạo
public function __destruct()
{
dọn dẹp
}
destructor được tự động thực hiện khi đối tượng bị hủy
7
7
81. Hướng đối tượng (tt)
1. Hướng đối tượng (tt)
• Khai báo
const TÊN_HẰNG = giá trị;
• Truy xuất
tên_lớp::TÊN_HẰNG // ngoài lớp
seft::TÊN_HẰNG // trong lớp
9
1. Hướng đối tượng (tt)
• Khai báo
 static $thuộc_tính
• Truy xuất
tên_lớp::$thuộc_tính// ngoài lớp
seft::$thuộc_tính // trong lớp
10
1. Hướng đối tượng (tt)
• Khai báo
–  static function phương_thức() 
• Truy xuất
– tên_lớp::phương_thức() // ngoài lớp
– seft:: phương_thức() // trong lớp
11
1. Hướng đối tượng (tt)
• Khai báo lớp con
class lớp_con extends lớp_cha
{
các thuộc tính và phương thức
}
Tất cả các member và method được khai báo 
public hay protected trong lớp cha được thừa kế 
và có thể sử dụng trong lớp con
12
Phương thức nạp chồng
• Gọi một method lớp cha
parent::phương_thức()
Bằng cách định nghĩa lại một phương thức đã có ở lớp
cha, tất cả các lời gọi đến phương thức này mà không
chỉ định rõ như trên sẽ được hiểu là gọi phương thức có
cùng tên của lớp con
13
Sự đa hình
• Khai báo lớp trừu tượng
abstract class lớp_trừu_tượng
{
// các thuộc tính
abstract public function 
phương_thức_trừu_tượng();
// các phương thức khác
}
Không thể tạo đối tượng trực tiếp từ lớp trừu tượng
Lớp con bắt buộc phải định nghĩa các phương thức trừu 
tượng của lớp cha
14
Ngăn kế thừa và nạp chồng
• Lớp không thể kế thừa
final class không_thể_kế_thừa {  }
• Phương thức không thể nạp chồng
final public function không_thể_nạp_chồng() {  } 
15
interface
• Khai báo Interface
interface giao_diện
{
public function phương_thức();
}
• Khai báo lớp theo mẫu Interface
abstract class tên_lớp implements giao_diện
{
} 
Các lớp sử dụng Interface hay kế thừa từ một lớp sử dụng Interface
bắt buộc phải định nghĩa tất cả các phương thức trong Interface đó
16
17
1. Hướng đối tượng (tt)
18
1. Hướng đối tượng (tt)
1. Hàm serialize() dùng để lưu trữ đối tượng, hàm trả về một chuỗi các byte để lưu 
thông tin của đối tượng
2. Hàm unserialize() dùng để khôi phục đối tượng được lưu giữ bởi hàm serialize()
<?php
class AClass {
var $a;
function AClass() {
}
};
$ob1 = new AClass();
$ob1->a = 10;
$ob1->b = 100;
$ob1->c = “Nguyen Ngoc Thuy Hang";
$luu = serialize($ob1);
echo "$luu ";
$ob2 = unserialize($luu);
var_dump($ob2);
?>
2. Truyền nhận dữ liệu (POST/GET)
2.1 Cơ chế truyền nhận dữ liệu
2.2 Các cách truyền nhận dữ liệu
19
Cơ chế truyền nhận dữ liệu
2
Internet 
or Intranet
www.example.com
Webserver
7Yêu cầu trang b.php
Cơ chế truyền nhận dữ liệu
?
7www.example.com
Webserver
Cơ chế truyền nhận dữ liệu
2
Internet 
or Intranet
Yêu cầu trang xlDangnhap.php
Textbox : txtDangnhap
Password Box: txtDangnhap
txtDangnhap = admin
txtDangnhap = phpAdmin
2. Truyền nhận dữ liệu (POST/GET)
• Trang web nhập dữ liệu
– Cách 1: truyền dữ liệu trực tiếp qua url
• Sử dụng liên kết để sửa lại url
• Thông qua đối tượng location
– Cách 2: truyền dữ liệu thông qua form
• Sử dụng đối tượng 
• Nhập liệu thông qua các formfield
• Thực hiện việc truyền dữ liệu thông qua submit
• Hai phương thức gởi dữ liệu GET / POST
• Trang web nhận dữ liệu (dùng các biến toàn cục)
– Cách 1: $_GET[“biến”]
– Cách 2: $_POST[“biến”]
– Cách 3: $_REQUEST[“biến”] 23
3. Cookies, Sessions
3.1 Cookies là gì?
3.2 Sử dụng cookies
3.3 Ví dụ Cookies
3.4 Session là gì?
3.5 Sử dụng session
3.6 Ví dụ session
24
3.1 Cookies là gì?
 Là những mẫu tin được server lưu xuống máy 
của client
 Mỗi lần client gửi request 1 trang web, đồng thời 
sẽ gửi kèm file cookie đã lưu lần trước lên server.
 Việc xử lý thông tin (lưu, lấy) trong cookie do 
server thực hiện.
 Thường được sử dụng để lưu thông tin cá nhân 
của client.
25
Webserver
cookie
setcookie
$_COOKIE
Client
3.2 Sử dụng cookies
• Lệnh ghi cookie
setcookie(name, value, expire, path, domain);
setrawcookie(name, value, expire, path, domain);
• name : Tên cookie
• value : Giá trị cookie
• expire : Thời điểm mà cookie hết hiệu lực
• path : Đường dẫn trên server mà cookie có hiệu 
lực
• domain : Xác định tên miền mà cookie được gởi đi
• Bắt buộc phải xuất hiện trước thẻ 
• Lấy giá trị cookie
echo $_COOKIE[“cookieName"];
• Xóa cookie
setcookie(“cookieName", "", time() -3600);
3.3 Ví dụ Cookie
cookie
setcookie
$_COOKIE[fieldName]
Client
Lưu username & password
Webserver
3.4 Session là gì?
28
User 1
User 2
User 3
Session: user 1
Session: user 2
Session: user 3
3.4 Session là gì?
 Là thông tin về client được server lưu trên máy của server
 Sử dụng session lưu định danh duy nhất cho từng client
 Mục đích lưu biến dữ liệu dùng chung cho nhiều trang 
trong 1 phiên làm việc của client
Webserver
Cookie: PHPSESSID
session_start
$_SESSION[sessionVar]
Client
3.5 Sử dụng session
• Khởi động Session
session_start();
• Ghi & Đọc giá trị Session
$_SESSION[“sessionVar”] = $value ;
$_SESSION[“sessionVar”] = array();
$_SESSION[“sessionVar”][] = $value;
if (isset($_SESSION[“sessionVar"])
echo $_SESSION[“sessionVar"];
• Hủy Biến trong Session
unset($_SESSION[“sessionVar”]);
• Hủy cả Session
session_destroy(); 30
3.6 Ví dụ : Đếm số lần duyệt trang 
web
<?php
session_start( );
if (isset($_SESSION["count"]))
$_SESSION["count"] = $_SESSION["count"] + 1;
else
$_SESSION["count"] = 1;
print “You've looked at this page ” . 
$_SESSION['count'] . “times.”;
?>
3.6 VD2: Ứng dụng cho Login
• Làm thế nào để ngăn không cho người dùng 
truy cập vào các trang web nếu chưa đăng 
nhập?
• Ý tưởng:
• Dùng các biến Session để lưu trạng thái đăng nhập 
của người dùng:
$_SESSION[“IsLogin”] = true/false : Lưu 
trạng thái đăng nhập
$_SESSION[“Username”] : Lưu Tên đăng nhập
$_SESSION[“Authentication”] : Lưu Loại 
quyền đăng nhập
Ứng dụng cho Login – Gồm 4 bước
1. Tạo trang login.html yêu cầu người dùng đăng nhập.
2. Tạo trang validateuser.php xử lí thông tin đăng nhập 
từ trang login.htm
– Kết nối với CSDL, kiểm tra thông tin đăng nhập có hợp lệ hay 
không ? 
• Nếu không hợp lệ thì cho redirect về trang login.html. 
• Nếu hợp lệ thì dùng một biến trong Session để lưu trạng thái login 
thành công 
– Ví dụ: $_SESSION[“IsLogin”] = true. 
– Lưu ý: Phải đặt giá trị mặc định cho biến Session này là 
false khi khởi tạo một Session.
3. Tạo trang logout.php là trang xử lý khi người dùng 
logout
 Reset trạng thái login là chưa đăng nhập 
($_SESSION[“IsLogin”] = false).
Session - Ứng dụng cho Login
4. Trong tất cả các trang muốn bảo mật, thêm 
đoạn mã sau để kiểm tra người dùng đã 
đăng nhập hay chưa, nếu chưa thì redirect lại 
trang login.html
<?php 
session_start();
if (!isset($_SESSION[“IsLogin”]) ||
$_SESSION[“IsLogin”] == false)
header(“Location: login.htm”);
?>
Giỏ hàng (shopping cart)
Session : Array : Mathang [ ]
Session : Array : Soluong[ ]
{‘Book1’, ‘Book2’, ‘Book3’}
{13, 2, 7}
Xóa biến trong Session
Ghi xuống CSDL
Session – Cookie – Database 
Internet 
or Intranet
Web Server
Database Server
Client 3
Client 2
Client 1
Cookie3
Cookie2
Cookie1
Session 2 Session 3
Session 1
Thông tin chia sẽ Vị trí 
lưu trữ
Thời gian 
tồn tại
Số client Số trang web 
sử dụng
Database/File Server Dài Nhiều Nhiều
Session Server Ngắn 1 Nhiều
Cookies Client Dài 1 Nhiều
Break
38
4. Xử lý ngày tháng
39
4. Xử lý ngày tháng
<?php
// Assuming today is: March 10th, 2001, 5:16:18 pm
$today = date("F j, Y, g:i a"); // March 10, 2001, 5:16 pm
$today = date("m.d.y"); // 03.10.01
$today = date("j, n, Y"); // 10, 3, 2001
$today = date("Ymd"); // 20010310
$today = date('h-i-s, j-m-y, it is w Day z ');
// 05-16-17, 10-03-01, 1631 1618 6 Fripm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.'); // It is the 10th day.
$today = date("D M j G:i:s T Y"); // Sat Mar 10 15:16:08 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h'); // 17:03:17 m is month
$today = date("H:i:s"); // 17:16:17
?>
DAYS 
d - day of the month 2 digits (01-31) 
j - day of the month (1-31) 
D - 3 letter day (Mon - Sun) 
l - full name of day (Monday - Sunday) 
N - 1=Monday, 2=Tuesday, etc (1-7) 
S - suffix for date (st, nd, rd) 
w - 0=Sunday, 1=Monday (0-6) 
z - day of the year (1=365) 
WEEK
W - week of the year (1-52)
MONTH
F - Full name of month (January - December)
m - 2 digit month number (01-12) 
n - month number (1-12) 
M - 3 letter month (Jan - Dec) 
t - Days in the month (28-31) 
YEAR
L - leap year (0 no, 1 yes)
o - ISO-8601 year number (Ex. 1979, 2006)
Date and time formats
40
TIME
a - am or pm
A - AM or PM
B - Swatch Internet time (000 - 999)
g - 12 hour (1-12)
G - 24 hour c (0-23)
h - 2 digit 12 hour (01-12)
H - 2 digit 24 hour (00-23)
i - 2 digit minutes (00-59)
s - 2 digit seconds (00-59)
OTHER
e - timezone (Ex: GMT, CST)
I - daylight savings (1=yes, 0=no)
O - offset GMT (Ex: 0200)
Z - offset in seconds (-43200 - 43200)
r - full RFC 2822 formatted date 
<?php
echo date (‘g:i:s A’);
?>
11:19:26 PM 
Date and time formats
41
5. Xử lý tập tin & thư mục
1. Sử dụng include()
2. Sử dụng include_once()
3. Sử dụng include_path cho các dự án lớn
4. Kiểm tra file
5. Đọc, ghi file
6. Làm việc với thư mục
42
5. Xử lý tập tin & thư mục (tt)
• include():
– sử dụng để chia sẻ các hàm dùng chung, các đoạn
mã chung trong một project có nhiều file.
– khác cú pháp #include của ngôn ngữ C, lệnh này
không chèn mã lệnh vào file mà thực thi file php
giống như cú pháp gọi hàm.
– thông báo warning nếu không tìm thấy file nhưng
không dừng chương trình.
• require() - tương tự include(), lệnh này có sự
khác biệt là sẽ dừng ngay chương trình khi
không tìm thấy file.
43
44
5. Xử lý tập tin & thư mục (tt)
//vars.php
<?php
$color = 'green';
$fruit = 'apple';
?>
//test.php
<?php
echo "A $color $fruit";
// A
include 'vars.php';
echo "A $color $fruit";
// A green apple
?>
<?php
return 4 + 4;
?>
------------------------------------
<?php
echo "This is from file 2";
$retVal = include("file1.php");
echo “Value file 1: $retVal";
echo "This is from file 2\n";
?>
Vì include() thực hiện lời gọi đến file php, 
do đó bạn có thể trả về giá trị
từ file PHP được include
5. Xử lý tập tin & thư mục (tt)
• Có thể đặt lệnh include bên trong 1 cấu trúc điều
kiện hoặc cấu trúc lặp,
• Tùy theo điều kiện của cấu trúc mà include() có
được thực hiện hay không, 1 hay nhiều lần,
• Việc này giúp hỗ trợ cho việc thiết kế kiến trúc
trang web tốt hơn.
45
5. Xử lý tập tin & thư mục (tt)
• include_once() giống như include(), tuy nhiên có
điểm khác biệt là chỉ include 1 lần, lần sau nếu gặp
lại file này thì ko include nữa
• include_once() phân biệt chữ hoa, chữ thường
<?php
include_once("a.php");
// this will include a.php
include_once("A.php");
// this will include a.php again on Windows!
?>
Vì phân biệt chữ hoa/thường nên 
include_one chèn thêm lần thứ hai
47
5. Xử lý tập tin & thư mục (tt)
• include file theo đường dẫn tuyệt đối:
Cách này dở vì khi cài đặt trên máy khác sẽ
không tìm thấy file được include
• include file theo đường dẫn tương đối:
Cách này tốt hơn, nhưng mỗi khi đổi vị trí
của file được include thì phải sửa lại tại tất
cả các file thực hiện lời gọi include
• Cách tốt nhất là sử dụng include_path
(thiết lập trong file PHP.INI) đối với những
file thư viện dùng chung được sử dụng
nhiều (giống như đối với ngôn ngữ C)
5. Xử lý tập tin & thư mục (tt)
48
 thay đổi include_path trong PHP.INI
 dùng lệnh set_include_path()
<?php
var_dump(get_include_path());
set_include_path('/inc'); // Works as of PHP 4.3.0
var_dump(get_include_path());
restore_include_path();
var_dump(get_include_path());
?>
 dùng lệnh ini_set()
<?php
var_dump(ini_get("include_path"));
ini_set("include_path", "/inc"); // Works in all PHP versions
var_dump(ini_get("include_path"));
ini_restore("include_path");
var_dump(ini_get("include_path"));
?>
49
5. Xử lý tập tin & thư mục (tt)
file_exist(), is_file(), is_dir(), is_readable(), 
is_writeable(), is_executable(), filesize(), fileatime()
<?php
function outputFileTestInfo( $file ) {
if ( ! file_exists( $file ) ) {
print "$file does not exist";
return;
}
print "$file is ".(is_file( $file )?"":"not ")."a file\n";
print "$file is ".(is_dir( $file )?"":"not ")."a directory\n";
print "$file is ".(is_readable( $file )?"":"not ")."readable\n";
print "$file is ".(is_writable( $file )?"":"not ")."writable\n";
print "$file is ".( filesize($file))." bytes\n";
print "$file was accessed on ".date( "D d M Y g:i A",
fileatime($file ))."";
print "$file was modified on ".date( "D d M Y g:i A",
filemtime( $file))."";
print "$file was changed on".date( "D d M Y g:i A",
filectime($file))."";
}
outputFileTestInfo("c:\\windows\\system32\\cmd.exe");
?>
5. Xử lý tập tin & thư mục (tt)
fopen($filename, $mode);
fwrite($handle, $string);
fread($handle, $length);
fgets($handle);
sprintf($format);
fscanf($handle, $format);
fseek($handle, $offset);
fclose($handle);
file_get_contents($filename); 50
51
5. Xử lý tập tin & thư mục (tt)
<?php
$var1 = 10;
$var2 = "This is a String";
$var3 = true;
$f = fopen("test.txt", "wt");
fwrite($f, "$var1 $var2
$var3\n");
fwrite($f,
"$var1\n$var2\n$var3\n");
fclose($f);
echo "Read line by 
line......\n";
$f = fopen("test.txt", "rt");
while (!feof($f)) {
$line = fgets($f);
echo "$line";
}
fclose($f);
echo "Read all file by 
fread......\n";
$f = fopen("test.txt", "rb");
$myfile = fread($f,
filesize("test.txt"));
echo $myfile;
fclose($f);
echo "Read all file......\n";
$myfile =
file_get_contents("test.txt");
echo($myfile);
?>
52
5. Xử lý tập tin & thư mục (tt)
<?php
$var1=10;
$var2=100;
$var3=100.3434;
$var4="Test string";
$f=fopen("test.txt", "wt");
fwrite($f, sprintf("%d %10.3f %10.3lf\n\r", $var1, $var2,
$var3));
fwrite($f, sprintf("%s", $var4));
fclose($f);
$f=fopen("test.txt", "rt");
if (list($v1, $v2, $v3, $v4) = fscanf($f, "%d %f 
%lf\n\r%s")) {
var_dump($v1);
var_dump($v2);
var_dump($v3);
var_dump($v4);
}
$v4 = fgets($f);
var_dump($v4);
fclose($f);
?>
53
5. Xử lý tập tin & thư mục (tt)
<?php
class AClass {
};
$ob1 =& new AClass();
$ob1->a = 10;
$ob1->b = 100.023;
$ob1->c = "Test String";
var_dump($ob1);
$f = fopen("test.txt", "wb");
fwrite($f, serialize($ob1));
fclose($f);
$f = fopen("test.txt", "rb");
$ob2 = unserialize(fgets($f));
fclose($f);
var_dump($ob2);
?>
54
5. Xử lý tập tin & thư mục (tt)
• mkdir(), rmdir() 
• opendir(), readdir(), closedir()
<?php
$dir=opendir("c:\\windows");
while ($file=readdir($dir)) {
echo "$file\n";
}
closedir($dir);
?>
6. Upload tập tin lên server
• Gửi các file lên server (upload) là một chức năng
không thể thiếu đối với các ứng dụng Web-
based.
• Để form có thể upload file, ta phải xác định
thuộc tính enctype của form có giá trị
"multipart/form-data”.
• Với PHP, bạn có thể xác định kích thước lớn nhất
của file upload bằng cách đặt thêm 1 hidden
field có tên MAX_FILE_SIZE trước control file.
55
6. Upload tập tin lên server
Webserver
Internet 
or Intranet
Yêu cầu trang upload.php
Disk
driver
file
Upload.php
• $_FILES[“file”]["name"]
• $_FILES[“file”]["type"]
• $_FILES[“file”]["size"]
• $_FILES[“file”]["tmp_name"]
• $_FILES["file”]["error"]
57
6. Upload tập tin lên server
Element Contains Example
$ FILES['taptin']['name'] Name of uploaded file test.gif
$_FILES['taptin']['tmp_name'] Path to temporary file /tmp/phprDfZvN
$_FILES['taptin']['size'] Size (in bytes) of uploaded file 6835
$_FILES['taptin']['error'] An error code corresponding 
to a PHP constant
UPLOAD_ERR_FO
RM_SIZE
$_FILES['taptin']['type'] MIME type of uploaded file 
(where given by client)
image/gif
Mảng $_FILE
58
Constant Name Value Explanation
UPLOAD_ERR_OK 0 No problem
UPLOAD_ERR_INI_SIZE 1 File size exceeds php.ini limit set in 
upload_max_filesize
UPLOAD_ERR_FORM_SIZE 2 File size exceeds limit set in hidden 
element named MAX_FILE_SIZE
UPLOAD_ERR_PARTIAL 3 File only partially uploaded
UPLOAD_ERR_NO_FILE 4 File was not uploaded
6. Upload tập tin lên server
Mã lỗi
59
6. Upload tập tin lên server
60
6. Upload tập tin lên server
Kiểm tra lỗi, định dạng, kích 
thước File upload
• Lưu ý :
– $_FILES[“”][“type”] 
• “image/gif” 
• “image/jpeg”  Firefox nhận đây là file 
jpeg
• “image/pjpeg”  IE nhận đây là file jpeg
– $_FILES[“”][“size”] : Kích thước file tính theo 
byte
– $_FILES[“”][“error”] : Mã lỗi khi upload File
• = 0 : Không có lỗi
• > 0 : Có lỗi
62
7. Hình ảnh
Vẽ ảnh từ văn bản
8. E-mail, Secure E-mail
• Sử dụng thư viện open source: PHP Mailer
• Chép 3 file: class.phpmailer.php, 
class.smtp.php, phpmailer.lang-en.php vào 
thư mục web của site
63
Gởi email sử dụng Mail Server của GMail
9. Xử lý lỗi
• Sử dụng trycatch
try
{
// do something that can go wrong
}
catch (Exception $e)
{
throw new Exception( 'Something really gone wrong', 0, $e);
}
65
Toán tử điều khiển lỗi
• Toán tử điều khiển lỗi (@) dùng để đặt trước 
các hàm,biểu thức. Khi đó tất cả các thông báo 
lỗi trong hàm, biểu thức đó bị bỏ qua.
• Ví dụ:
<?php
$b = @file(“a ag a”) or die(“Khong the mo file”);
?>
66
Tham khảo
• Website W3school
• Slide lập trình Web, ĐH KHTN, 2007
67
Q & A
THE END

File đính kèm:

  • pdfbai_giang_phat_trien_ung_dung_web_php_advances.pdf