Biến Variable Chứa dữ liệu Tên b iến được bắt đầu bởi dấu $ Tên biến bắt đầu bằng một ký tự chữ cái hoặc _ Phân biệt giữa ký tự thường và HOA Kiểu được xác định tại thời điểm gá
Trang 2Nội dung
Giới thiệu PHP Cài đặt và cấu hình Web server
Trang 3Web tĩnh vs Web động
Static website vs Dynamic website
Trang 4 Hỗ trợ làm việc với nhiều hệ QTCSDL
khác nhau MySQL, MSSQL, Oracle, DB2, Sybase, Firebird, PostgreSQL ,…
Trang 5 Là ngôn ngữ phát triển ứng dụng web phổ biến nhất thế giới hiện nay
Trang 6Giới thiệu PHP
Lịch sử phát triển:
Được tạo ra bởi Rasmus Lerdorf năm 1994 dưới dạng kịch bản Perl/CGI
Được đặt tên là “Personal Home Page Tool”
Sau đó được viết lại bằng ngôn ngữ C, hỗ trợ
truy xuất cơ sở dữ liệu
Phiên bản đầu tiên được công bố năm 1997 với tên gọi PHP/FI 2.0 (Personal Home Pape / Forms Interpreter”)
Phiên bản 3.0 được Andi và Zeev cải tiến có khả năng mở rộng mạnh mẽ, hỗ trợ OOP
Trang 7Giới thiệu PHP
Lịch sử phát triển:
Chính thức được đổi tên thành PHP từ v3.0
Năm 1999 phiên bản thử nghiệm v4.0 được công
bố cho các nhà phát triển
Phần lõi được thiết kế lại hoàn toàn mới có tên Zend engine nhằm cải tiến tốc độ xử lý, cải tiến các mô- đun
Chính thức được phát hành năm 2000, hỗ trợ
khả năng truy xuất nhiều hệ QTCSDL, xử lý
mạnh mẽ, bổ sung hàng loạt các tính năng mới
và những cải tiến so với phiên bản cũ
Trang 8Giới thiệu MySQL
Là một hệ quản trị Cơ sở dữ liệu quan hệ
Được phát triển bởi Michael Widenius
Được dùng cho các ứng dụng vừa và nhỏ, phổ biến là ứng dụng web
Hỗ trợ chuẩn SQL
Chạy trên nhiều platforms
Trang 9 Cài hệ quản trị CSDL được hỗ trợ (MySQL,…)
• Xem thêm: http://php.net/manual/en/pdo.drivers.php
Cài PHP
Hoặc cài đặt các gói tích hợp (Apache + PHP +
Trang 10Cài đặt và cấu hình
Kiểm tra cấu hình webserver
Mở trình duyệt gõ localhost
Trang 11Cài đặt và cấu hình
Tạo thư mục ảo
Mặc định khi gõ localhost trên trình duyệt, web server (apache) sẽ trỏ vào thư mục htdocs trong
thư mục cài đặt trên máy cục bộ
• Ví dụ: localhost D:\xampp\htdocs
localhost/ mywebsite D:\xampp\htdocs\ mywebsite
Chỉnh sửa lại thư mục mặc định:
• Mở tập tin httpd.conf trong thư mục cài đặt apache
• Chỉnh sửa dòng DocumentRoot chỉ đến thư mục trênmáy cục bộ
• Ví dụ: "D:/xampp/htdocs/mywebsite"
Trang 12Công cụ phát triển ứng dụng Web
Trang 13C l i c k t o e d i t c o m p a n y s l o g a n
Trang 17Biến (Variable)
Chứa dữ liệu
Tên b iến được bắt đầu bởi dấu $
Tên biến bắt đầu bằng một ký tự chữ cái hoặc _
Phân biệt giữa ký tự thường và HOA
Kiểu được xác định tại thời điểm gán giá trị
Gán giá trị với dấu =
Sử dụng & như tham chiếu
Trang 18Biến (Variable)
Khai báo biến
Trang 19Biến (Variable)
Khai báo biến
Trang 20Biến (Variable)
Các biến có sẵn trong PHP
$GLOBALS: tất cả các biến trong phạm vi toàn cục của một script
$_SERVER: tập hợp biến môi trường của Web server
$_GET, $_POST: biến chứa các giá trị client gởi đến
$_COOKIE: Đọc các giá trị cookie đã được ghi
$_FILES : Chứa toàn bộ thông tin về tập tin upload
$_REQUEST: chứa toàn bộ giá trị của $_GET,
$_POST, $_COOKIE
Trang 21Biến (Variable)
Phạm vi biến
Sử dụng từ khóa global hoặc biến $GLOBALS để truy cập biến toàn cục
Trang 22Biến (Variable)
Phạm vi biến
Sử dụng từ khóa global hoặc biến $GLOBALS để truy cập biến toàn cục
Trang 23Biến (Variable)
Phạm vi biến
Sử dụng từ khóa global hoặc biến $GLOBALS để truy cập biến toàn cục
Trang 24Biến (Variable)
Phạm vi biến
Biến tĩnh: sử dụng từ khóa Static
Trang 25Biến (Variable)
Phạm vi biến
Biến tĩnh: sử dụng từ khóa Static
Trang 26Biến (Variable)
Các hàm xử lý trên các biến
gettype(): kiểm tra kiểu dữ liệu của biến
• kiểu kiểm tra: “integer”, “double”, “string”,”array”,
“object”, “class”, “unknown type”
Trang 27Biến (Variable)
Các hàm xử lý trên các biến
isset(): kiểm tra biến đã được gán giá trị chưa
unset(): hủy bỏ biến đã khai báo trước đó
Trang 28Biến (Variable)
Các hàm xử lý trên các biến
empty(): trả về true nếu biến chưa gán giá trị, bằng 0 hoặc chuỗi rỗng (empty string)
Trang 29Kiểu dữ liệu (Data types)
Kiểu dữ liệu cơ bản
Số nguyên : Integer 4 bytes, số có dấu
Trang 30Kiểu dữ liệu (Data types)
Kiểu Boolean
Chứa giá trị True/False
• False = 0
• True != 0
Trang 31Kiểu dữ liệu (Data types)
Kiểu số nguyên và số thực
Trang 32Kiểu dữ liệu (Data types)
bindec($str) Chuyển chuỗi nhị phân $str
sang kiểu decimal Bindec(“1100”); // 12.0ceil($x) Trả về giá trị là số nguyên
lớn hơn $x ceil(4.3);ceil(9.999); // 10// 5
ceil(-3.14); // -3
floor($x) Trả về số nguyên nhỏ hơn
$x floor(4.3); // 4
floor(9.999); // 9 floor(-3.14); // -4
round($x) Làm tròn số $x round(4.3); // 4
round(9.999); // 10 round(-3.5); // -4 rand($a,$b) Trả về số ngẫu nhiên trong
khoản $a -> $b Rand();// 0 ~ 32767Rand(1,10); // ? exp($x,$y) Hàm tính x^y exp(2,8) ; // 256
Trang 33Kiểu dữ liệu (Data types)
Kiểu String: chuỗi được đặt trong cặp dấu ‘’ hoặc “”
Trang 34Kiểu dữ liệu (Data types)
Một số hàm xử lý chuỗi thông dụng
Tên hàm Ý nghĩa Ví dụ
addslashes($str) thêm dấu \ vào trước các ký
tự đặc biệt trong chuỗi $str = "What's your real name?";echo addslashes($str);
//What\'s your real name?
stripslashes($str) loại bỏ ký tự \ trong chuỗi
$str
stripslashes($str) // What's your real name?
explode($str,$string) Tách chuỗi $string dựa vào
mẫu $str $string = "item1;item2;item3";$items = explode(";",$string );
// $items[0] = “item1”
// $items[1] = “item2”
implode($str,$arry) nối các phần tử trong mảng
thành chuỗi, phần tử ngăn cách bởi $str
$items = array(“item1”,”item2”);
$string = implode(“;”,$string); //$string = “item1;item2”
ltrim($str),rtrim($str),
trim($str)
cắt bỏ khoảng trắng ở trước, sau, trước và sau chuỗi
md5($str), sha1($str) dùng để băm chuỗi $str echo md5(“mypassword");
//34819d7beeabb9260a5c854bc85b3e44 strlen(),strupper(),
Trang 35Kiểu dữ liệu (Data types)
Kiểu mảng - Array
Khai báo: $a = array(value1,value2,value3,…);
$a = array("Samsung", "Nokia" ,"iPhone");
•echo $a[0]; // Samsung
•echo $a[2]; // iPhone
•echo $a[3]; // ???
Hoặc $a = array($key => $value);
$a=array("Samsung","n"=>"Nokia","iPhone");
•echo $a[0]; // Samsung
•echo $a[1]; // iPhone
•echo $a["n"]; // Nokia
• print_r($a); //Array([0]=>Samsung [n]=>Nokia [1]=>iPhone)
Trang 36Kiểu dữ liệu (Data types)
Trang 37Kiểu dữ liệu (Data types)
• $countries["uk"] = "United Kingdom";
• $countries["us"] = "United States";
• echo $countries["nl"]; // Netherlands
Hoặc
• $countries = array ( "ca" => "Canada" ,
"nl" => "Netherlands" ,
"de" => "Germany" ,
"uk" => "United Kingdom" ,
"us" => "United States" ) ;
Trang 38Kiểu dữ liệu (Data types)
Kiểu mảng (tt)
Mảng nhiều chiều
0 Samsung Galaxy Note 950
1 Apple iPhone 5s 1100
2 Nokia Lumia 920 980
Trang 39Kiểu dữ liệu (Data types)
Trang 40Kiểu dữ liệu (Data types)
Kiểu mảng (tt)
Duyệt mảng với chỉ số có thứ tự
Trang 41Kiểu dữ liệu (Data types)
Kiểu mảng (tt)
Duyệt mảng với chỉ số có thứ tự
Trang 42Kiểu dữ liệu (Data types)
Kiểu mảng (tt)
Duyệt mảng với chỉ số không thứ tự
Trang 43Kiểu dữ liệu (Data types)
Kiểu mảng (tt)
Duyệt mảng với chỉ số không thứ tự
Trang 44Kiểu dữ liệu (Data types)
Kiểu mảng (tt)
Loại bỏ các giá trị trùng lắp: array_unique($a)
Trang 45Kiểu dữ liệu (Data types)
Kiểu mảng (tt)
“Độn” các phần tử vào mảng: array_pad($a,n,val)
– $a: mảng được “độn”
– n: số phần tử tối đa của mảng $a sau khi “độn”
– val: giá trị cho phần tử mới
Trang 46Kiểu dữ liệu (Data types)
Kiểu mảng (tt)
Nối các mảng thành một mảng: array_merge()
Trang 47Kiểu dữ liệu (Data types)
Kiểu mảng (tt)
Tìm giá trị duy nhất: array_diff($a,$b,$c)
– Tìm các giá trị có trong mảng $a nhưng không có trong $b,$c – Có thể có nhiều tham số sau mảng $a
Trang 48Kiểu dữ liệu (Data types)
Kiểu mảng (tt)
Tìm phần tử giao nhau: array_intersect()
Trang 49Kiểu dữ liệu (Data types)
Kiểu mảng (tt)
Sắp xếp mảng sort(): sắp xếp tăng dần theo thứ
tự ưu tiên: số > ký hiệu > chữ cái
Trang 50Kiểu dữ liệu (Data types)
Kiểu mảng (tt)
Sắp xếp mảng sort(): sắp xếp tăng dần dựa vào
$value theo thứ tự ưu tiên: số > ký hiệu > chữ cái
Các $key sẽ bị gán lại
theo số thứ tự
Trang 51Kiểu dữ liệu (Data types)
Kiểu mảng (tt)
Sắp xếp mảng ksort(): sắp xếp tăng dần dựa vào
$key của mảng, không dựa vào $value
Trang 52Kiểu dữ liệu (Data types)
Kiểu ngày tháng – Date & Tine
checkdate($m,$d,$y): kiểm tra ngày tháng có hợp lệ hay không
Trang 53Kiểu dữ liệu (Data types)
Kiểu ngày tháng (tt)
time(): trả về một số là số giây tính từ ngày
1-1-1970 đến thời điểm hiện tại
Trang 54Kiểu dữ liệu (Data types)
“W” 1 -> 53 Trả về tuần thứ mấy của năm
“F” January -> December Trả về tên đầy đủ của tháng
Trang 55Kiểu dữ liệu (Data types)
Kiểu ngày tháng (tt)
date():ví dụ
Trang 56Kiểu dữ liệu (Data types)
"yday" 0 -> 365 Ngày thứ mấy của năm
"weekday" Sunday -> Saturday Thứ trong tuần, dạng full text
"month" January -> December Tháng trong năm, dạng full text
0 1358547614 ?? Số giây tính từ 1-1-1970
Trang 57Kiểu dữ liệu (Data types)
Kiểu ngày tháng (tt)
getdate(): ví dụ
Trang 58Kiểu dữ liệu (Data types)
Kiểu ngày tháng (tt)
mktime($h,$m,$s,$mo,$d,$y): tạo giá trị kiểu ngày tháng hợp lệ trong PHP
Trang 59Kiểu dữ liệu (Data types)
Kiểu ngày tháng (tt)
strtotime($str): chuyển chuỗi $str sang kiểu thời gian, nếuchuyển đổi không thành công sẽ trả về 01-01-1970
Trang 60Hằng (Constants)
Giá trị không bao giờ thay đổi
Khai báo: define(“CONTS”,”value”);
Trang 61Hằng (Constants)
Kiểm tra hằng đã được khai báo: defined();
Nếu hằng đã được khai báo kết quả trả về 1, ngược lại trả về 0
Trang 62% chia lấy phần
dư $x = $y % $z; // 1
Trang 63Phép toán (Operators)
Phép toán so sánh – Comparison operators
Phép toán Ý nghĩa $y = 10; $z = 3; Ví dụ
== bằng $x = ($y == $z); // false
< nhỏ hơn $x = ($y < $z); // false
> lớn hơn $x = ($y > $z); // true
<= nhỏ hơn hoặc bằng $x = ($y <= $z); // false
>= lớn hơn hoặc bằng $x = ($y >= $z); // true
<> khác nhau $x = ($y <> $z); // true
!= khác nhau $x = ($y <> $z); // true
Trang 64Phép toán (Operators)
Phép toán Lô-gíc – Logical Operators
Phép toán Ý nghĩa $y = 10; $z = 3; Ví dụ
&& AND $x = (($y>0) && ($z>0)); //true
and // $x = (($y>0) and ($z>0)); //true
|| OR $x = (($y>5) || ($z>5)); //true
or // $x = (($y>5) or ($z>5)); //true
xor
loại trừ, chỉ 1 trong
2 là true
$x = (($y>0) xor ($z>0)); //false
! NOT $x = !(($y>0) xor ($z>0)); //true
Trang 65Phép toán (Operators)
Toán tử gán – Assignment operators
Phép toán Tương đương $x= 10; $y = 3; Ví dụ
Trang 66Lệnh cấu trúc (Control structures)
Trang 67Lệnh cấu trúc (Control structures)
Trang 68Lệnh cấu trúc (Control structures)
Trang 69Lệnh cấu trúc (Control structures)
Trang 70Hàm (Functions)
Hàm do người dùng định nghĩa
• Có tham số hoặc không có tham số
• Có kết quả quả trả về hoặc không có kết quả trả về
function fn_name ($args){
// function body
return $results;
}
Trang 71Hàm (Functions)
Tham số mặc định của hàm
Trang 72Hàm (Functions)
Truyền tham số tham chiếu: & $var
Trang 73Hàm (Functions)
Gán hàm cho biến
– PHP hỗ trợ gán hàm cho biến để có thể load các hàm trong lúc thực thi
Trang 74 Require: sẽ ngưng thực thi kể từ dòng
require nếu tập tin không tìm thấy
Include và require sẽ tự động cập nhật các giá trị, các hàm trong tập tin nếu bị thay đổi trong quá trình thực thi
Requre_once(), include_once(): chỉ chèn
tập tin một lần duy nhất
Trang 75Include(), Require()
Trang 76Biểu thức chính qui (Regular Expressions)
Là các mẫu (patterns) dùng để so khớp chuỗi
^ xyz: chuỗi phải bắt đầu bằng xyz
xyz $ : chuỗi phải kết thúc bằng xyz
[a-z]: khớp với các chữ cái thường
[A-Z]: khớp với các chữ cái in HOA
[a-zA-Z]: khớp với mọi chữ cái
[0-9 \ \ -]: khớp với số 09, dấu chấm và dấu trừ
^[ ^ a-z]: không được bắt đầu với ký tự thường
• ^[^0-9][a-z]$: khớp với 2 ký tự, không bắt đầu bằng số,
ký tự 2 thuộc chữ cái thường az
^[^0-9][0-9]$: khớp với chuỗi dạng a5, %6, Z9, F1,
nhưng không khớp với 55,F12, …
Trang 77Biểu thức chính qui (Regular Expressions)
• [^\\\/\^]: khớp với bất kỳ ký tự nào ngoại trừ ký tự \, ký
tự / và ký tự ^
^[a-z]{ n,m }$: lặp lại tối thiểu n lần và tối đa m lần
ký tự thường
• ^a{3}$: khớp với aaa
• ^a{2,4}: khớp với aa,aaa và aaaa
• ^a{2,}: khớp với ít nhất 2 chữ a, độ dài không giới hạn
^(x | y | z)[a-z]: bắt đầu bằng x hoặc y hoặc z
• ^(a|b)9$: khớp với a9, b9
• ^(a|b)[0-9]$: khớp với a0 a9, b0b9
• ^([wx])([yz])$: khớp với wy, wz, xy hoặc xz
• ^0(90|91|93|95|97|98|99|122|166)[0-9]{7}$: khớp vớicác số điện thoại di động
Trang 78Biểu thức chính qui (Regular Expressions)
[a-z] * : lặp lại 0 hoặc nhiều lần a hoặc b
• ^r[o]*m: khớp với rm, rom, room, rooom,…
• ^i*you$: i love you, i’m looking forward to seeing you
[a-z] + : lặp lại ít nhất một lần
• ^r[o]+m: khớp với rom, room, roooom,… nhưng khôngkhớp với rm
[a-z]?: kiểm tra xem mẫu có xuất hiện hay không
• 9{3}?: Khớp với chuỗi có chứa 999
• 9{2}?|a{3}?: có chứa 99 hoặc aaa
( dấu chấm): ký tự bất kỳ
*: ký tự bất kỳ, lặp lại 0 hoặc nhiều lần
+: lặp lại ít nhất 1 lần với bất kỳ ký tự nào
Trang 79Biểu thức chính qui (Regular Expressions)
?= : kiểm tra điều kiện
• (?=.*{6,20}): kiểm tra độ dài chuỗi, tối thiểu 6, tối đa 20
• (?=.*[0-9]): kiểm tra chuỗi có chứa ít nhất 1 chữ số
• (?=.*[a-z]): kiểm tra có chứa ít nhất 1 chữ cái thường
• (?=.*[A-Z]): kiểm tra có chứa ít nhất 1 chữ HOA
• (?=.*\W): kiểm tra có chứa ký tự đặc biệt
K iểm tra độ mạnh của mật khẩu:
Trang 80Biểu thức chính qui (Regular Expressions)
Hàm preg_match($ptrn, $str) : so khớp chuỗi với mẫu, mẫu phải được đặt trong cặp dấu / /
• trả về true nếu hợp lệ ngược lại trả về false
Trang 81Biểu thức chính qui (Regular Expressions)
Hàm preg_replace($ptrn, $str_rep,$str) : tìm mẫu, thay thế bằng $str_rep trong chuỗi $str
Trang 82Biểu thức chính qui (Regular Expressions)
Hàm preg_split($ptrn, $str) dùng để tách chuỗi dựa vào pattern, kết quả trả về một mảng
Trang 83C l i c k t o e d i t c o m p a n y s l o g a n
Trang 86 Các máy tính muốn giao tiếp với nhau phải có một giao th c
để “bắt tay” nhau để truyền/nhận dữ liệu
Các chương trình ng dụng cần chia sẻ dữ liệu cũng phải
“bắt tay” bằng một giao th c nào đó
HTTP (HyperText Transfer Protocol) là giao th c giao tiếpgiữa các chương trình máy tính thông qua mạng internet
ng dụng web thuộc dạng client-server, các trình duyệt web đóng vai trò là các clients gởi yêu cầu đến các server
(apache, IIS,…)
Sau khi server nhận được yêu cầu sẽ tìm kiếm trang và xử
lý, gởi trả kết quả về cho trình duyệt
Trang 87 Thông điệp yêu cầu có 2 phần header và body (tùy chọn)
Server trả lời cho trình duyệt bằng một thông điệp đáp ng(http response message)
Trang 88- Dòng đầu tiên là một lệnh HTTP gọi là method, sử dụng phương th GET
để yêu cầu trang login.php, sử dụng tài liệu HTTP phiên bản 1.1
- User-agent: thông tin về trình duyệt gởi yêu cầu
- Tiếp đến là các thông tin trong phần header
Trang 89Date: Mon, 25 Jan 2013 17:41:30 GMT
Keep-Alive: timeout=5, max=100
Server: Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
X-Powered-By: PHP/5.4.7
Trang 90Thông tin Server
Biến $_SERVER ch a đầy đ các thông tin về server
SERVER_NAME: tên c a host, ví dụ www.ctu.edu.vn
SERVER_SOFTWARE: phần mềm máy ch đang sử dụng, ví
dụ “Apache/1.3.22 (Unix) mod_perl/1.26 PHP/4.1.0”)
SCRIPT_FILENAME: đường dẫn đầy đ c a tập tin hiện hành,
ví dụ E:/xampp/htdocs/mywebsite/index.php
SCRIPT_NAME: đường dẫn URL đến trang hiện tại, ví dụ
~/mywebsite/index.php
QUERY_STRING: chuỗi query, theo sau dấu ? trong URL, ví
dụ user=admin & action=edit & return=index
Sử dụng lệnh print_r($_SERVER); để hiển thị tất cả các
thông tin có ch a trong biến $_SERVER