2. ❑ PHP (Hypertext Preprocessor)
▪ Là ngôn ngữ script chạy trên server (Server
Scripting)
▪ Là mã nguồn mở, chạy được trên nhiều
platforms (Unix, Linux, Windows)
▪ PHP scripts:
• chứa text, thẻ HTML, script
• trả về kết quả cho trình duyệt một plain HTML
2
3. ❑ Lịch sử phát triển
▪ PHP (1994): được phát triển để phát sinh các form đăng
nhập sử dụng giao thức HTTP của Unix
▪ PHP 2 (1995): script server, hỗ trợ CSDL, upload file,
khai báo biến, mảng, hàm đệ quy, câu điều kiện, biểu
thức, …
▪ PHP 3 (1998): hỗ trợ ODBC, đa hệ điều hành, giao thức
email (SNMP, IMAP)
▪ PHP 4 (2000): trở thành một thành phần độc lập cho các
webserver
▪ PHP 5 (2005): bổ sung Zend Engine II hỗ trợ lập trình
HĐT, XML, SOAPcho Web Services, SQLite
▪ PHP 7.1.0: Phiên bản mới nhất 8/2016
3
4. Tại sao PHP?
▪ Phần mềm mã nguồn mở, miễn phí
▪ Chạy trên nhiều platforms khác nhau (Unix,
Linux, Windows)
• Tương thích với hầu hết các web server: Apache,
IIS, Caudium, Netscape Enterprise Server
• Tương thích với hầu hết các HQT CSDL: MySQL,
Informix, Oracle, Sybase, Solid, PostgreSQL,
Generic ODBC, etc.
▪ Dễ học và phát triển nhanh các ứng dụng trên
Web
▪ Được sử dụng rộng rãi trong môi trường phát
triển ứng dụng Web
4
5.
6.
7. ❑ Làm thế nào để chạy PHP
▪ Cài đặt PHP
• http://www.php.net/downloads.php
▪ Download web server Apache
• http://httpd.apache.org/download.cgi
▪ Cài đặt MySQL
• www.mysql.com
▪ Hoặc sử dụng các chương trình đã đóng gói
sẵn: Appserv, Wamp, Xampp, Vertrigo …
7
10. ❑ Http header là các thông tin điều khiển
nằm trong các http request, http response
❑ Chứa các chỉ thị báo cho trình
duyệt/server
▪ Chuyển qua trang khác
▪ Không hiển thị file php
▪ Không lưu vào cache
10
11. ❑ Xem http header bằng FireBug
▪ Mở firefox, nhấn F12 để bật FireBug
▪ Gõ địa chỉ 1 trang web
▪ Xem header trong cửa sổ FireBug
11
12. ❑ Xem http header bằng LiveHTTPHeaders
(tiện ích mở rộng của Firefox)
http://livehttpheaders.mozdev.org
13. Header Description
Host Địa chỉ server đang truy cập
User-Agent Chứa thông tin về browser và HĐH
Accept Các kiểu dữ liệu mà browser chấp nhận
Accept-Language Chỉ ra những ngôn ngữ để server đáp ứng
Accept-Encoding Chỉ ra các kiểu file compress để server nén dữ
liệu
Accept-Charset Những character set mà browser chấp nhận
Connection Chỉ ra các trạng thái kết nối
Cookie Danh sách các biến cookie đã được tạo trước
đây
Referer Địa chỉ của trang web mà từ đó link đến trang
hiện tại
……………..
13
14. Header Description
Cache-Control Thông báo cho browser có cache dữ liệu hay
không
Content-Type Chỉ định kiểu MIME của tài liệu
Content-Language Ngôn ngữ trong nội dung trả về
Expires Chỉ định thời gian nội dung trả về sẽ hết hạn
Last-Modified Thời điểm tài liệu cập nhật lần gần đây nhất
Content-Encoding Kiểu nén dữ liệu gửi về browser
Server Tên của server
Content-Length Kích thước của tài liệu
Location Chuyển hướng sang trang khác
Set-cookie Tập các biến cookie mà server gửi đến browser
14
15. ❑ 2xx: request thành công
❑ 3xx: chuyển hướng đến trang khác
❑ 4xx: có lỗi xảy ra trong request
❑ 5xx: server bị lỗi
❑ Một số status code thường gặp
▪ 200: OK, được gửi trong response thì request
thành công
▪ 302: tạm chuyển đến trang khác
▪ 400: bab request; 401: unauthorized;
403: forbidden; 404: trang không tìm thấy
▪ 500: internal server error
15
16. ❑ Chuyển hướng (redirection): yêu cầu trình
duyệt chuyển sang trang khác
❑ Cú pháp: header(“location:url”)
❑ VD:
<?php
header(“location:login.php”)
?>
16
17. ❑ Chuyển hướng (redirection):
❑ VD:
Nếu browser là IE thì chuyển đến trang welcome.html,
ngược lại chuyển đến welcome1.html
17
<?php
if(strpos($_SERVER['HTTP_USER_AGENT'],'MSIE')>0)
header("location:welcome.html");
else header("location:welcome1.html");
?>
18. ❑ Content-type: dùng để báo cho browser kiểu
dữ liệu mà webserver đang trả về cho
browser
❑ Cú pháp:
header(“content-type:MimeType”)
18
19. ❑ Content-type:
❑ VD
19
<?php
// Chuẩn bị xuất 1 file pdf
header('Content-type: application/pdf');
// có tên là downloaded.pdf
header('Content-Disposition: attachment;
filename="downloaded.pdf"');
// nội dung từ file pdf nguồn test.pdf
readfile('test.pdf'); ?>
20. ❑ Một số kiểu Mimetype
20
Mimetype Mô tả
application/msword File word
application/pdf File pdf
application/vnd.ms-excel File excel
Application/zip File zip
21.
22. ❑ Dùng để lưu thông tin (biến) của người
dùng
❑ Cookie được lưu ở máy client, được
browser quản lý
❑ Mỗi biến cookie có 1 thời gian quá hạn.
Vượt qua thời điểm đó, browser sẽ xóa
biến cookie đó
❑ Mỗi lần thực hiện request 1 trang, browser
sẽ gửi lại các biến cookie chưa hết hạn
❑ Được đặt trước thẻ <html>
22
23. ❑ Tạo cookie
▪ Cú pháp
setcookie(“tên”, giá-trị [, thời
điểm quá hạn])
❑ Sử dụng cookie
▪ $_COOKIE là dãy biến toàn cục sẵn có trong
php
▪ Cú pháp sử dụng biến cookie
$_COOKIE[“TenBien”]
23
29. ❑ Session là đối tượng trên server, chứa
thông tin của từng user
❑ Mỗi user có vùng session riêng biệt
❑ $_SESSION là 1 dãy toàn cục có sẵn
trong php.
❑ Đọc và ghi giá trị session
▪ $_SESSION[“sessionName”] = value
▪ $_SESSION[“sessionName”][ ]= array(…)
▪ if (isset($_SESSION[“sessionName"])
echo $_SESSION[“sessionName"]; 30
30. ❑ Xóa bỏ session
▪ unset($_SESSION['name']); hoặc
▪ session_destroy() // xóa bỏ all session
❑ VD
<?php
session_start();
$_SESSION[‘login']=1;
$_SESSION['name']=“Nguyễn Văn Hoa";
header("Location: index.php");
?>
31
31. ❑ 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[“Login”] = 0/1: 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
▪ …
32
32. ❑ Tạo trang login.htm yêu cầu người dùng đăng nhập.
❑ Tạo trang validateuser.php là trang xử lí thông tin
đăng nhập từ trang login
▪ Kết nối với CSDL, kiểm tra xem thông tin đăng nhập
có đúng hay không.
▪ Nếu không đúng thì cho redirect đến trang login.htm
▪ Còn nếu ĐÚNG thì dùng một biến Session để lưu
trạng thái login thành công lại.
• Ví dụ $_SESSION["IsLogin“] = 1
❑ 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:
unset($_SESSION[“IsLogin”]); 33
33.
34. ❑ Hàm thao tác trên file
▪ res fopen(string $filename, string $mode)
▪ bool fclose(res $handle)
▪ int fpassthru (res $handle): gửi toàn bộ nội
dung file đang mở cho browser (binary)
▪ int readfile (string $filename): gửi toàn bộ nội
dung file đang mở cho browser (text)
▪ string fread(res $handle, int $length) : đọc
một khối dữ liệu dài tối đa length (binary)
▪ int fwrite(res $handle, string $str [, int
$length]): ghi nội dung của chuỗi ra file
36
35. ❑ Hàm thao tác trên thư mục
▪ bool chdir ( string $directory ): Chuyển thư
mục hiện hành
▪ string getcwd (): Trả về thư mục hiện hành
▪ resource opendir (string $path): Mở một thư
mục trước khi đọc nội dung
▪ void closedir ( res $dir_handle ): Đóng thư
mục đã mở trước đó
▪ bool mkdir ( string $pathname): Tạo thư mục
▪ bool rmdir ( string $dirname): Xóa thư mục
37
37. <html>
<head><title> Form for Uploading a File </title>
</head>
<body>
<h2> A simple form for uploading a file </h2>
<form action="upload.php" method="post
enctype="multipart/form-data">
Enter file name: <input type="file"
name="userfile"><br>
<input type="submit"><br>
</form>
</body> </html>
39
38. ❑ userfile: tên của input trong form upload
❑ $_FILES['userfile']['name']
▪ Tên file đã được upload.
❑ $_FILES['userfile']['type']
▪ Kiểu của file được upload nếu trình duyệt có
thông tin này. Ví dụ "image/gif“
❑ $_FILES['userfile']['size']
▪ Kích thước của file đã upload tính bằng byte.
❑ $_FILES['userfile']['tmp_name']
▪ Vị trí file được lưu trữ tạm trên server.
❑ $_FILES['userfile']['error']
▪ Mã lỗi của việc upload (0 == no error)
40
39. <?php
$target = "D:/apps/xampp/htdocs/demo/";
$target = $target . basename(
$_FILES['uploaded']['name']) ;
$ok=1;
if(move_uploaded_file($_FILES['uploaded']
['tmp_name'], $target))
{
echo "The file ". basename(
$_FILES['uploadedfile']['name']). "
has been uploaded";
}
else { echo "Sorry, there was a problem
uploading your file.";
}
?>
41
42. ❑ PHP hỗ trợ 2 cách sendmail
▪ PHP mail() –Non Authentication
▪ PHP PEAR package –SMTP Authentication
❑ Sử dụng mail()
▪ Cú pháp
mail(to,subject,message,headers,parameters)
43. ❑ Sử dụng mail()
▪ Cú pháp
mail(to,subject,message,headers,parameters)
Key Description
To Địa chỉ người nhận
Subject Chủ đề, không xuống dòng
Message Nội dung thư
Header Thông tin thêm (vd: FROM, BCC, CC,…)
parameters Tham số cấu hình cho ứng dụng gửi mail
44. <?php
$to = ‘noname@yahoo.com';
$subject = 'Test email';
$message = "Hello World!nnThis is my first mail.";
// định nghĩa email người gửi và email trả lời
$headers = "From:mymail@yahoo.comrnReply-To:
replymail@yahoo.com";
// gửi email
$mail_sent = mail( $to, $subject, $message, $headers);
// kiểm tra gửi thành công và thông báo
echo $mail_sent ? "Mail sent" : "Mail failed";
?>
45.
46. ❑ Biểu thức chính qui (hay biểu thức quy
tắc) là mẫu chuỗi dùng để so khớp, kiểm
tra các chuỗi khác
❑ Php hỗ trợ các hàm
▪ preg_match kiểm tra, so khớp
▪ preg_replace tìm kiếm, thay thế
▪ preg_split tách chuỗi
▪ …
48
47. ❑ Hàm preg_match($rule, $str, $result)
▪ $rule là chuỗi RE do ta quy định
▪ $str là chuỗi cần so sánh
▪ $result là kết quả trả về
❑ Hàm preg_replace($pattern,
$replacement, $subject)
▪ $partern: là chuỗi RE
▪ $replacement: là chuỗi thay thế
▪ $subject: là chuỗi muốn duyệt
❑ Hàm preg_split($pattern, $string)
48. ❑ VD tìm những từ bắt đầu là A, sau đó là 2 ký
tự a-z
$string="Anh thương Ana anh đi đâu
đâu";
$pattern="/A[a-z][a-z]/";
preg_match($pattern, $string, $match);
echo $match[0];
50
49. ❑ VD tìm thay từ cháu thành bé
$partern = "/cháu/";
$subject = "cháu lên ba, cháu đi mẫu giáo";
$replacement = "bé";
echo preg_replace($partern, $replacement,
$subject);
50. ❑ VD tách chuỗi thành các chuỗi con
$ip = "192.168.7.23";
$iparr = preg_split("/./", $ip);
foreach($iparr as $t)
echo $t . "<br>";
51. ❑ Trong biểu thức regex có 11 ký tự đặc biệt
▪ ^ : diễn tả vị trí bắt đầu của 1 chuỗi; “^Binh”
▪ $ : diễn tả vị trí kết thúc của 1 chuỗi; “đinh$”
▪ * : có nghĩa không hoặc nhiều ký tự; “ab*”
▪ + : có nghĩa MỘT hoặc nhiều ký tự; “ab+”
▪ ? : có nghĩa KHÔNG hoặc MỘT ký tự; “ab?”
▪ {x}: có nghĩ là x ký tự; “ab{2}”
▪ (): diễn tả 1 chuỗi ký tự; “a(bc)*”; “a(bc){1,5}”
▪ | : giống toán tử OR
▪ . : diễn tả 1 ký tự bất kỳ
▪ []: diễn tả tập hợp các ký tự
52.
53. ❑ Trong một website có thể chứa nhiều file
.htaccess
❑ .htaccess là file text dùng để cấu hình hoạt
động cho webserver Apache bằng nhiều
lệnh khác nhau
54. ❑ mod_Rwrite: thay đổi địa chỉ trang web từ
một địa chỉ web động sang một địa chỉ web
tĩnh thông qua các luật chuyển đổi
VD: địa chỉ thật /news/tinthethao.php?idLT=1
được thay bằng địa chỉ ảo /news/tinthethao
❑ RewriteEngine on | off bật tắt chức năng
rewrite
55. ❑ RewriteRule: luật điều chỉnh địa chỉ thật thành địa
chỉ ảo
❑ Cú pháp: RewriteRule pattern substitution [flags]
▪ flags: chỉ thị cách thức hoạt động
[R]: force Redirect
[F]: force ULR to be forbidden
[L]: last rule (dùng lại ở rule này)
[NC]: no case
▪ pattern: regex
▪ substitution: địa chỉ gốc do client request
❑ VD: RewriteRule ^dangky/$ dk.php [L]
58. ❑ Khai báo lớp
class tên_lớp{
// Danh sách các biến, hằng, lớp... (thuộc tính)
// Danh sách các hàm (phương thức)
}
<?php
class SimpleClass{
public $var = 'a default value';
public function displayVar() {
echo $this->var;
}
}
?>
60
59. ❑ Tạo đối tượng
▪ $a = new SimpleClass();
▪ $a-> displayVar();
❑ Các phương thức OOP
▪ Đóng gói
▪ Đa thừa kế
▪ Overloading
61
60. <?php
class A {
protected function func1() { echo("I'm func1 in A!<br/>");}
private function func2() { echo("I'm func2 in A!<br/>");}
}
class B extends A {
public function func3() { echo("I'm func3 in B!<br/>");
$this->func1();
}
$b = new B;
$b->func1();
?>
62
61. ❑ Định nghĩa class classDB.php
<?php
class db {
public $conn = NULL;
public $result = NULL;
public $host="localhost";
public $user="root";
public $pass="root";
public $database="php04";
private $author="Nguyễn Văn An";
?>
63
62. function __construct(){
$this->conn = mysql_connect($this->host, $this->user,
$this->pass);
mysql_select_db($this -> database, $this->conn);
mysql_query("set names 'utf8'");
}
function getdata($sql) {
$this->result = mysql_query($sql);
}
function fetchRow() {
if (is_resource($this->result) ==false) return false;
$row = mysql_fetch_assoc($this->result);
return $row;
}
64
63. ❑ Sử dụng attribute
<?php
require_once "classDB.php";
$d = new db;
echo "<p>user = {$d->user} </p>";
echo "<p>author = {$d->author} </p>";
echo "<p>version = {$d->version} </p>";
?>
❑ Thực hiện câu query và hiển thị kết quả
<?php
require_once "classDB.php";
$d = new db;
$d->getdata("select * from tin where TinNoiBat=1");
while ($row = $d->fetchRow() )
echo "<p>" , $row['TieuDe'], "</p>";
?>
65
64.
65. ❑ Thông thường chúng ta có thể thực hiện việc
tìm kiếm theo nhiều tiêu chí khác nhau
❑ Vd tìm sản phẩm theo từ khóa, hãng SX, từ
giá – đến giá
▪ Phần tạo form
• Lấy dữ liệu từ db đưa vào select box hãng
• Dùng Jquery+Ajax lấy DS SP theo
hãng sx
▪ Phần xử lý kết quả
• Viết code lấy dữ liệu từ db
• Viết code hiện kết quả
67
66. ❑ Tìm tin theo từ khóa, loại tin và thời gian
❑ Tìm theo nhiều loại dữ liệu khác nhau
❑ Tìm kiếm toàn văn: được thực hiện qua 2
bước
▪ Index: build chỉ mục
▪ Search: thực hiện tìm kiếm theo chỉ muc
68
67.
68. ❑ Phân quyền nhằm trả lời các câu hỏi:
▪ Người dùng nào? Được làm gì? Trên đối tượng
nào?
→ Tổ chức phân quyền trong ứng dụng web trả
lời 3 câu hỏi trên
❑ Sự phức tạp của phân quyền người dùng
phụ thuộc
▪ Qui mô của ứng dụng
▪ Số lượng và loại (nhóm) người dùng
▪ Trình độ và kinh nghiệm của người thiết kế phát
triển
69. ❑ Tổ chức và kiểm tra người dùng dựa vào bảng
mô tả
Người dùng
/ Nhóm
Quyền Tài nguyên
/ Module
An, Hoa Xem Tin
An, Hoa Thêm Tin
An, Hoa Sửa Tin
An, Hoa Xóa Tin
An Xem Loại tin
An Thêm Loại tin
… … …
70. ❑ Về tổ chức dữ liệu: cần ít nhất 2 bảng là
người dùng và nhóm
▪ Mỗi người dùng trong 1 hay nhiều nhóm
▪ Mỗi nhóm
• Diễn tả một hành động (xem, thêm, …) trên một loại tài
nguyên
• Hoặc diễn tả khả năng quản lý dữ liệu theo module
(quản trị mặt hàng, tin, quảng cáo, người dùng)
• Hoặc diễn tả theo phòng ban chức năng
▪ Nhiều loại tài nguyên, ví dụ: loại tin, tin, …
• Số lượng tài nguyên có cố định hay không
▪ Quyền áp dụng cho nhóm hay từng tài nguyên
riêng lẻ
71. ❑ Kiểm tra quyền
▪ Được thực hiện đầu mọi trang php có nhu cầu
kiểm tra quyền
• Code kiểm tra quyền đặt trong 1 file riêng, sau đó dùng
require
<?php
$kt = checkPermission([tham số]);
if($kt==false)
header(“location:login.php?m=‘Access denied’”);
?>
▪ Hàm kiểm tra quyền dựa vào các group mà người
dùng đăng nhập là thành viên rồi tra trong bảng
Roles
▪ Khi người dùng login, username và userid được
lưu trong session
72.
73. ❑ JQuery: là thư viện JavaScript giúp đơn giản
cách viết JavaScript trong các trang web
❑ Thư viện của Jquery bao gồm
▪ HTML element selections
▪ HTML element manipulation
▪ CSS manipulation
▪ HTML event functions
▪ JavaScript Effects and animations
▪ HTML DOM traversal and modification
▪ AJAX
75
Nguồn : http://www.w3schools.com/jquery
74. ❑ Downloady file jquery.js tại jquery.com và
lưu vào folder website
❑ Chèn Jquery vào thể head
<head>
<script type="text/javascript"
src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
// chèn thêm mã jquery
});
});
</script>
</head>
76
75. ❑ Mã JQuery phải nằm trong hàm
▪ $(document).ready(function(){…})
❑ Cú pháp
▪ $(selector).action()
$: định nghĩa jQuery; (selector): câu truy vấn, chọn
các phần tử HTML; action(): hành động trên các
phần tử đã chọn
❑ VD
▪ $(this).hide() - hides current element
▪ $("p").hide() - hides all paragraphs
▪ $("p.test").hide() - hides all paragraphs with
class="test“
77
76. ❑ JQuery selector: chọn các phần tử HTML
78
Syntax Description
$(this) Current HTML element
$("p") All <p> elements
$("p.intro") All <p> elements with class="intro"
$("p#intro") All <p> elements with id="intro"
$("p#intro:first") The first <p> element with id="intro"
$(".intro") All elements with class="intro"
$("#intro") The first element with id="intro"
$("ul li:first") The first <li> element of each <ul>
$("[href$='.jpg']") All elements with an href attribute that ends with ".jpg"
$("div#intro .head")
All elements with class="head" inside a <div> element
with id="intro"
77. ❑ Sự kiện trong JQuery: click, dblclick,
focus, mouseover
79
Event Method Description
$(document).ready(function) Binds a function to the ready event of a document
(when the document is finished loading)
$(selector).click(function)
Triggers, or binds a function to the click event of
selected elements
$(selector).dblclick(function)
Triggers, or binds a function to the double click
event of selected elements
$(selector).focus(function)
Triggers, or binds a function to the focus event of
selected elements
78. 80
❑ Hiệu ứng trong Jquery: hide, show, toggle,
….
Function Description
$(selector).hide() Hide selected elements
$(selector).show() Show selected elements
$(selector).toggle() Toggle (between hide and show) selected elements
$(selector).slideDown() Slide-down (show) selected elements
$(selector).slideUp() Slide-up (hide) selected elements
$(selector).slideToggle() Toggle slide-up and slide-down of selected elements
$(selector).fadeIn() Fade in selected elements
$(selector).fadeOut() Fade out selected elements
$(selector).fadeTo() Fade out selected elements to a given opacity
$(selector).animate() Run a custom animation on selected elements
79. 81
❑ JQuery thao tác với html thông qua các
hàm
Method Description
after() Inserts content after selected elements
append() Inserts content at the end of (but still inside) selected elements
before() Inserts content before selected elements
html() Sets or returns the content of selected elements
insertAfter() Inserts HTML markup or elements after selected elements
insertBefore() Inserts HTML markup or elements before selected elements
prepend()
Inserts content at the beginning of (but still inside) selected
elements
remove() Removes selected elements
…. …..
80. 82
❑ Các hàm thao tác với CSS
▪ Gán thuộc tính CSS cho các phần tủ đã chọn
• $(selector).css(name,value)
• $(selector).css({properties})
▪ Lấy giá trị thuộc tính CSS của phần tử
• $(selector).css(name)
▪ VD
• $(this).css("background-color");
• $("p").css({"background-color":"yellow","font-size“
:"200%"});
81. ❑ JQuery và Ajax: JQuery cung cấp thư viện cho Ajax
▪ url: địa chỉ trang sẽ request dữ liệu (php?)
▪ data: dữ liệu dạng cập đôi key/value sẽ gửi lên server
▪ callback: hàm sẽ thực hiện khi request xong
▪ type: kiểu dữ liệu sẽ send (html,xml,script, text, ...)
83
Method Description
$(selection).load(url,data,call
back)
Tải dữ liệu từ server vào các phần tử đã chọn
$.ajax(options) Tải dữ liệu từ server vào XMLHttpRequest object
$.get(url,data,callback,type) Tải dữ liệu từ xa sử dụng HTTP GET
$.post(url,data,callback,type) Tải dữ liệu từ xa sử dụng HTTP POST
$.getScript(url,callback) Tải và thực thi 1 JavaScript file
82. ❑ Form chứa thể loại tin và loại tin
$(document).ready (function (){
$("#loaitin").load("layloaitin.php","idTL="+$("#theloai").val());
$("#theloai").change(function(){
$("#loaitin").load("layloaitin.php","idTL="+this.value);
});
});
84