PHP nâng cao

Download Report

Transcript PHP nâng cao

Chương 2:
Ngôn ngữ kịch bản PHP
(phần tiếp theo)
6- Cookie
7- Session
8- Xử lý … Form
9- Gởi mail trong PHP
10- OOP trong PHP
Trainer: Ngô Đình Thưởng
Faculty of Information Technology
Danang College of Education
1
6- Cookie
a- Cookie là mẫu tin nhỏ, có cấu trúc, dạng text lưu ở máy
client khi truy cập một website (nếu kịch bản trong trang đó
có chức năng thiết lập cookie).Cookie được lưu ở thư mục :
C:\Documents and Settings\Administrator\Cookies
Ví dụ đây là một mẫu cookie khi viếng trang www.ibm.com
UnicaNIODID
4yZ3oOSlqrO-WrSL3kV
ibm.com/
1600
1465922944
30475811
543399952
30113713
*
(tên tệp ndt@ibm[1])
ndt là PC name của client
2
b- Thiết lập cookie
Cú pháp: setcookie(name, value, expire[, path, domain]);
Trong PHP, câu lệnh setcookie phải đặt trước thẻ <html>
Ví dụ :
Trang CreateCookie.php
<?php
$expire=time()+60*60*24*30; // hết hạn sau 30 ngày
setcookie(“vhh", “Vu Huy Hung", $expire);
echo "Cookie has been created!";
?>
Hàm time() trả về số giây đã trôi qua bắt đầu từ 01-Jan-1970
Một dạng thời gian dùng trong hệ điều hành Unix
3
d- Đọc cookie
Tệp ReadCookie.php
<html>
<body>
<?php
if (isset($_COOKIE[“vhh"]))
echo "Welcome " . $_COOKIE[“vhh"] . "!<br />";
else
echo "Welcome guest!<br />";
?>
</body>
</html>
$_COOKIE[] là một biến mảng toàn cục
Hàm isset() kiểm tra một biến đã được khai báo, khởi gán chưa
4
7- Session
a- Session là một phiên làm việc kể từ khi client truy cập vào
website cho đến khi đóng trình duyệt hay abandon(kết thúc)
phiên.
PHP đưa ra biến toàn cục $_SESSION[] để lưu trữ thông tin,
và biến này có thể truy cập từ mọi trang PHP trong phiên.
b- Khai báo và thiết lập Session
session_start();
// hàm session_start() phải đặt trước thẻ <html>
$_SESSION['user']="Vo Huy Hung";
Ví dụ : Trang Save_Session.php
<?php
session_start();
$_SESSION['user']="Vo Huy Hung";
header("Location:Read_Session.php");
?>
Hàm header() chuyển hướng trình duyệt đến URL sau Location
5
c- Truy cập biến Session
Trang : Read_Session.php
<?php session_start(); ?>
<html><body>
<?
if(isset($_SESSION['user']))
$mess=$_SESSION['user']." đã đăng nhập";
else ì
$mess=“Bạn chưa đăng nhập hệ thống!";
echo $mess;
?>
</body></html>
d- Xóa bỏ biến Session
unset($_SESSION[‘tên']);
session_destroy();
Đây là các câu lệnh dùng khi Logout, tuy nhiên khi session_destroy()
phải lưu ý, vì có xóa những biến Session của hệ thống không?
6
Tóm tắt:
Thiết lập
session_start(); $_SESSION[‘tên’]=giá_trị;
Truy cập:
session_start(); $biến = $_SESSION[‘tên’];
Xóa giá trị đã thiết lập : unset($_SESSION[‘tên’]);
Hủy bỏ toàn bộ biến $_SESSION[]: session_destroy();
Session có rất nhiều ứng dụng, ví dụ như lưu trữ thông tin về
giỏ hàng trong E-commerce
7
8- Nhận thông tin gởi từ Form
Giả sử method của Form là POST => server sẽ nhận được thông
qua biến toàn cục $_POST[‘tên’], với ‘tên’ là giá trị của thuộc tính
name của phần tử trong form.
Cú pháp Form
<form action=tệp_PHP method=post>
<!- - các phần tử của form - ->
</form>
Biệt lệ : Các checkbox cùng tên
-Phải đặt cùng tên như là một phần tử của mảng động, ví dụ box[]
-Khi truy cập ở server chỉ lấy phần tên, ví dụ $_POST[‘box’], và
trả về là một mảng gồm các value được chọn.
-Các trường hợp khác $_POST là một chuổi.
-Có thể dùng $_REQUEST thay cho $_POST và $_GET.
-Lưu ý: w3schools.com gọi chúng là Function, có lẽ không đúng!
8
Ví dụ: Tệp DangKy.htm
<form action=XuLy.php action=post>
Họ tên: <input type=text name=ht>
Đăng ký:<input type=checkbox name=hp[]>Java<br>
<input type=checkbox name=hp[]>C Pattern<br>
<input type=checkbox name=hp[]>Trí tuệ nhân tạo<br>
<input type=submit value=“Đăng ký”>
</form>
Tệp XuLy.php
<?php
$hoten=$_POST[‘ht’];
$hocphan=$_POST[‘hp’]; // trả về một mảng
$str=“Sinh viên :”.$hoten.” đã đăng ký:<br>”;
while(list($k,$v)=each($hocphan) $str+=$k.”-”$v.”<br>”;
echo $str;
?>
9
DEMO
9- Gởi mail trong PHP
Cú pháp:
mail(to,subject,message,headers,parameters)
Ý nghĩa các tham số:
- to, subject, message : như ý nghĩa các text box khi soạn mail
- headers :tùy chọn, có thể sử dụng Bcc, Cc
- parameter: tùy chọn, các thông số về trình soạn, gởi mail
Trong phần message: sử dụng ký hiệu \n để xuống dòng.
10
Ví dụ :
Tệp Send_mail.php
<?php
// mình viết thư gởi cho mình
$to = “[email protected]";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = “[email protected]";
$headers = "From: $from";
@mail($to,$subject,$message,$headers); // không cho warning!
echo "Mail Sent.";
?>
Lưu ý:
-người gởi phải có một đia chỉ mail. Theo dõi các kỹ thuật chống spam
của mỗi trình gởi, nhận mail của người nhận!
-Phối hợp với form để soạn thảo một trình gởi mail
-Có thể lập trình để gởi mail đến danh sách các địa chỉ đã lưu trong
CSDL
11
10- OOP trong PHP
a- Đặc điểm OOP trong PHP 5.0 : không cho phép đa kế thừa
b- Khai báo class
Class tên_class{
// khai báo thuộc tính, bản chất là biến dùng trong class
// khai báo các phương thức, bản chất là các hàm. Riêng hàm dựng
// phải cùng tên với tên của class
// sử dụng từ khóa private hay public và protected để xác định chế
// độ truy xuất
}
c- Sử dụng
- Tạo biến đối tượng: $tên_object = new tên_class([giá trị khởi tạo]);
- 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ố]);
12
OOP tập trung vào việc “đóng gói” các phương thức và thuộc tính của
một đối tượng nào đó.
Trong OOP, các thành viên trong một lớp cần phải được xác định xem
chúng có thể được truy xuất từ đâu (tính rõ ràng). Có ba khả năng xảy
ra:
- Chế độ public: Các thành viên nếu được thiết lập ở chế độ này sẽ
được nhìn thấy và truy xuất ở mọi nơi trong chương trình.
- Chế độ private: Các thành viên nếu được thiết lập ở chế độ này sẽ
chỉ được nhìn thấy và truy xuất được ở bản thân lớp định nghĩa thành
viên đó.
- Chế độ protected: Chế độ này sẽ được dùng để giới hạn truy cập tới
các lớp được thừa kế và bản thân lớp định nghĩa thành viên đó.
Với PHP5, 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.
13
Ví dụ đơn giản
Tệp Class1.php
<?php
class hoso{
public $ho_ten;
public $ngay_sinh;
function hoso($hten,$ngsinh){
$this->ho_ten = $hten;
$this->ngay_sinh=$ngsinh;
}
}
echo "Su dung ham constractor<br>";
$hung=new hoso(“Vũ Huy Hùng","25/7/1993");
echo "Họ tên: " . $hung->ho_ten . “, Ngày sinh: " . $hung->ngay_sinh;
?>
14
Ví dụ minh họa các từ khóa private, protected và public
<?php
class MyClass{
public $public = 'Public 1';
// truy xuất mọi nơi  trang
private $private = 'Private 1';
// chỉ t.x được bên trong lớp
protected $protected = 'Protected 1'; // không cho kế thừa,private
}
public function printHello(){
echo $this->public."<br>";
echo $this->protected."<br>";
echo $this->private."<br>";
}
class MyClass2 extends MyClass{
protected $protected = 'Protected2';
}
function printHello(){
echo $this->public."<br>";
echo $this->protected."<br>";
echo $this->private."<br>";
}
// được truy xuất mọi thuộc
// bên trong lớp
// thừa kế từ lớp MyClass
// chồng hàm
// thừa kế từ MyClass
// lấy thuộc tính riêng
// không thừa kế từ MyClass
Xem tiếp trang sau về sử dụng các lớp
15 MyClass và MyClass2
$obj = new MyClass();
echo $obj->public; /
echo $obj->protected; // lỗi: $protected đã bị đặt ở chế độ bảo vệ
echo $obj->private;
// lỗi: $private đã bị đặt ở chế độ riêng tư
$obj->printHello();
// Hoạt động bình thường, do các thuộc tính được triệu gọi bên trong
một phương thức nằm trong lớp.
$obj2 = new MyClass2();
echo $obj->public;
// Chạy tốt
echo $obj2->private;
// Chưa được định nghĩa
echo $obj2->protected; // Gây lỗi
$obj2->printHello();
// Hiển thị Public, Protected2, not Private
?>
16
Mở rộng một lớp
<?php
class hoso{
public $ho_ten = “Vũ Huy Hùng";
public $ngay_sinh = "25/7/1993";
public function setAtt($hoten,$ngaysinh){
$this->ho_ten = $hoten;
$this->ngay_sinh=$ngaysinh;
}
}
class hoso2 extends hoso{
public $noi_sinh=“Phước Sơn"; // bổ sung thuộc tính và hàm
public function in_hoso() {
echo "Họ tên: ". $this->ho_ten.".Ngày sinh: ". $this->ngay_sinh;
echo "Nơi sinh: " . $this->noi_sinh;
}
}
$tuyen=new hoso2;
$tuyen->in_hoso();
?>
// thừa kế mọi t.tính,p.thức của cha
// vì lớp cha có mọi tt,pt cà public
17OOP trong PHP, nhất là các lớp truy cập CSDL.
Trên internet, ta có thể tìm nhiều ví dụ về
Bài thực hành
1- Thử nghiệm và vận dụng các ví dụ
2- Làm lại các ví dụ về Class, nhưng để các lớp ở tệp tin bên ngoài rồi
include vào trang cần thiết.
3- Sinh viên xây dựng một form với đầy đủ các phần tử của form để
gởi dữ liệu cho server, xây dựng trang nhận và in ra các dữ liệu đã
nhận.
Dùng Innova Text Editor để định dạng cho văn bản trong Text Area, từ
server hãy “echo” lại cho client.
Có thể sử dụng các phần mềm tương tự
Xem hướng dẫn sử dụng Innova Text Editor trên trang web của giảng
viên: http://ndtfit.brinkster.net
Lưu ý: khi copy và paste nhớ kiểm tra lại dấu nháy kép (không phù
hợp với IDE của PHP). Các bài giảng chỉ trình bày những vấn đề cơ
bản. Các vấn đề chuyên sâu sẽ được giải quyết trong các bài tập lớn
18
Thank you!
http://ndtfit.brinkster.net
19