Bài 33 - MYSQL PHẦN I - DESIGN CSDL

 

LAB PHP (CB) 12

LÀM VIỆC VỚI HỆ QUẢN TRỊ CSDL MYSQL

(PHẦN I – DESIGN CSDL)

A – LÝ THUYẾT

I – CÁC KHÁI NIỆM CƠ BẢN ĐẦU TIÊN VỀ CSDL

1 – Khởi động chương trình

a)      Khởi động MySQL ở XAMPP Control Panel

Để có thể làm việc được với MySQL trước tiên chúng ta cần phải khởi động MySQL từ XAMPP Control Panel

b)     Truy cập vào hệ thống quản trị CSDL MySQL

Để có thể vào được hệ thống quản trị CSDL MySQL chúng ta tiến hành truy cập theo địa chỉ sau trên trình duyệt: http://localhost/phpmyadmin

2 – Các khái niệm về CSDL

a)      Cơ sở dữ liệu (CSDL)

CSDL có thể hiểu là một cái kho để lưu giữ toàn bộ các thông tin hay còn gọi là dữ liệu

b)     Bảng dữ liệu (TABLE)

Trong CSDL thì có chứa rất nhiều các thông tin hay còn gọi là những mẩu tin, mỗi một mẩu tin hay nhóm mẩu tin dùng để mô tả hay lưu giữ những vấn đề khác nhau. Để có thể quản lý được toàn bộ các mẩu tin này trong CSDL một cách khoa học và hiệu quả, chúng ta sử dụng một bảng dữ liệu dùng để quản lý những mẩu tin có cùng chung một nội dung

Ví dụ

Bảng lưu giữ thông tin sản phẩm

Lưu giữ các thông tin về sản phẩm nào đó như (Tên sản phẩm, giá cả, chủng loại, mầu sắc, mã số của từng sản phẩm,…)

 

Bảng lưu giữ thông tin thành viên

Lưu giữ các thông tin về thành viên như (Tên thành viên, tài khoản đăng ký, mật khẩu, địa chỉ email,…)

c)      Cột dữ liệu (COLUMN)

Cột dữ liệu hay còn gọi là trường dữ liệu là một thành phần tạo nên Bảng dữ liệu. Mỗi một Bảng dữ liệu có chứa các Cột dữ liệu, mỗi Cột này sẽ dùng để lưu giữ một thông tin của một Bảng chứa nhiều thông tin

Ví dụ

Bảng lưu giữ thông tin sản phẩm (SP) điên thoại

Cột mã SP

Cột tên SP

Cột giá SP

Cột seri SP

Cột chi tiết SP

3 – Các thuật ngữ hay sử dụng trong MySQL

a)      NULL: Giá trị cho phép rỗng

b)     AUTO_INCREMENT: Cho phép gia trị tự động tăng dần

c)      UNSIGNED: Phải là số nguyên dương

d)     PRIMARY KEY: Cho phép nó là khóa chính trong bảng

4 - Các kiểu dữ liệu trong MySQL

 

Kiểu dữ liệu

Mô tả

Char

Định dạng chuỗi có chiều dài từ 0 đến 255

Varchar

Định dạng chuỗi có chiều dài từ 0 đến 255

Text

Định dạng chuỗi có chiều dài từ 0 đến 65535

Longtext

Định dạng chuỗi có chiều dài từ 0 đến 4294967215

INT

Định dạng số có chiều dài từ 0 đến 4294967215

Float

Định dạng số thập phân có chiều dài nhỏ

Double

Định dạng số thập phân có chiều dài lớn

Date

Định dạng thời gian theo định dạng YYYY-MM-DD

DateTime

Định dạng thời gian theo định dạng YYYY-MM-DD HH:MM:SS

II – XÂY DỰNG CSDL Ở DẠNG DESIGN

1 – Tạo mới một CSDL

·         Tạo mới một CSDL với tên là hocmysql


·         Phần Collation lựa chọn utf8_unicode_ci để có thể hiển thị tiếng Việt trong CSDL

2 – Tạo mới một bảng dữ liệu

Đầu tiên chúng ta tiến hành tạo mới một bảng dữ liệu có tên là thanhvien với 3 cột dữ liệu cơ bản ban đầu

Bước tiếp theo đó là khai báo tên của các Cột dữ liệu và các thuộc tính dùng để chứa các dữ liệu phù hợp tương ứng

3 – Thêm mới một hoặc nhiều mẩu tin vào trong một Bảng

Để thêm mới một mẩu tin vào Bảng thanhvien vừa khởi tạo, chúng ta lựa chọn Bảng thanhvien bằng cách Click vào chữ thanhvien sau đó chọn tiếp Insert để thêm thông tin của một mẩu tin mới bào gồm (id_thanhvien, tai_khoan, mat_khau) vào trong Bảng

Chú ý: Trường (Cột) id_thanhvien chúng ta có thể để trống, lý do là chúng ta đã lựa chọn thuộc tính AUTO_INCREMENT cho trường này khi chúng ta tạo Bảng nên trường này sẽ được đánh số thứ tự một cách tự động

4 – Sửa thông tin của một hoặc nhiều mẩu tin trong một Bảng

Để sửa lai thông tin của một mẩu tin nào đó chúng ta lựa chọn Bảng (ở dạng danh sách các mẩu tin) chứa mẩu tin cần sửa, sau đó chọn mẩu tin cần sửa bằng cách tích lựa chọn vào ô checkbox trước mẩu tin và sau đó lựa chọn sửa với biểu tượng “chiếc bút”

Để sửa lại thông tin của nhiều mẩu tin một lúc, chúng ta lựa chọn Check All  nằm trong phần Check All / Uncheck All

5 – Xóa hoàn toàn thông tin của một hoặc nhiều mẩu tin trong một Bảng

Để xóa hoàn toàn thông tin của một mẩu tin trong Bảng chúng ta lựa chọn mẩu tin cần xóa bằng cách tích lựa chọn vào ô checkbox trước mẩu tin và sau đó lựa chọn sửa với biểu tượng “dấu X đỏ”

6 – Thêm một Cột (Column) mới vào trong một Bảng dữ liệu có sẵn

Hiện tại Bảng thanhvien đang có 3 cột dữ liệu là (id_thanhvien, tai_khoanmat_khau) để chứa các thông tin tương ứng là (ID của thành viên, Tên tài khoản đăng nhập, Mật khẩu đăng nhập). Bây giờ chúng ta tiến hành thêm một Cột nữa vào Bảng để chứa thông tin về các Quyền truy cập cho từng thành viên. Ví dụ: Admin có quyền cao nhất là 2, còn các thành viên chỉ có quyền là 1

Để có thể thêm vào Bảng một cột trước tiên chúng ta phải lựa chọn Bảng bằng cách Click vào biểu tượng Bảng nằm phí trước tên Bảng (thanhvien). Sau đó chúng ta thực hiện thêm một cột mới như sau:

 

Chú ý: Với After: mat_khau là để Cột mới được tạo phải nằm sau cột mat_khau

Tiếp theo chúng ta tiến hành đặt tên cho Cột mới và quy định các thuộc tính cần thiết cho cột một cách bình thường

Sau khi thêm Cột mới với tên là quyen_truy_cap. Bảng mới của chúng ta sẽ như sau:


B – THỰC HÀNH

I – BÀI TẬP THỰC HÀNH

Bài 1:

            Tạo mới CSDL có tên là appleshop

 

Bài 2:

            Tạo mới Bảng dữ liệu thanhvien bao gồm 3 trường dữ liệu là id_thanhvien, tai_khoan, mat_khau với trường id_thanhvien làm khóa chính và được đánh số tự động

 

Bài 3:

            Thêm một trường dữ liệu mới là quyen_truy_cap vào sau cột mat_khau của Bảng thanhvien

 

Bài 4:

            Thêm 5 mẩu tin thể hiện 5 thông tin của 5 thành viên trong Bảng thanhvien

 

Bài 5:

            Tiến hành sửa mat_khau của thanhvien cuối trong Bảng thanhvien 

 

Bài 6:

            Tiến hành xóa hoàn toàn tài khoản của thanhvien có id_thanhvien = 3 trong Bảng thanhvien

 

Bài 7:

            Tiến hành xóa hoàn toàn CSDL appleshop

 

>>Xem bài trước: Bài 32 - PHP basic buổi 11 - SESSION & COOKIE TRONG PHP



Bài 32 - PHP basic buổi 11 - SESSION & COOKIE TRONG PHP

 



LAB PHP (CB) 11

SESSION VÀ COOKIE TRONG PHP

A – LÝ THUYẾT

I – LÀM VIỆC VỚI SESSION

1 – Định nghĩa Session

Session được hiểu là khoảng thời gian mà người dùng giao tiếp với một ứng dụng bất kỳ hay còn gọi là một phiên làm việc

Một session được bất đầu khi người dùng truy cập vào ứng dụng lần đầu tiên và kết thúc khi người dùng thoát ra khỏi ứng dụng

Mỗi một session hay một phiên làm việc thì được cấp một ID và được lưu trong thư mục thiết lập, trong file php.ini (với tham số session.save_path)

2 – Làm việc với Session

a)      Khai báo phiên làm việc với Session

Để sử dụng hay bắt đầu làm việc với session ta sử dụng cú pháp session_start()

Chú ý: Cú pháp này phải nằm trên tất cả các kịch bản HML cũng như các lệnh in ra màn hình như echo(); print(),…

 

b)     Khởi tạo một Session

Sau khi đã khai báo một phiên làm việc thì tiếp theo chúng ta phải khởi tạo một Session với việc đăng ký một Session Name với cú pháp đăng ký như sau

 

c)      Làm việc với Session

Sau khi đã đăng ký thành công một Session việc tiếp theo đó là khởi tạo cho Session đó một giá trị mà chúng ta mong muốn với cú pháp như sau:

Để hiểu rõ hơn về Session chúng ta tiến hành xem xét một ví dụ như sau:

Ví dụ:

Khởi tạo trang dangky_session.php với nội dung như sau:

Khởi tạo trang thucthi_session.php với nội dung như sau:

Đầu tiên tiến hành chạy file dangky_session.php để đăng ký một Session Name, sau đó chạy file thucthi_session.php để xem kết quả.

 

Chú ý: Nhiều khi chúng ta có thể bỏ qua bước khởi tạo Session và tiến hành gán giá trị cho $_SESSION[“session_name”] luôn cũng được

 

d)     Hủy bỏ một hoặc nhiều Session đã khai báo

Để hủy bỏ một Session đã khai báo trước đó chúng ta sử dụng cú pháp sau:

 

Nếu muốn hủy tất cả các Session đã khai báo chúng ta sử dụng một cú pháp khác như sau:

II – LÀM VIỆC VỚI COOKIE

1 – Định nghĩa Cookie

Cookie là một đoạn dữ liệu được lưu vào đĩa cứng hoặc bộ nhớ của máy người sử dụng. Nó được trình duyệt gửi ngược lên Server mỗi khi Browser tải một trang web từ Server.

Những thông tin được lưu trữ trong cookie hoàn toàn phụ thuộc vào website trên server.

Cookie được tạo ra bởi website và gởi tới browser, do vậy 2 website khác nhau (cho dù cùng host trên 1 server) sẽ có 2 cookie khác nhau gởi tới browser.

Ngoài ra, mỗi browser quản lý và lưu trữ cookie theo cách riêng của mình, cho nên 2 browser cùng truy cập vào 1 website sẽ nhận được 2 cookie khác nhau

 

2 – Làm việc với Cookie

a)      Thiết lập Cookie

Để thiết lập một Cookie chúng ta sử dụng cú pháp sau đây:

·         Name: Tên của Cookie

·         Value: Giá trị của Cookie

·         Time Live: Thời gian sống của Cookie

Chú ý: Hàm setcookie() phải được đặt trên tất cả các kịch bản HTML cũng như các thẻ in ra màn hình như echo, print,…

b)     Sử dụng Cookie

Sau khi thiết lập được Cookie, để có thể lấy giá trị của Cookie đã được thiết lập ở trước đó chúng ta sử dụng cú pháp sau:

Để hiểu rõ hơn về cách thức làm việc với Cookie chúng ta tiến hành xem xet một ví dụ sau:

Ví dụ:

Khởi tạo file dangky_cookie.php để khai báo một biến Cookie có thời gian sống là 1h (được tính là 3600s)

 

Khởi tạo file thucthi_cookie.php để nhận giá trị của Cookie Name đã khai báo ở trên

Sau 1h tức là 3600s, chúng ta tiến hành thực thi lại trang thucthi_cookie.php sẽ không thấy giá trị trả về bởi khi này Cookie đã hết hạn sử dụng

c)      Hủy bỏ Cookie

Hủy Cookie bằng cách khởi tạo đè cookie name và không truyền các tham số khác vào

 

Hủy Cookie bằng cách khởi tạo lại cookie để Time Live (thời gian sống) <= 0


B – BÀI TẬP

I – BÀI TẬP THỰC HÀNH

1 – Lý thuyết bổ sung

Trong phần này chúng ta có sử dụng một hàm mới để thực hiện chức năng chuyển trang đó là hàm header() trong PHP

Cú pháp:

header(“location:đường dẫn muốn chuyển tới”) 

Chú ý: Hàm header() này cần phải đứng trên tất cả các kịch bản HTML cũng như các hàm xuất nội dung trong PHP như print(), echo(),… tương tự như session_start(). Nhưng nếu muốn hàm header() nằm dưới các kịch bản HTML cũng như các hàm xuất dữ liệu mà không bị báo lỗi thì chúng ta có một cách khắc phục như sau. Đó là sử dụng một hàm ob_start() không có tham số để đặt ngay trên cùng của trang thực thi. 

2 – Bài tập

Bài 1:

Xây dựng ứng dụng Login và Logout với các yêu cầu như sau:

  • Tạo trang login.php để chứa Form login và xử lý quá trình login
  • Tạo trang admin.php chứa một đoạn nội dung bất kỳ để khi quá trình login thành công thì hệ thống sẽ tự động chuyển người dùng qua trang này và hiển thị nội dung đó
  • Khi người dùng đã đăng nhập thành công thì không thể nào truy cập vào được trang login.php cũng như là quay lại được trang này
  • Ở trang admin.php tạo một Link logout. Nếu người dùng lựa chọn logout sẽ đưa tới trang logout để xử lý logout đồng thời chuyển người dùng tới trang login.php và khi này thì trang admin.php cũng như trang logout.php đều không thể truy cập vào được

Chú ý: Chạy thử đáp án bài 1 dưới cuối trang để hiểu chính xác hoạt động của ứng dụng 

II – BÀI TẬP VỀ NHÀ

Bài 2:

Thực hiện xây dựng ứng dụng Login và Logout tương tự như trên nhưng có thêm chức năng cho phép ghi nhớ tài khoản và mật khẩu đăng nhập như sau:

  • Khi người dùng lựa chọn vào ô checkbox này thì nhưng lần truy cập sau, họ không cần phải đăng nhập
  • Nếu người dùng không lựa chọn tính năng này thì sau khi tắt trình duyệt họ vẫn phải đăng nhập lại từ đầu

Chú ý: Chạy thử đáp án bài 2 cuối trang để hiểu chính xác hoạt động của ứng dụng

Bài 3:

Thực hiện xây dựng ứng dụng Login và Logout tương tự như Bài 1. nhưng có bổ sung thêm tính năng sau:

  • Nếu người dùng đăng nhập sai 3 lần thì sẽ bị cấm đăng nhập trong vòng 30 phút (test thử 30s trước)
  • Mỗi một lần đăng nhập sai sẽ có thông báo đăng nhập sai và kèm theo số lần được phép đăng nhập còn lại

Chú ý: Chạy thử đáp án bài 3 cuối trang để hiểu chính xác hoạt động của ứng dụng


Đáp án:

Bài 1:

file admin.php

<?php

session_start();

if($_SESSION["user"]){

echo "Xin chao Admin da dang nhap thanh cong! <a href=\"logout.php\">Logout</a>";

}

else{

header("location:login.php");

}

?>

file login.php

<?php

ob_start();

session_start();

if($_POST["submit_name"]){

if($_POST["user"] == "admin" && $_POST["pass"] == "admin"){

$_SESSION["user"] = "admin";

header("location:admin.php");

}

else{

echo "<center style=\"color:red;\">Tài khoản không hợp lệ</center>";

}

}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Login</title>

</head>

<body>

<?php

if(!$_SESSION["user"]){

?>

<form method="post">

<table align="center" border="1" cellspacing="1" cellpadding="1">

  <tr>

    <td align="center" colspan="2">Đăng nhập hệ thống quản trị</td>

  </tr>

  <tr>

    <td>Tài khoản</td>

    <td><input type="text" name="user" /></td>

  </tr>

  <tr>

    <td>Mật khẩu</td>

    <td><input type="password" name="pass" /></td>

  </tr>

  <tr>

    <td colspan="2"><input type="submit" name="submit_name" value="Đăng nhập" /> <input type="reset" name="reset_name" value="Làm mới" /></td>

  </tr>

</table>

</form>

<?php

}

else{

header("location:admin.php");

}

?>

</body>

</html>

file logout.php

<?php

session_start();

if($_SESSION["user"]){

session_destroy();

header("location:login.php");

}

else{

header("location:login.php");

}

?>

Bài 2:

file admin.php

<?php

session_start();

if($_SESSION["user"] or $_COOKIE["user"]){

echo "Xin chao Admin da dang nhap thanh cong! <a href=\"logout.php\">Logout</a>";

}

else{

header("location:login.php");

}

?>

file login.php

<?php

ob_start();

session_start();

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Login</title>

</head>

<body>

<?php

if($_POST["submit_name"]){

if($_POST["user"] == "admin" && $_POST["pass"] == "admin"){

if($_POST["check"] == "ok"){

setcookie("user", "admin", time()+3600);

}

else{

$_SESSION["user"] = "admin";

header("location:admin.php");

}

}

else{

echo "<center style=\"color:red;\">Tài khoản không hợp lệ</center>";

}

}


if(!$_SESSION["user"] or !$_COOKIE["user"]){

?>

<form method="post">

<table align="center" border="1" cellspacing="1" cellpadding="1">

  <tr>

    <td align="center" colspan="2">Đăng nhập hệ thống quản trị</td>

  </tr>

  <tr>

    <td>Tài khoản</td>

    <td><input type="text" name="user" /></td>

  </tr>

  <tr>

    <td>Mật khẩu</td>

    <td><input type="password" name="pass" /></td>

  </tr>

  <tr>

  <td>Ghi nhớ tài khoản</td>

    <td><input type="checkbox" name="check" value="ok" /></td>

  </tr>

  <tr>

    <td colspan="2"><input type="submit" name="submit_name" value="Đăng nhập" /> <input type="reset" name="reset_name" value="Làm mới" /></td>

  </tr>

</table>

</form>

<?php

}

else{

header("location:admin.php");

}

?>

</body>

</html>

file logout.php


<?php
if($_SESSION["user"]){
session_start();
session_destroy();
header("location:login.php");
}
elseif($_COOKIE["user"]){
setcookie("user");
header("location:login.php");
}
else{
header("location:login.php");
}
?>

Bài 3:

file admin.php

<?php

session_start();

if($_SESSION["user"]){

echo "Xin chao Admin da dang nhap thanh cong! <a href=\"logout.php\">Logout</a>";

}

else{

header("location:login.php");

}

?>

file login.php
<?php
ob_start();
session_start();
if($_POST["submit_name"]){
if($_POST["user"] == "admin" && $_POST["pass"] == "admin" && !$_COOKIE["log_end"]){
$_SESSION["user"] = "admin";
header("location:admin.php");
}
else{
if(!$_COOKIE["log_end"]){
if(!$_COOKIE["num_log"]){
setcookie("num_log", 2, time()+3600);
echo "<center style=\"color:red;\">Tài khoản không hợp lệ</center>";
echo "<center style=\"color:red;\">Số lần đăng nhập còn lại của bạn là <b>".$_COOKIE["num_log"]."</b> lần</center>";
}
else{
$_COOKIE["num_log"]--;
if($_COOKIE["num_log"] > 0){
$cookie_new = $_COOKIE["num_log"];
setcookie("num_log", $cookie_new, time()+3600);
echo "<center style=\"color:red;\">Tài khoản không hợp lệ</center>";
echo "<center style=\"color:red;\">Số lần đăng nhập còn lại của bạn là <b>".$_COOKIE["num_log"]."</b> lần</center>";
}
else{
setcookie("num_log");
setcookie("log_end", "30s", time()+30);
header("location:login.php");
}
}
}
}
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
</head>
<body>
<?php
if(!$_SESSION["user"]){
if($_COOKIE["log_end"]){
echo "<center style=\"color:red;\">Bạn không thể đang nhập được trong vòng <b>".$_COOKIE["log_end"]."</b></center>";
}
?>
<form method="post">
<table align="center" border="1" cellspacing="1" cellpadding="1">
  <tr>
    <td align="center" colspan="2">Đăng nhập hệ thống quản trị</td>
  </tr>
  <tr>
    <td>Tài khoản</td>
    <td><input type="text" name="user" /></td>
  </tr>
  <tr>
    <td>Mật khẩu</td>
    <td><input type="password" name="pass" /></td>
  </tr>
  <tr>
    <td colspan="2"><input type="submit" name="submit_name" value="Đăng nhập" /> <input type="reset" name="reset_name" value="Làm mới" /></td>
  </tr>
</table>
</form>
<?php
}
else{
header("location:admin.php");
}
?>
</body>
</html>

file logout.php
<?php
session_start();
if($_SESSION["user"]){
session_destroy();
header("location:login.php");
}
else{
header("location:login.php");
}
?>

>>Xem bài trước: Bài 31 - PHP basic buổi 10 - QUY TRÌNH DOWNLOAD FILE TRONG PHP


>>Xem bài tiếp theo: Bài 33 - MYSQL PHẦN I - DESIGN CSDL

Bài 31 - PHP basic buổi 10 - QUY TRÌNH DOWNLOAD FILE TRONG PHP

 

LAB PHP (CB) 10

QUY TRÌNH DOWNLOAD FILE TRONG PHP

A – LÝ THUYẾT

I – QUY TRÌNH DOWNLOAD FILE TRONG PHP

Qúa trình Download một File chính là quá trình đọc nội dung của File đó rồi trả về cho Browser để xử lý

Để bắt đầu xây dựng một chương trình Download File đơn giản chúng ta phải trải qua các quy trình sau:

1 - Quy trình mở và đóng một File thông thường

Đây chính là quá trình mở và đóng một File muốn Download theo cách đọc file thông thường ở dạng nhị phân binary


2 - Quy trình thông báo dữ liệu trả về  cho Browser

Đây chính là quá trình báo cho browser biết dữ liệu trả về từ server là dữ liệu nhị phân chứ không phải là văn bản HTMl như thông thường 

3 - Quy trình thông báo dung lượng File

Đây chính là quá trình báo cho Browser biết dung lượng của File sẽ được tải xuống

4 - Quy trình đọc nội dung File

Đây chính là quá trình đọc nội dung của  File và echo lại cho Browser Download

 

 

Chúng ta thấy quá trình $fr = fpassthru($fo) ó với 2 lệnh sau:

$content = fread($fo, filesize($fpath));

echo $content;

 

5 - Quy trình lưu và đổi tên của File

Đây chính là quá trình sẽ báo cho Browser biết là nên Download và Save File thay vì Open. Đồng thời  sẽ báo cho Browser biết tên của file đang được Download

 

 

Trong hàm header(“Content-disposition: attachment; filename=$filename”); chúng ta có

·         Tham số "attachment" của header "Content-disposition" sẽ báo cho Browser biết là nên Download và save file thay vì Open

·         Tham số "filename=" sẽ báo cho browser biết tên của File đang được Download

 

6 – Một số kiểu dữ liệu tương ứng với các kiểu File thông dụng

Mặc định PHP sẽ trả về dữ liệu kiểu text/html cho browser. Một số kiểu dữ liệu tương ứng với các kiểu file thông dụng:

·         .GIF: image/gif

·         .JPG: image/jpeg

·         .PNG: image/png

·         .WAV: audio/wav

·         .MP3: audio/mpeg3

·         .DOC: application/msword

·         .PDF: application/pdf

 

Tuỳ vào kiểu của dữ liệu trả về mà browser có thể sẽ có những cách ứng khác nhau. Ví dụ nếu dữ liệu trả về là file ảnh thì browser sẽ hiển thị luôn, nếu là file nhạc thì browser sẽ gọi WMP lên để play, nếu là file PDF thì chương trình Acrobat sẽ được gọi... Kiểu application/octet-stream để chỉ dữ liệu nhị phân (binary) chung chung. Nếu bạn chỉ muốn browser download và save file thì bạn chỉ cần trả về kiểu dữ liệu application/octet-stream là đủ.

 

B – BÀI TẬP

I – BÀI TẬP THỰC HÀNH

Bài 1:

Xây dựng một ứng dụng Download như hình dưới đây. Khi người dùng thực hiện Click vào link Download Now! Thì sẽ tiến hành cho phép Download file đã được định sẵn. Xem file hướng dẫn giải bai_tap_1.php để có thể xây dựng các chức năng của ứng dụng một cách chính xác hơn

 


II – BÀI TẬP VỀ NHÀ

Bài 2:

Xây dựng một chương trình Download File nâng cao với các yêu cầu về chức năng như sau:

  • Hiển thị danh sách các File dữ liệu với các thông tin  như (Tên file, Icon mô tả kiểu file, link download file tương ứng)
  • Người dùng lựa chọ File cần download và Click vào link Download tương ứng của File đó để tiến hành Download File

Xem hình dưới và file bài giải bai_tap_2.php để có thể xây dựng được ứng dụng một cách chính xác nhất


Đáp án:

Bài 1:

Nội dung file bài_1.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Bài 1</title>

<style type="text/css">

a{

font:arial;

font-size:20px;

font-weight:bold;

color:#FF0000;

text-transform:capitalize;

}

a:hover{

color:#FFFF00;

text-decoration:underline;

}

</style>

</head>

<body>

<center><a href="download_bai_tap_1.php">download now!</a></center>

</body>

</html>

nội dung file download_bai_tap_1.php

<?php

$fp = "textfile.rar";

$fo = fopen($fp, "rb");

header("Content-Type: application/octet-stream");

header("Content-Length: ".filesize($fp)); 

header("Content-Disposition: attachment; filename=".$fp);

$fr = fpassthru($fo);

$fc = fclose($fo);

?>


Bài 2:

Nội dung file bai2.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Untitled Document</title>

<style type="text/css">

table tr td#menu_title{

font-family:arial;

font-size:14px;

font-weight:bold;

color:#FFFFFF;

text-transform:uppercase;

padding:5px 0px;

background:#FF6600;

}

table tr td.title{

font-family:arial;

font-size:12px;

font-weight:bold;

text-transform:capitalize;

padding-left:5px;

}

table tr td.img{

text-align:center;

}

table tr td.download{

text-align:center;

}

table tr td.download a{

font-family:arial;

font-size:12px;

color:#0000FF;

text-transform:capitalize;

}

</style>

</head>

<body>

<table border="1" align="center" width="500">

<tr>

    <td id="menu_title" colspan="3" align="center">danh sách các file tài liệu học tập</td>

    </tr>

    <tr>

    <td class="title">giáo trình thiết kế website tĩnh html cơ bản</td>

    <td class="img"><img width="40" height="40" src="images/rar.jpg" /></td>

        <td class="download"><a href="download_bai_tap_2.php?file=html_can_ban.rar">download file</a></td>

    </tr>

    <tr>

    <td class="title">giáo trình lập trình website với javascript cơ bản</td>

    <td class="img" width="50"><img width="50" height="40" src="images/doc.jpg" /></td>

        <td class="download" width="100"><a href="download_bai_tap_2.php?file=javascript_can_ban.doc">download file</a></td>

    </tr>

    <tr>

    <td class="title">giáo trình lập trình website động với ngôn ngữ php</td>

    <td class="img"><img width="40" height="40" src="images/pdf.png" /></td>

        <td class="download"><a href="download_bai_tap_2.php?file=php_can_ban.pdf">download file</a></td>

    </tr>

    <tr>

    <td class="title">thời khóa biểu và lịch học các môn lập trình website</td>

    <td class="img"><img width="40" height="40" src="images/jpg.jpg" /></td>

        <td class="download"><a href="download_bai_tap_2.php?file=thoi_khoa_bieu.jpg">download file</a></td>

    </tr>

</table>

</body>

</html>

nội dung file download_bai_tap_2.php

 <?php

$filename = $_GET["file"];

$fp = "file/".$filename;

$fo = fopen($fp, "rb");

header("Content-Type: application/octet-stream");

header("Content-Length: ".filesize($fp)); 

header("Content-Disposition: attachment; filename=".$filename);

$fr = fpassthru($fo);

$fc = fclose($fo);

?>

>>Xem ngay: Bài 30 - PHP basic buổi 9 - QUY TRÌNH UPLOAD FILE TRONG PHP