Bài giảng Lập trình Web: Chương 5.2 do GV. Trần Công Án biên soạn cung cấp cho người đọc các kiến thức: PHP là gì, cú pháp cơ bản, hàm (Function), lập trình hướng đối tượng (OOP), PHP và Form, MySQL và PHP, cookie và session.
Trang 1CT428 Lập Trình Web
Chương 5 PHP & MySQL (PHP)
Giảng viên: Trần Công Án (tcan@cit.ctu.edu.vn)
Bộ môn Mạng máy tính & Truyền thông
Khoa Công Nghệ Thông Tin & Truyền Thông
Đại học Cần Thơ
2013 – 2014
Trang 2PHP
Trang 4PHP là gì?
PHP Là Gì?
I PHP: Hypertext PreProcessor (trình tiền xử lý siêu văn bản).
I Là một ngôn ngữ script phía server : được thực thi phía server và trả kết quả ( là 1 trang web HTML ) về cho browser.
I Sự thực thi PHP script không phụ thuộc vào web browser.
I Trình thông dịch PHP là phần mềm mã nguồn mở, miễn phí
I Được hỗ trợ bởi hầu hết các web server (Apache, IIS, ) và hệ điều hành thông dụng (Windows, Linux, MacOS, ).
I Thường thực hiện các xử lý hướng nghiệp vụ.
I Một tập tin PHP có phần mở rộng là php
Trang 5PHP là gì?
Cơ Chế Hoạt Động
database server web browser Internet/Intranet
web server (www.abc.com)
Request: www.abc.com/login.php (1)
(2)
(3) (3’)
(4) (5) Response: dynamic webpage
Trang 7PHP là gì?
Cơ Chế Hoạt Động – Ví Dụ
Trang 8PHP là gì?
Download Các Chương Trình Cần Thiết
I Apache (Web server):
Trang 9PHP là gì?
Giao Diện Chương Trình XAMPP
I Giao diện chương trình XAMPP cho phép khởi động, dừng và cấu hình Apache và MySQL.
Trang 11I Qui ước, cú pháp của PHP tương tự ngôn ngữ C và JavaScript.
I Một câu lệnh kết thúc bằng dấu ; và có thể nằm trên nhiều dòng.
I Các lệnh không phân biệt chữ hoa, chữ thường.
I Ghi chú cũng tương tự C và JS: gồm ghi chú 1 dòng ( // ) và nhiều dòng ( /* */ )
Trang 12Cú pháp cơ bản
Biến và kiểu dữ liệu
Biến Và Kiểu Dữ Liệu
I Kiểu dữ liệu: boolean (bool), integer (int), float, double, string.
I Kiểu dữ liệu phức: array, Object.
I Các kiểu đặc biệt: resource (3rd-party resources, e.g DB), NULL.
I Chú ý: Các giá trị tương đương false: 0, 0.0, chuỗi rỗng, “0”,
mảng rỗng, NULL.
Trang 13Cú pháp cơ bản
Biến và kiểu dữ liệu
Biến Và Kiểu Dữ Liệu
I Biến:
I Bắt đầu bằng $
I Không cần khai báo biến – biến sẽ được tạo ở lần đầu gán giá trị.
I Kiểu biến sẽ được tự động gán, tùy vào dữ liệu của nó.
I Phân biệt chữ hoa, chữ thường.
I Phạm vi biến:
I Cục bộ: khai báo trong một hàm, chỉ t/xuất được bên trong hàm đó.
I Toàn cục: khai báo bên ngoài các khối lệnh, có thể t/cập từ bất kỳ vị trí nào trong chương trình (trong hàm phải dùng từ khóa global ).
Trang 14Cú pháp cơ bản
Biến và kiểu dữ liệu
Biến Và Kiểu Dữ Liệu
I Khai báo bên trong hàm (cục bộ)
I Giá trị sẽ được lưu lại cho những lần gọi tiếp theo.
I Truy vấn kiểu dữ liệu của một biến: gettype(var )
I Kiểm tra biến và kiểu dữ liệu của biến: is_bool(), is_int(), is_float(), is_double(), is_string(), is_object(),
is_array(), is_numeric(), is_resource(), is_null(), isset(), empty().
Trang 15Cú pháp cơ bản
Biến và kiểu dữ liệu
Biến Và Kiểu Dữ Liệu – Ví Dụ
Page 1 of 1/Applications/XAMPP/xamppfiles/htdocs/LTW428/datatype.php
Trang 16Cú pháp cơ bản
Biến và kiểu dữ liệu
Biến Toàn Cục – Ví Dụ
Page 1 of 1/Applications/XAMPP/xamppfiles/htdocs/LTW428/global-variable.php
Trang 17Cú pháp cơ bản
Biến và kiểu dữ liệu
Biến Tĩnh – Ví Dụ
Page 1 of 1/Applications/XAMPP/xamppfiles/htdocs/LTW428/static-variable.php
Trang 19Cú pháp cơ bản
Chuỗi ký tự
Chuỗi Ký Tự
I Một chuỗi ký tự có thể đặt trong dấu nháy đơn, kép hoặc heredoc.
I Dấu nháy đơn và heredoc: các ký tự escape sẽ không được thông
dịch.
Page 1 of 1/Applications/XAMPP/xamppfiles/htdocs/LTW428/string-specify.php
<html>
1
<body>
2 <?php /* string-specify.php */
3 $name = "An"; 4
$s1 = "My name is: \"$name\'"; 5
$s2 = 'My name is: \"$name"'; 6
$s3 = <<<_END 7
My name is: \"$name"
8_END; 9 echo $s1, "<br>"; //My name is: "An\' 10
echo($s2 "<br>"); //My name is: \"$name"
11 echo($s3 "<br>"); //My name is: \"An"
12 ?>
Trang 20I Mảng + kích thước: $arr_name = array(n );
I Khai báo và khởi tạo: $arr_name = array(val1, val2, )
I Gán giá trị trực tiếp cho các phần tử của mảng:
$arr_name [] = value ;
$arr_name [] = value ;
.
$arr_name [index ] = value ;
$arr_name [index ] = value ;
Trang 22Cú pháp cơ bản
Mảng (Array)
Duyệt Mảng Bằng Lệnh foreach
/Users/tcan/Dropbox/Bo mon/Lap t…N/Ch5.1 - PHP/src/test-array.php
foreach ($array as $value) {
foreach ($array as $key => value) { 23
statements;
24 } 25
/Users/tcan/Dropbox/Bo mon/Lap t…N/Ch5.1 - PHP/src/test-array.php
$arr = array('a'=>4, 'c'=> 6, 'b'=>8);
10 foreach($arr as $key => $val ) { 11
echo $key ":" $val "; "; 12
} //output: a:4; c:6; b:8;
13
I Ngoài ra, ta có thể duyệt các phần tử của mảng dùng vòng lặp
thông qua chỉ số của các phần tử.
Trang 23I array_push($arr, $element ): thêm p/tử vào cuối mảng.
I array_pop($arr ): xóa phần tử ở cuối mảng.
I array_shift($arr ): xóa phần tử ở đầu mảng.
Sinh viên tự xem thêm: mảng nhiều chiều và con trỏ mảng
Trang 24Cú pháp cơ bản
Lệnh echo và hàm print
Lệnh echo và Hàm print
I Cả hai đều được sử dụng để xuất 1 chuỗi về cho browser
I Lệnh echo: echo (str ); hoặc echo str [, str ];
echo ( "Hello " $name); hoặc echo "Hello " ,$name;
I Hàm print: print(str ); hoặc print str ;
print ( "Hello " $name); hoặc print "Hello " $name;
I Vì echo là một lệnh nên sẽ thực hiện nhanh hơn hàm print
I Hàm print trả về true còn lệnh echo không có kết quả trả về.
($grade > 5) ? print ( "pass" ) : print ( "fail" );
echo ($grade > 5) ? "pass" : "fail" ;
Trang 25Cú pháp cơ bản
Cấu trúc điều khiển
Cấu Trúc Điều Khiển
I Cấu trúc điều khiển của PHP gần như tương tự JS (xem Ch4):
I Rẽ nhánh: if, if else, if elseif, ?,
switch case
I Lặp: while, do while, for, foreach
I Các chỉ thị break và continue
Trang 26I Tên hàm không phân biệt chữ hoa, chữ thường.
I Hàm có thể có giá trị trả về (dùng lệnh return ) hay không có.
Trang 27Hàm (Function)
Cú pháp
Ví Dụ – Hàm Giải Phương Trình Bậc 1/Applications/XAMPP/xamppfiles/htdocs/LTW428/function-ptb1.php Page 1 of 1
Trang 28Hàm (Function)
Truyền đối số cho hàm
Hàm – Truyền Tham Chiếu
I Truyền tham số bằng giá trị: hàm không
thay đổi được giá trị của đối số.
I Truyền tham số bằng tham chiếu: hàm có
thể thay đổi giá trị của đối số. Page 1 of 1
/Users/tcan/Dropbox/Bo mon/Lap t…PHP/src/function-pass-by-ref.php
<?php 1 function &func() { 2
static $count = 0; 3
$count++;
4 return $count; 5
} 6 7 $var1 =& func();
8 echo $var1; //output: 1 9
$var2 = func();
10 echo $var2; //output: 2 11
echo $var1; //output: 2 12
13 func();
14 func();
15 echo $var1; //output: 4 16
echo $var2; //output: 2 17
?>
18
Trang 29Hàm (Function)
Gán giá trị mặc nhiên cho đối số của hàm
Hàm – Gán Giá Trị Mặc Nhiên Cho Đối Số
I Đối số của hàm có thể được gán giá trị mặc nhiên: Nếu lời gọi hàm không truyền giá trị cho đối số thì đối số sẽ nhận giá trị mặc nhiên.
Page 1 of 1/Users/tcan/Dropbox/Bo mon/Lap t…PHP/src/function-text-color.php
Trang 30Hàm (Function)
Thao tác với các đối số
Hàm – Thao Tác Với Các Đối Số
I Một số hàm thao tác trên các đối số:
danh sách các đối số.
Page 1 of 1/Users/tcan/Dropbox/Bo mon/Lap t…- PHP/src/function-args-task.php
<?php 1
function foo() { 2
echo func_get_arg($i) ", "; 6
} 7
8
foo(); //output: Number of arguments: 0;
Trang 31Hàm (Function)
Thư viện hàm PHP
Hàm Xử Lý Chuỗi
I [l|r]trim ($str [,$ch ]), addslashes ($str ),
stripslashes ($str ), ucfirst ($str ), ucwords ($str ),
strtolower ($str ), strtoupper ($str ), strlen ($str ),
strcmp ($str1 ,$str2 ), strpos ($str1 ,$str2 ),
str_replace ($oldStr ,$newStr, $str ) strrev ($str ),
explode ($ch [,$str ]), implode ($str [,$ch ])
Page 1 of 1/Users/tcan/Dropbox/Bo mon/Lap t….1 - PHP/src/string-function.php
Trang 32Hàm (Function)
Thư viện hàm PHP
Hàm Toán Học
I abs ($n ), sqrt ($n ), pow ($a, $b ), exp ($x ),
range ($start, $end ), floor ($n ), ceil ($n ),
is_nan ($n ), number_format ($n, $decimal=0,
$dec_point=’.’, $thou_sep =’,’)
Page 1 of 1/Users/tcan/Dropbox/Bo mon/Lap t…- TCAN/Ch5.1 - PHP/src/test.php
Trang 33Hàm (Function)
Thư viện hàm PHP
Hàm Ngày Giờ
I getdate (), date ($format_str ), checkdate ($m, $d, $y ),
time (), date_add ($date, $interval ), date_diff ($date1,
Page 1 of 1/Users/tcan/Dropbox/Bo mon/Lap t…HP/src/function-date-example.php
Trang 34Lập trình Hướng đối tượng (OOP)
Khai báo lớp
OOP – Khai Báo Lớp
I Khai báo lớp:
Page 1 of 1/Users/tcan/Dropbox/Bo mon/Lap t…- PHP/src/class-declaration.php
<?php 1 class <classname> { 2
/* property + method declaration */
3 };
4
?>
5
I Khai báo thuộc tính (properties) tương tự như khai báo biến.
I Khai báo phương thức (methods) tương tự khai báo hàm.
I Thuộc tính truy cập: public | protected | private
I Phương thức/thuộc tính tĩnh (static): static
I Truy xuất p/thức bên trong p/thức: $this ->method ();
I Truy xuất t/tính bên trong p/thức: $this ->property ;
Trang 35Lập trình Hướng đối tượng (OOP)
Khai báo lớp
OOP – Ví Dụ Khai Báo Lớp/Users/tcan/Dropbox/Bo mon/Lap t…TCAN/Ch5.1 - PHP/src/Person.php Page 1 of 1
Trang 36[CT428] Chương 5.1 – PHP
Lập trình Hướng đối tượng (OOP)
Tạo đối tượng
OOP – Tạo Đối Tượng
I Cú pháp: $<object_name> = new <class_name>;
I Truy xuất t/tính của 1 đối tượng: $object_name ->property ;
I Truy xuất p/thức của 1 đối tượng: $object_name ->method() ;
Page 1 of 1/Users/tcan/Dropbox/Bo mon/Lap t…lass-obj-declaration-example.php
Trang 37Lập trình Hướng đối tượng (OOP)
Tạo đối tượng
OOP – Các Thành Phần Tĩnh
I Là “thành phần chung” của tất cả các đối tượng của một lớp.
I Có thể truy xuất thông qua lớp (không cần tạo đối tượng).
I Truy xuất các thành phần tĩnh:
I Bên trong lớp:
I Thuộc tính: self:: $property ;
I Phương thức: self:: method() ;
I Bên ngoài lớp:
I Thuộc tính: class_name ::$property ;
I Phương thức: class_name ::method() ;
Trang 38Lập trình Hướng đối tượng (OOP)
Trang 39<?php 1 class Person { 2
public $id; 3
public $name; 4
public $dob; 5
6 protected static$count = 0; 7
8 function construct($name) { 9
$this->id = ++self::$count; 10
$this->name = $name; 11
$this->dob = @date("d/m/Y");
12 } 13
14 function displayInfo() { 15
echo $this->id " - " $this->name " - " $this->dob; 16
} 17
18 function set($id, $name, $dob) { 19
$this->id = $id; 20
$this->name = $name; 21
$this->dob = $dob; 22
} 23
} 24 25 $tom = new Person("Mr Tom");
26 $tom->displayInfo();
27 //output: 1 - Mr Tom - 07/03/2014 28
29 $jerry = new Person("Ms Jerry");
30 $jerry->dob = "01/01/2002"; 31
$jerry->displayInfo();
32 //output: 2 - Ms Jerry - 01/01/2002 33
34 $test = @new Person(); //warning 35
$test->displayInfo();
36 //output: 3 - - 07/03/2014 37
38
?>
39
Trang 40Lập trình Hướng đối tượng (OOP)
Thừa kế
Thừa kế
I Khai báo thừa kế: dùng từ khóa extends
I Lớp con sẽ “thừa kế” tất cả các thành phần của lớp cha Tuy nhiên,
nó chỉ được truy xuất đến các thành phần public và protected
I Truy cập đến các thành phần của lớp cha từ lớp con:
parent:: property hoặc parent:: method()
I Lớp con có thể “khai báo chồng” (cùng tên) các thành phần của lớp cha.
Trang 41Lập trình Hướng đối tượng (OOP)
Thừa kế
/Users/tcan/Dropbox/Bo mon/Lap t…TCAN/Ch5.1 - PHP/src/Student.php
<?php 1 require 'Student.php'; 2
3 $tom = new Student("Mr Tom");
4 $tom->displayInfo();
5 //output:
6 // 1 - Mr Tom - 07/03/2014 - 07/03/2014 7
8 $tom->set(, $tom->name, "01/02/2002");
9 $tom->displayInfo();
10 //output:
11 // 7 - Mr Tom - 01/02/2002 - 07/03/2014 12
?>
13
Trang 42Lập trình Hướng đối tượng (OOP)
Một số vấn đề khác trong OOP
Một Số Vấn Đề Khác Trong OOP
I Lớp ảo (abstract class).
I Ngăn chặn đè phương thức (final method).
I Giao diện (interface) và cài đặt giao diện (implementation).
I Xuất thông tin tự động cho đối tượng ( toString()).
I Các cách chèn đoạn mã trong các tập tin khác vào.
Trang 43<form action=" " method=" ">
1 <! form controls >
I method: POST | GET
I POST: dữ liệu của form chèn bên trong yêu cầu HTTP.
I GET: dữ liệu của form kèm theo URL (max 255B – 8K).
Trang 44PHP và Form
Lấy dữ liệu gửi về từ form
Lấy Dữ Liệu Gửi Về Từ Form
$_REQUEST (cả hai p/thức). Page 1 of 1/Applications/XAMPP/xamppfiles/htdocs/LTW428/login.html
Trang 45PHP và Form
Lấy dữ liệu gửi về từ form
Lấy Dữ Liệu Gửi Về Từ Form
Page 1 of 1/Applications/XAMPP/xamppfiles/htdocs/LTW428/ck_login.php
Trang 46PHP và Form
Lấy dữ liệu gửi về từ form
Kiểm Tra Sự Tồn Tại Của Dữ Liệu
I Kiểm tra sự tồn tại của một dữ liệu gửi từ form: hàm isset()
Page 1 of 1/Applications/XAMPP/xamppfiles/htdocs/LTW428/ck_login.php
Trang 47MySQL và PHP
Truy Xuất Dữ Liệu MySQL Trong PHP
I Việc truy xuất dữ liệu MySQL từ PHP bao gồm các bước:
1 Tạo nối kết đến MySQL.
2 Chọn CSDL.
3 Tạo câu truy vấn (DDL hoặc DML).
4 Thực thi câu truy vấn.
5 Nhận dữ liệu, xử lý dữ liệu và xuất ra trang web.
6 Lặp lại các bước 4 và 6 cho đến khi truy cập hết các dữ liệu cần thiết.
7 Đóng nối kết.
Trang 48MySQL và PHP
Tạo nối kết
Tạo Nối Kết
I Tạo nối kết:
resource mysql_connect ( "host_name" , "username" , "password" )
I host_name: địa chỉ của MySQL server.
I username: tên người dùng CSDL.
I password: mật khẩu người dùng CSDL.
I Thông thường, các thông số nối kết CSDL được lưu trong 1 tập tin riêng (.inc hoặc php) và được chèn vào tập tin PHP cần truy xuất
Trang 49MySQL và PHP
Tạo nối kết
Tạo Nối Kết
Page 1 of 1/Applications/XAMPP/xamppfiles/htdocs/LTW428/mysql-connect.php
<?php 1 /* connection.inc */
2 $hostname = "localhost"; 3
$username = "root"; 4
$password = ""; 5
$database = "ltweb"
6
?>
7
Trang 50MySQL và PHP
Tạo nối kết
Kiểm Tra Và Xử Lý Lỗi
I Các cách kiểm tra và xử lý lỗi:
Trang 52MySQL và PHP
Tạo và thực thi câu truy vấn CSDL
Tạo Và Thực Thi Câu Truy Vấn
I Truy vấn CSDL: resource mysql_query ( "query" [,$connection])
I query: câu truy vấn.
I $connection: đối tượng connection.
Page 1 of 1/Applications/XAMPP/xamppfiles/h…LTW428/select-classics-table.php
Trang 53MySQL và PHP
Truy xuất dữ liệu trả về từ câu truy vấn
Truy Xuất Dữ Liệu Của Câu Truy Vấn
I Các hàm sử dụng để truy xuất dữ liệu trả về trong câu truy vấn:
I mysql_num_rows ($q_result) : đếm số mẩu tin trong $q_result.
I mysql_fetch_fields ($q_result) : đếm số lượng trường.
I mysql_result ($q_result, $row_index, "col_name" ) : lấy giá trị 1 trường.
I mysql_fetch_row ($q_result) : trả về 1 mảng với giá trị các phần tử
là giá trị của các trường trong bảng.
I mysql_fetch_array ($q_result) : tương tự hàm mysql_fetch_row với chỉ số mảng là tên trường.
Trang 54MySQL và PHP
Truy xuất dữ liệu trả về từ câu truy vấn
Truy Xuất Dữ Liệu Của Câu Truy Vấn – VD
Page 1 of 1/Applications/XAMPP/xamppfiles/h…ocs/LTW428/connect-select-db.php
Trang 55MySQL và PHP
Truy xuất dữ liệu trả về từ câu truy vấn
mysql_result() – Ví Dụ
Page 1 of 1/Applications/XAMPP/xamppfiles/htdocs/LTW428/mysql-result.php
Trang 56MySQL và PHP
Truy xuất dữ liệu trả về từ câu truy vấn
mysql_fetch_row() – Ví Dụ
Page 1 of 1/Applications/XAMPP/xamppfiles/htdocs/LTW428/mysql-fetch-row.php
Trang 57MySQL và PHP
Truy xuất dữ liệu trả về từ câu truy vấn
mysql_fetch_array() – Ví Dụ
Page 1 of 1/Applications/XAMPP/xamppfiles/h…ocs/LTW428/mysql-fetch-array.php