Cơ chế truyền nhận dữ liệu

Download Report

Transcript Cơ chế truyền nhận dữ liệu

Phần 2 :
PHP & MySQL
1
Nội dung
1. Form & Cơ chế truyền dữ liệu
2. Kỹ thuật gửi tập tin
3. Kết nối dữ liệu
2
Form và Form Field
Cơ chế Truyền và Nhận dữ liệu giữa các trang web
Truyền/Nhận qua Phương thức GET
Truyền/Nhận qua Phương thức POST
Một số ví dụ
Nội dung 5
FORM & CƠ CHẾ TRUYỀN DỮ
LIỆU
3
Nội dung 5.1
FORM & FORM FIELD
4
Form và Form Field
• Là container chứa các thành phần nhập liệu khác.
<FORM NAME=“…” ACTION=“…” METHOD=“…”>
<!-- các thành phần của Form -->
</FORM>
Các thuộc tính của <FORM>
NAME : tên FORM
ACTION : chỉ định trang web nhận xử lý dữ liệu từ FORM này
khi có sự kiện click của button SUBMIT.
METHOD : Xác định phương thức chuyển dữ liệu (POST, GET)
5
Các thành phần của Form
• Gồm các loại Form Field sau:
–
–
–
–
–
–
–
–
–
–
–
–
6
Text field
Password field
Hidden Text field
Check box
Radio button
File Form Control
Submit Button, Reset Button, Generalized Button
Multiple-line text field
Label
Pull-down menu
Scrolled list
Field Set
Thẻ <input>
<INPUT
TYPE
= “KiểuLoại”
NAME
= string
VALUE
= string
…………
>
• Type:
– text / password/ radio/ checkbox
– hidden
– submit / button
7
Thẻ <select>
<SELECT name=“??” multiple>
<optgroup label=“string”>
<option value=“”> XYZ </option>
<option value=“” selected> 123 </option>
</optgroup>
……
</SELECT>
• Type:
– Combobox
– Listbox
8
Nội dung 5.2
CƠ CHẾ TRUYỀN NHẬN DỮ
LIỆU
9
Cơ chế truyền nhận dữ liệu
?
Cơ chế truyền nhận dữ liệu
• Trang web nhập dữ liệu :
– Sử dụng đối tượng <form>
– 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
<FORM ACTION=“URL” METHOD=“GET/POST”>
…
<input type=“submit” value=“Xử lý”>
</FORM>
 Trang web nhận dữ liệu (URL): Sử dụng các biến toàn cục của PHP
– $_POST[“FieldName”]
– $_GET[“FieldName”]
– $_REQUEST[“FieldName”]
Cơ chế truyền nhận dữ liệu – Trang web nhập liệu
timSach.php
<html>
<body>
<h1>Tìm sách</h1>
<form action="xlTimSach.php" Method="GET" >
Từ khóa : <input type="text" name="txtTukhoa"/>
<input type="submit" value="Tìm"/>
</form>
</body>
</html>
Cơ chế truyền nhận dữ liệu – Trang web nhập liệu
xltimSach.php
<html>
<body>
<?php
$sTukhoa = $_REQUEST["txtTukhoa"];
?>
<h1>Tìm sách</h1>
Từ khóa tìm sách là : <?php echo $sTukhoa; ?>
<br />
Kết quả tìm là :
</body>
</html>
Cơ chế truyền nhận dữ liệu – Trang web nhập liệu
xuly.php
<html>
<body>
<form action="xuly.php" Method="GET" >
Từ khóa : <input type="text"
name="txtTukhoa"/>
<input type="submit" value="Tìm"/>
</form>
<?php
$sTukhoa = $_REQUEST["txtTukhoa"];
if (isset($sTukhoa))
{
print "Từ khóa tìm sách là :
$sTukhoa";
echo "<br>Kết quả tìm là : ";
}
?>
</body>
</html>
Truyền/Nhận qua Phương thức GET
• Tham số truyền đi qua địa chỉ URL
– http://domain/pathfile?fieldname1=value1&fieldname2=value2
– Ví dụ:
• http://localhost/xuly.php?txtTukhoa=PHPHost
• Nhận dữ liệu thông qua biến toàn cục của
PHP
– $_GET[“FieldName”]
– $_REQUEST[“FieldName”]
Phương thức GET – Ưu khuyết điểm
• Khuyết điểm
– Không thích hợp để truyền dữ liệu có tính bảo mật (password)
– Dung lượng Dữ liệu truyền đi có giới hạn
– URL submit bằng phương thức GET được lưu lại trên server
• Ưu điểm
– Người dùng có thể bookmark địa chỉ URL
– Người dùng có thể Giả lập phương thức GET để truyền dữ liệu
mà không cần thông qua FORM
Ví dụ
File: GET.HTM
<HTML>
<HEAD>
<TITLE>Input data</TITLE>
</HEAD>
<BODY>
<IMG SRC=“images/N72.jpg”><br>
<A HREF=‘chitiet.php?Ma=N72’>Xem chi tiết</A>
</BODY>
</HTML>
Ví dụ (tt)
File: CHITIET.PHP
<HTML>
<HEAD>
<TITLE>Input data</TITLE>
</HEAD>
<BODY>
<?php
echo "Ma dien thoai la " . $_GET["Ma"];
?>
</BODY>
</HTML>
Truyền/Nhận qua Phương thức POST
• Tham số truyền đi được ẩn bên trong
FORM
• Nhận dữ liệu thông qua biến toàn cục của
PHP
– $_POST[“FieldName”]
– $_REQUEST[“FieldName”]
Phương thức POST – Ưu khuyết điểm
• Ưu điểm
– Bảo mật hơn phương thức GET
– Không giới hạn dung lượng dữ liệu truyền đi
• Khuyết điểm
– Kết quả trang web trả về không thể bookmark
– Có thể gây ra lỗi nếu người dùng muốn quay lại trang kết quả
(nhấn nút Back hoặc Refresh) do bị expired
– Dữ liệu có thể không truyền đi được do vấn đề về security
Cơ chế Upload File
Thiết kế Form để Upload tập tin
Mảng $_FILES và xử lý tập tin upload trên server
Vấn đề quyền truy cập tập tin trên server
Nội dung 6
KỸ THUẬT GỬI TẬP TIN
21
Cơ chế Upload File
Webserver
Yêu cầu gọi trang xlupload.php
file
Internet
or Intranet
Disk
driver
PHP
Temp
Website
ABC
Di chuyển / Sao chép
22
Thiết kế Form để Upload File
• Thiết lập thuộc tính Form
– Method = POST
– Enctype = multipart/form-data
uploadForm.php
23
Mảng $_FILES
• Là một mảng 2 chiều, chứa tập hợp các thông tin liên
quan đến các tập tin được upload lên web-server trong
một lần gọi dịch vụ web.
fileAssigment1
fileAssigment2
fileAssigment3
fileAssigment4
fileAssigment5
fileAssigment1
$_FILES[……]
24
fileAssigment2
fileAssigment3
fileAssigment4
fileAssigment5
……
……
……
……
……
……
……
……
……
……
……
……
……
……
……
……
……
……
……
……
……
……
……
……
……
Mảng $_FILES
$_FILES[……]
fileAssigment1
…..
error
……
Lỗi phát sinh khi truyền tập tin lên server
VD: 0, 1, 2
name
……
Tên file và phần mở rộng của file
VD: 9912001.png
size
……
Kích thước của file (tính theo Byte)
VD: 4500
tmp_name
……
type
……
25
Đường dẫn lưu tạm tập tin upload trên server
VD: c:\xamp\tmp\phpA897x0.tmp
Kiểu của file theo chuẩn MINE
VD: image/png
Xử lý tập tin upload trên server
• Sau khi tập tin đã được truyền xong cho server :
–
–
–
–
Kiểm tra lỗi
Kiểm tra ràng buộc (kích thước, kiểu tập tin)
Đặt tên mới cho tập tin (nếu cần)
Sao chép / di chuyển tập tin về thư mục Website
• Một số hàm
boolean is_uploaded_file(string filePathname)
boolean copy(string filePathname, string dest)
boolean move_uploaded_file(string filePathname, string dest)
26
uploadForm.php
uploadManager.php
27
28
Vấn đề về quyền truy cập File
Cấp quyền cho thư mục /upload
PHP Warning:
move_uploaded_file(upload/14.jpg)
[function.move-uploaded-file]:
failed to open stream: Permission
denied in.
Account
IUSR_XXX
Lưu ý :
• Chỉ cấp quyền ghi cho thư mục cần thiết
• Không cấp quyền ghi cho thư mục WebRoot
29
30
Nội dung 7
KẾT NỐI DỮ LIỆU MYSQL
31
Các bước thao tác CSDL trong PHP
1.
2.
3.
4.
5.
32
Kết nối với CSDL
Xây dựng câu truy vấn dữ liệu
Thực thi câu truy vấn
Xử lí kết quả trả về từ câu truy vấn SELECT
Ngắt kết nối với CSDL
1. Tạo Kết nối CSDL
Connection
Application
Database
• Kết nối MySQL và Chọn CSDL
resource mysql_connect(string host, string LoginName, string password)
int mysql_select_db(string dbName, resource connection)
<?php
$connection = mysql_connect(“localhost",“root”,“root");
mysql_select_db(“TestDB", $connection);
?>
33
2. Xây dựng câu truy vấn (tt)
SQL
Ví dụ
INSERT
strSQL = “ INSERT INTO Users (UserName, Password) VALUES (‘admin',‘123')“
DELETE
strSQL = “ DELETE FROM Users WHERE UserName = ‘lvminh’ “
UPDATE
strSQL = “ UPDATE Users SET Password = ‘abc' WHERE UserName = ‘admin’ ”
SELECT
strSQL = “ SELECT * FROM Users WHERE UserName = ‘admin’ ”
$sUserName = “admin”;
$sPassword = “123”;
 $strSQL ?
34
SELECT
FROM
WHERE
Group by
Order by
HAVING
35
[Liệt kê thuộc tính]
[Danh sách các bảng]
[ĐK Kết+lọc]
[Thuộc tính Gom nhóm]
[Thuộc tính sắp thứ tự]
[ĐK trên nhóm]
3. Thực thi câu truy vấn
011010011 Connection 011010011
Application
Database
Query
resource mysql_query(string SQL_cmd, resource connection)
<?php
$strSQL = “INSERT INTO Users (UserName, Password) VALUES (‘admin',‘123‘)”;
mysql_query($strSQL);
?>
Insert
Delete
Update
<?php
$strSQL = “SELECT * FROM Users”;
$result = mysql_query($strSQL);
?>
36
Select
4. Xử lý kết quả trả về
• Hiển thị dữ liệu trả về
UserName
Password
A
AA
B
BB
C
CC
D
DD
…
…
X
XX
– Truy cập đến từng FIELD
Y
YY
echo $row[“UserName”];
Z
ZZ
– Sử dụng hàm
$row = mysql_fetch_array($result)
– Số lượng FIELD
$num = mysql_num_fields($result);
Hoặc
echo $row[0];
37
cursor
Ví dụ:
CSDL BookstoreDB – Bảng T_Users
Xuất records từ CSDL ra trang HTML
5. Ngắt kết nối dữ liệu
bool mysql_close(resource connection) ;
Tự động thực thi khi kết thúc mã lệnh nhờ cơ chế tự động
thu rác (garbage collector) – PHP4,5
38
39
Một số vấn đề - MySQL &
Font Unicode
• Font UNICODE
Encode
Decode
<?php
mysql_query(“set names ‘utf-8’”);
?>
40
offset
Phân
trang dữ liệu
rowsPerPage
numRows
maxPage
pageNum
41
Phân trang dữ liệu
• Trường hợp dữ liệu lấy về có quá nhiều mẫu tin (hiển thị bảng quá
dài)
• Chia dữ liệu hiển thị trên nhiều trang
– Tổng số kết quả trả về:
$numRows
– Số kết quả hiển thị trên 1 trang:
– Tổng số trang hiển thị:
$rowsPerPage
$maxPage
$maxPage = ceil($numRows / $rowsPerPage);
– Số thứ tự trang hiển thị:
$pageNum = 1,2,…
– Chỉ số kết quả bắt đầu trong trang thứ $pageNum:
$offset = ($pageNum - 1) * $rowsPerPage;
42
Phân trang dữ liệu (tt)
• Các bước thực hiện phân trang
– Tính các thông số phân trang ($rowsPerPage, $pageNum,
$offset)
– Lấy thông tin cần hiển thị ($numRows)
– Hiển thị thông tin của trang hiện tại ($offset, $rowsPerPage)
– Tạo liên kết chỉ đến các trang ($maxPage $pageNum)
– Xem Ví dụ
(1) Select * From T_Book
(2) Select * From T_Book LIMIT $offset, $rowsPerPage
43