Tải bản đầy đủ (.pdf) (130 trang)

Giáo trình Phát triển ứng dụng web: Phần 2 - Trường ĐH Công nghiệp Quảng Ninh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (6.35 MB, 130 trang )

Chương 4: Kết hợp PHP và MySQL

CHƯƠNG 4: KẾT HỢP PHP VÀ MySQL
4.1. Kết nối cơ sở dữ liệu
a) Để kết nối cơ sở dữ liệu mySQL bạn sử dụng khai pháp như sau:
$link = mysql_connect ("localhost", "root", "")
or die ("Could not connect to MySQL Database");
@mysql_query("SET NAMES 'utf8'",$link);
mysql_select_db("BookDB", $link);
?>

Trong đó:
- Khai báo $link = mysql_connect ("localhost", "root", "") để kết nối
cơ sở dữ liệu MySQL với tên Server là localhost, Username là root và Password của
Username root là rỗng.
- Dòng lệnh die ("Could not connect to MySQL Database"); sẽ thông báo
cho chúng ta biết nếu không kết nối thành công thì một thơng báo sau sẽ xuất hiện
"Could not connect to MySQL Database".
- Khai báo @mysql_query("SET NAMES 'utf8'",$link); để hiển thị dữ liệu
trong cơ sở dữ liệu dưới dạng Unicode utf8.
- Khai báo: mysql_select_db("BookDB", $link) để chọn tên cơ sở dữ liệu sau
khi mở kết nối cơ sở dữ liệu.
b) Để đóng kết nối cơ sở dữ liệu bạn sử dụng cú pháp sau:
mysql_close($link);
?>

c) Chúng ta có thể khai báo trang “dbcon.inc” chứa kết nối đến cơ sở dữ liệu và
trang này được dùng cho các trang PHP cần kết nối đến cơ sở dữ liệu:


$link = mysql_connect ("localhost", "root", "")
or die ("Could not connect to MySQL Database");
@mysql_query("SET NAMES 'utf8'",$link);
mysql_select_db("BookDB", $link);
?>

Các trang PHP khác muốn kết nối đến cơ sở dữ liệu thay vì phải viết lại đoạn mã
lệnh trên thì chỉ cần chèn file "dbcon.inc" vào theo cú pháp sau:
require("dbcon.inc");

4.2. Truy vấn và hiển thị dữ liệu trong các bảng
4.2.1. Hiển thị dạng lưới (table)
- Để truy vấn CSDL, bạn có thể sử dụng hàm mysql_query() với tham số bắt
buộc là chuỗi SQL, tham số tùy chọn là chuỗi kết nối CSDL như cú pháp sau:
int mysql_query(string sql);
Hoặc
int mysql_query(string sql, [int db_connect]);

96


Chương 4: Kết hợp PHP và MySQL

Ví dụ: Với CSDL “BookDB”, ta thực hiện truy vấn bảng “Sach” như sau:
require("dbcon.inc");
$sql="select * from sach";
$result=mysql_query($sql,$link);
?>


Bạn nên lưu kết quả của truy vấn này trong một biến, trong ví dụ trên, kết quả của
truy vấn được lưu vào biến có tên là: $result.
- Đếm số lượng mẩu tin trả về từ truy vấn: khi bạn mở một CSDL và truy vấn
một bảng dữ liệu, để biết được số lượng mẩu tin câu truy vấn trả về, bạn có thể sử
dụng hàm có cú pháp:
mysql_num_rows();

Chẳng hạn, trong trường hợp bạn mở một bảng dữ liệu của CSDL “BookDB” có
tên là “Sach”, để biết số mẩu tin trả về là bao nhiêu, bạn sử dụng hàm
mysql_num_rows($result).
- Đọc từng mẩu tin: bạn có thể sử dụng hàm mysql_fetch_array() để đọc từng
mẩu tin trong biến $result, nếu không tồn tại mẩu tin trong $result hàm sẽ không thực
hiện, đoạn mã lệnh như sau:
if(mysql_num_rows($result)!=0)
{
while($row = mysql_fetch_array($result))
{
//Lấy giá trị từng colum
$varmasach= $row["sachID"];
$vartensach= $row["tensach"];
$vartacgia= $row["tacgia"];
$varnxb= $row["nxb"];
$varnamxb= $row["namxb"];
$vargiatien= $row["giatien"];
//Hiển trị giá trị lấy được trên trình duyệt
echo
echo
echo
echo
echo

echo

"<tr><td nowrap align=center>$varmasach</td>";
"<td nowrap align=center>$vartensach</td>";
"<td nowrap align=center>$vartacgia</td>";
"<td nowrap align=center>$varnxb</td>";
"<td nowrap align=center>$varnamxb</td>";
"<td nowrap align=center>$vargiatien</td></tr>";

}
}

Ví dụ 4.1: Tạo một trang PHP (hien_thi_sach.php) liệt kê tất
cả các quyển sách có trong bảng “sach” của cơ sở dữ liệu
“BookDB” đã được tạo trong Câu 1, phần Câu hỏi ôn tập chương
3. kết quả liệt kê như hình 4.1

97


Chương 4: Kết hợp PHP và MySQL

Hình 4.1: Liệt kê các sách có trong bảng “sach”

Yêu cầu:
- Kết nối vào MySQL.
- Chọn csdl “BookDB”.
- Đọc bảng “sach”.
- Xuất các thông tin về sách dưới dạng lưới thơ (table) như
hình trên.

Giải:
- Dùng mysql_connect(…) để kết nối vào csdl.
- Dùng mysql_select_db(…) để chọn csdl “BookDB”.
- Để đọc bảng sách dùng mysql_query(…).
Duyệt
các
mẩu
tin
trong
mảng
sách
bằng
hàm
mysql_fetch_row(…) và cứ mỗi dịng thì xuất ra một mẩu tin
trong bảng sách theo định dạng trên.
Đoạn mã của trang hien_thi_sach.php được viết như sau:
//Dòng lệnh sau sẽ kết nối đến cơ sở dữ liệu BookDB
require("dbcon.inc");
// Dịng lệnh sau sẽ lấy tồn bộ sách trong CSDL sách
$sql="select * from sach";
$result=mysql_query($sql,$link);

98


Chương 4: Kết hợp PHP và MySQL

?>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test</title>
</head>
<body>
<H2>align=center><b>CÁC
ĐẦU
SÁCH

TRONG
BẢNG
<i>"SACH"</i></b>

</H2>
<table align=center border="1">
<tr>
<th nowrap>MÃ SÁCH</th>
<th nowrap>TÊN SÁCH</th>
<th nowrap>TÁC GIẢ</th>
<th nowrap>NNÀ XUẤT BẢN</th>
<th nowrap>NĂM XUẤT BẢN</th>
<th nowrap>GIÁ TIỀN</th>
</tr>
//Kiểm tra số mẩu tin trả về
if(mysql_num_rows($result)!=0)
{
//Đọc hết mẩu tin bằng hàm mysql_fetch_array
while($row = mysql_fetch_array($result))
{
//Lấy giá trị từng colum

$varmasach= $row["sachID"];
$vartensach= $row["tensach"];
$vartacgia= $row["tacgia"];
$varnxb= $row["nxb"];
$varnamxb= $row["namxb"];
$vargiatien= $row["giatien"];
//Hiển trị giá trị lấy được trên trình duyệt
echo "<tr><td nowrap align=center>$varmasach</td>";
echo "<td nowrap align=center>$vartensach</td>";
echo "<td nowrap align=center>$vartacgia</td>";
echo "<td nowrap align=center>$varnxb</td>";
echo "<td nowrap align=center>$varnamxb</td>";
echo "<td nowrap align=center>$vargiatien</td></tr>";
}
}
?>
</table>
</body>
</html>
//Đóng kết nối cơ sở dữ liệu
mysql_close($link);
?>

4.2.2. Hiển thị dạng lưới định dạng
Với cách hiển thị dạng lưới định dạng, trong phần nội dung các dịng chẵn và dịng
lẻ có màu khác nhau.

99



Chương 4: Kết hợp PHP và MySQL

Ví dụ 4.2: Thiết kế trang (luoi_dinh_dang.php) hiển thị
thơng tin các quyển sách có định dạng như sau:

Hình 4.2: Thơng tin sách được hiển thị dạng lưới định dạng

Yêu cầu:
- Kết nối vào MySQL.
- Chọn csdl “BookDB”.
- Đọc bảng “sach”.
- Xuất các thông tin về sách dưới dạng lưới như hình trên,
trong đó: dịng tiêu đề có các cột được canh giữa; dịng chẵn và
dịng lẻ ở phần nội dung có màu nền khác nhau; các cột được
canh giữa.
Giải:
- Dùng mysql_connect(…) để kết nối vào csdl.
- Dùng mysql_select_db(…) để chọn csdl “BookDB”.
- Để đọc bảng sách dùng mysql_query(…).
Duyệt
các
mẩu
tin
trong
mảng
sách
bằng
mysql_fetch_row(…) và cứ mỗi dịng thì xuất ra một mẩu
trong bảng sách theo định dạng trên.

- Đặt một biến để đếm từng dòng bắt đầu từ 0, và tăng
theo dòng.
- Nếu biến đếm chia hết cho 2 (dịng chẵn) thì xuất ra
dịng có màu nền khác màu so với dòng lẻ.

hàm
tin
dần
một

Đoạn mã của trang “luoi_dinh_dang.php” được viết như sau:

100


Chương 4: Kết hợp PHP và MySQL

require("dbcon.inc");
$sql="select * from sach";
$result=mysql_query($sql,$link);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test</title>
</head>
<body>
<H2>

<b> THÔNG TIN SÁCH </b>

</H2>

style="border-collapse:collapse">
<tr>
<th nowrap>MÃ SÁCH</th>
<th nowrap>TÊN SÁCH</th>
<th nowrap>TÁC GIẢ</th>
<th nowrap>NNÀ XUẤT BẢN</th>
<th nowrap>NĂM XUẤT BẢN</th>
<th nowrap>GIÁ TIỀN</th>
</tr>
//Kiểm tra số mẩu tin trả về
if(mysql_num_rows($result)!=0)
{
$stt=0;
//Cho biết làm việc với dòng nào trong bảng, nếu số
chẵn xuất màu nền ngược lại thì khơng
//Đọc hết mẩu tin bằng hàm mysql_fetch_array
while($row = mysql_fetch_array($result))
{
//Lấy giá trị từng colum
$varmasach= $row["sachID"];
$vartensach= $row["tensach"];
$vartacgia= $row["tacgia"];
$varnxb= $row["nxb"];
$varnamxb= $row["namxb"];
$vargiatien= $row["giatien"];
//Kiểm tra nếu số chẵn xuất màu nền ngược lại thì khơng
if($stt%2==0)
echo "<tr bgcolor='#ffe0c1'>";
else

echo "<tr>";
//Hiển thị giá trị của các trường lên trình duyệt
echo "<td nowrap align=center>$varmasach</td>";
echo "<td nowrap align=center>$vartensach</td>";
echo "<td nowrap align=center>$vartacgia</td>";
echo "<td nowrap align=center>$varnxb</td>";
echo "<td nowrap align=center>$varnamxb</td>";
echo "<td nowrap align=center>$vargiatien</td>";
//Tăng biến kiểm tra lên 1
$stt = $stt + 1;
//Thẻ đóng kết thúc một hàng
echo "</tr>";
}
}
?>

101


Chương 4: Kết hợp PHP và MySQL

</table>
</body>
</html>
//Đóng kết nối cơ sở dữ liệu
mysql_close($link);
?>

4.2.3. Hiển thị dạng lưới có phân trang

Khi trình bày dữ liệu trên trang Web, chúng ta có thể qui định số dòng sẽ hiển thị
trên một trang, và khi đó tồn bộ dữ liệu có thể được trình bày trên nhiều trang thay vì
một trang, quá trình đó được gọi là phân trang khi hiển thị. Chẳng hạn, chúng ta có 20
dịng dữ liệu cần hiển thị, thay vì hiển thị 20 dịng trên một trang, chúng ta có thể qui
định chỉ hiển thị 5 dịng trên một trang, như vậy chúng ta cần 4 trang để có thể hiển thị
hết 20 dịng dữ liệu. Điều này có nghĩa là nếu trang có số mẩu tin lớn hơn 5, mẩu tin
thứ 6 trình bày trong trang kế tiếp, tương tự cho các trang khác.
Ví dụ 4.3: Thiết kế trang (luoi_phan_trang.php) hiển thị
thơng tin các quyển sách có phân trang, mối trang chỉ hiển thị
5 quyển sách như sau:

Hình 4.3: Thơng tin sách được hiển thị dạng lưới có phân trang

Yêu cầu:
- Kết nối vào MySQL.
- Chọn csdl “BookDB”.
- Đọc bảng “sach”.
- Sử dụng class Pager để thực hiện việc phân trang, trong
đó:
+ Mỗi trang gồm có 5 dịng dữ liệu.
+ Xuất thơng tin dạng lưới có định dạng như hình trên
(dịng chẵn và dịng lẻ có màu nền khác nhau)
+ Hiển thị danh sách trang theo dạng số.
Giải:
- Tạo một trang “luoi_phan_trang.php”

102


Chương 4: Kết hợp PHP và MySQL


- Chèn vào trang này class Pager dùng để thực hiện các chức
năng về phân trang.
- Dùng mysql_connect(…) để kết nối vào csdl.
- Dùng mysql_select_db(…) để chọn csdl “BookDB”.
- Xác định số dòng nội dung cần hiển thị cho một trang và
gán vào cho biến $limit.
- Tìm dịng bắt đầu của mỗi trang bằng hàm findStart(…) và
gán cho biến $start.
- Đếm số mẩu tin có trong bảng bằng hàm mysql_num_rows(…) và
gán cho biến $count.
- Tính tổng số trang bằng hàm findPages($count, $limit).
- Để đọc bảng dùng mysql_query(… LiMit $start,$limit).
- Duyệt các mẩu tin có được bằng hàm mysql_fetch_row(…), sau
đó xuất thơng tin ra như định dạng trên.
Sau
đó
xuất
danh
sách
các
trang
bằng
hàm
pageList($_GET[‘page’],$pages) và gán cho biến $pageList, rồi
xuất biến này.
Đoạn mã của trang “luoi_phan_trang.php” được viết như sau:
require("dbcon.inc");
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test</title>
</head>
<body>
/************************************************************
* Class:Pager
* Methods:
* findStart
* findPages
* pageList
* nextPrev
* Redistribute as you see fit.
************************************************************/
//Tạo lớp dùng để thực hiện các chức năng về phân trang
class Pager{
/**********************************************************
* Hàm int findStart(int limit)
* Trả về dòng bắt đầu của trang được chọn dựa trên trang lấy được
và biến limit
* $limit cho biết số dòng (mẩu tin) hiển thị trên 1 trang
***********************************************************/
function findStart($limit)
{
if((!isset($_GET['page'])) || ($_GET['page'] == "1"))
{
$start = 0;
$_GET['page'] = 1;

}
else
{
$start = ($_GET['page']-1)*$limit;

103


Chương 4: Kết hợp PHP và MySQL

}
return $start;
}
/**********************************************************
* Hàm int findPages(int count, int limit)
* Trả về số lượng trang cần thiết dựa trên tổng số dịng có trong
table và limit
* $count là tổng số mẩu tin trong bảng
* Hàm floor(float $value) là hàm làm tròn, trả về số nguyên bằng
cách làm trịn số xuống số nhỏ gần nhất
* ví dụ: floor(4.3)=4; floor(9.999)=9; floor(-3.14)=-4
**********************************************************/
function findPages($count, $limit)
{
$pages = (($count % $limit) == 0) ? $count/$limit :
floor($count/$limit) + 1;
return $pages;
}
/*******************************************************
* Hàm string pageList(int curpage, int pages)

* Trả về danh sách trang theo định dạng "Trang đầu tiên < [Các
trang] > Trang cuối cùng"
* $curpage: Trang hiện tại
* $pages: Tổng số trang
* $_SERVER['PHP_SELF']: Lấy tên file hiện tại trên thanh address.
Tên file nằm trên folder gốc của website. Ví dụ: biến
$_SERVER['PHP_SELF']
trong
script
đặt
tại
địa
chỉ
sẽ là test.php
********************************************************/
function pageList($curpage, $pages)
{
$page_list = "";
/*In trang đầu tiên và những link tới trang trước nếu cần*/
if(($curpage != 1) && ($curpage))
{
$page_list
đầu]</a> ";

.=

"
href=\"".$_SERVER['PHP_SELF']."?page=1\">[Trang


}
if(($curpage - 1) > 0)
{
$page_list .= "<a href=\"".$_SERVER['PHP_SELF']."?page=".($curpage1). "\"> [Previous] </a> ";

}
/*In danh sách các trang và làm cho trang hiện tại đậm hơn va
mat link o chan*/
for($i=1;$i<=$pages;$i++)
{
if($i == $curpage)
{
$page_list .= "<b><big> ".$i." </big></b>";

}
else
{
$page_list .= "page=".$i."\"> ".$i." </a> ";
}
$page_list .= "";
}

?

104


Chương 4: Kết hợp PHP và MySQL


/*In link của trang tiếp theo và trang cuối cùng nếu cần*/
if(($curpage+1) <= $pages)
{
$page_list .= "
page=".($curpage+1). "\"> [Next] </a> ";
}
if(($curpage != $pages) && ($pages != 0))
{
$page_list .= "
page=".$pages."\">[Trang cuối]</a> ";
}
$page_list .= "</td>\n";
return $page_list;
}
/**************************************************
* Hàm string nextPrev(int curpage, int pages)
* Returns "Previous | Next" string for individual pagination (it's
a word!)
****************************************************/
function nextPrev($curpage, $pages)
{
$next_prev = "";
if(($curpage-1) <= 0)
{
$next_prev .= "Về trang trước";
}
else
{
$next_prev .= "
page=".($curpage-1)."\">Về trang trước</a>";

}
$next_prev .= " | ";
if(($curpage+1) > $pages)
{
$next_prev .= "Đến trang sau";
}
else
{
$next_prev .= "
page=".($curpage+1)."\">Đến trang sau</a>";
}
return $next_prev;
}
} //Đóng class Pager
?>

?

<H2>

<b> THÔNG TIN SÁCH </b>

</H2>
style="border-collapse:collapse">
<tr>
<th nowrap>MÃ SÁCH</th>
<th nowrap>TÊN SÁCH</th>
<th nowrap>TÁC GIẢ</th>
<th nowrap>NNÀ XUẤT BẢN</th>
<th nowrap>NĂM XUẤT BẢN</th>

105



Chương 4: Kết hợp PHP và MySQL

<th nowrap>GIÁ TIỀN</th>
</tr>
//Khai báo biến class Pager
$p = new Pager;
//Yêu cầu giới hạn một trang có bao nhiêu dịng
$limit=5;
//Tìm dịng bắt đầu đưa vào biến trang lấy được (khai báo nếu nó
chưa có giá trị)
$start = $p->findStart($limit);
//Tìm số dịng của bảng nhờ câu lệnh truy vấn
$count = mysql_num_rows(mysql_query("select * from sach"));
//Tìm số trang dựa trên số dịng vừa có và giới hạn cho một trang
$pages = $p->findPages($count, $limit);
//Dùng start và limit để lấy số mẩu tin trong khoảng từ $start, và
số lượng mẩu tin trên một dòng là $limit
//Câu lệnh select * from sach LIMIT n,m cho phép truy vấn một số
mẩu tin tính từ vị trí thứ n đến vị trí thứ m
$sql="select * from sach LIMIT ".$start.",".$limit;
$result=mysql_query($sql,$link);
//$result
=
mysql_query("select
*
from
sach
LIMIT

".$start.",".$limit);
//Kiểm tra số mẩu tin trả về
if(mysql_num_rows($result) != 0)
{
$stt=0;
//Cho biết làm việc với dòng nào trong bảng, nếu số
chẵn xuất màu nền ngược lại thì khơng
//Đọc hết mẩu tin bằng hàm mysql_fetch_array
while($row = mysql_fetch_array($result))
{
//Lấy giá trị từng colum
$varmasach= $row["sachID"];
$vartensach= $row["tensach"];
$vartacgia= $row["tacgia"];
$varnxb= $row["nxb"];
$varnamxb= $row["namxb"];
$vargiatien= $row["giatien"];
if($stt%2==0)
echo "<tr bgcolor='#ffe0c1'>";
else
echo "<tr>";
echo "<td nowrap align=center>$varmasach</td>";
echo "<td nowrap align=center>$vartensach</td>";
echo "<td nowrap align=center>$vartacgia</td>";
echo "<td nowrap align=center>$varnxb</td>";
echo "<td nowrap align=center>$varnamxb</td>";
echo
"nowrap
align=center>"

number_format($vargiatien,0,'.','.') ." VNĐ</td>";
$stt = $stt + 1;
echo "</tr>";
}
}
echo "</table>";
// Xuất danh sách trang
$pagelist = $p->pageList($_GET['page'], $pages);

.

106


Chương 4: Kết hợp PHP và MySQL

echo "

";
echo $pagelist;
echo "

";
//Có thể dùng dạng đơn giản "Previous | Next" nếu không muốn xuất
danh sách trang
//$next_prev = $p->nextPrev($_GET['page'], $pages);
//echo "

";
//echo $next_prev;
//echo "

";
//From here you can do whatever you want with the data from the
$result link.
?>
</body>
</html>

//Đóng kết nối cơ sở dữ liệu
mysql_close($link);
?>

4.2.4. Hiển thị dưới dạng list đơn giản
Ví dụ 4.4: Thiết kế trang (list_dang_don_gian.php) hiển thị
thông tin các quyển sách có định dạng như sau:

Hình 4.4: Thơng tin sách được hiển thị dạng list đơn giản

Yêu cầu:
- Kết nối vào MySQL.

107


Chương 4: Kết hợp PHP và MySQL

- Chọn csdl “BookDB”.
- Đọc bảng “sach”.
- Thiết kế và hiển thị các thông tin về sách như hình trên,
trong đó: Mỗi sách hiển thị trên một dịng có 2 cột. Cột hình
ảnh và cột nội dung (có tên sách, tác giả, nhà xuất bản, năm
xuất bản, giá bán).
Giải:
- Dùng mysql_connect(…) để kết nối vào csdl.
- Dùng mysql_select_db(…) để chọn csdl “BookDB”.
- Để đọc bảng sách dùng mysql_query(…).
Duyệt

các
mẩu
tin
trong
mảng
sách
bằng
hàm
mysql_fetch_row(…) và cứ mỗi dịng thì xuất ra một mẩu tin
trong bảng sách theo định dạng trên.
Đoạn mã của trang “list_dang_don_gian.php” được viết như
sau:
require("dbcon.inc");
$sql="select * from sach";
$result=mysql_query($sql,$link);
?>
<html>
<head>
/>
<title>List dang don gian</title>
</head>
<body>
if(mysql_num_rows($result)!=0)
{
echo
"align='center'

width='500'
cellpadding='2'
cellspacing='2' border='1' style='border-collapse:collapse'>";
echo
"<tr>align='center'
colspan='2'
bgcolor='#FFEEE6'><b>THÔNG TIN SÁCH</b></td></tr>";
while($row = mysql_fetch_array($result))
{
//Lấy giá trị từng colum
$varmasach= $row["sachID"];
$vartensach= $row["tensach"];
//Đặt tên file ảnh trùng với mã sách
$varhinh=
"src='images/$varmasach.jpg'
width='100' height='100'>";
$vartacgia= $row["tacgia"];
$varnxb= $row["nxb"];
$varnamxb= $row["namxb"];
$vargiatien= $row["giatien"];
echo "<tr>";
echo
"align='center'
vlign='middle'>$varhinh</td>";
echo
"<td><b>$vartensach</b>

Tác

giả:
$vartacgia
$varnxb - $varnamxb
Giá bán: $vargiatien VNĐ";
echo "<tr>";
}

108


Chương 4: Kết hợp PHP và MySQL

echo "<table>";
}
?>
</body>
</html>
//Đóng kết nối cơ sở dữ liệu
mysql_close($link);
?>

4.2.5. Hiển thị list dạng cột
Ví dụ 4.5: Thiết kế trang (list_dang_cot.php) hiển thị thông
tin các quyển sách có định dạng như sau:

Hình 4.5: Thơng tin sách được hiển thị list dạng cột

Yêu cầu:
- Kết nối vào MySQL.
- Chọn csdl “BookDB”.
- Đọc bảng “sach”.

- Thiết kế và hiển thị các thơng tin về sách như hình trên,
trong đó: Mỗi dịng có 4 cột, trong mỗi cột có một table hiển
thị thông tin sách (tên sách, tác giả, nhà xuất bản, năm xuất
bản, giá bán).
Giải:
- Dùng mysql_connect(…) để kết nối vào csdl.
- Dùng mysql_select_db(…) để chọn csdl “BookDB”.

109


Chương 4: Kết hợp PHP và MySQL

- Để đọc bảng sách dùng mysql_query(…).
Duyệt
các
mẩu
tin
trong
mảng
sách
bằng
hàm
mysql_fetch_row(…) và cứ mỗi dịng thì xuất ra một mẩu tin
trong bảng sách theo định dạng trên.
- Khai báo một biến $stt (gán bằng 0) để làm biến chạy theo
các mẩu tin được duyệt.
- Đối với mỗi mẩu tin được duyệt, kiểm tra xem biến $stt có
chia hết cho 4 hay khơng, nếu có thì in dịng mới, nếu khơng
thì sẽ xuất tiếp các cột trong cùng một dòng (như yêu cầu).

- Trong mỗi cột (mỗi mẩu tin), xuất ra một table gồm 5 dòng:
dòng đầu tiên là tên sách được in đậm, dòng thứ 2 là tên tác
giả, dòng thứ 3 là tên nhà xuất bản và năm xuất bản, dòng thứ
4 là giá tiền, dòng thứ 5 là hình ảnh của sách.
Đoạn mã của trang “list_dang_cot.php” được viết như sau:
require("dbcon.inc");
$sql="select * from sach";
$result=mysql_query($sql,$link);
?>
<html>
<head>
/>
<title>List dang don gian</title>
</head>
<body>
if(mysql_num_rows($result)!=0)
{
echo
"align='center'
width='1200'
cellpadding='0'
cellspacing='0'
border='1'
style='border-collapse:collapse
#FF6600'>";
echo

"<tr>align='center'
colspan='5'
bgcolor='#FFEEE6'><b>THÔNG TIN SÁCH</b></td></tr>";
$stt=0;
while($row = mysql_fetch_array($result))
{
//Lấy giá trị từng colum
$varmasach= $row["sachID"];
$vartensach= $row["tensach"];
//Đặt tên file ảnh trùng với mã sách
$varhinh= "height='100'>";
$vartacgia= $row["tacgia"];
$varnxb= $row["nxb"];
$varnamxb= $row["namxb"];
$vargiatien= number_format($row["giatien"],0,'.','.');
if($stt%4 == 0)
{echo "<tr>";}
echo "<td valign='top'>";
echo "<table align='center'>";
echo
"<tr>align='center'><b>
$vartensach
</b></td></tr>";
echo "<tr><td align='center'> Tác giả: $vartacgia

110



Chương 4: Kết hợp PHP và MySQL

</td></tr>";
echo "<tr><td align='center'> $varnxb - $varnamxb
</td></tr>";
echo "<tr><td align='center'> Giá bán: $vargiatien
VNĐ </td></tr>";
echo "<tr><td align='center'> $varhinh </td></tr>";
echo "</table>";
echo "</td>";
$stt=$stt+1;
if($stt%4 == 0)
{echo "</tr>";}
}
echo "<table>";
}
?>
</body>
</html>
//Đóng kết nối cơ sở dữ liệu
mysql_close($link);
?>

4.2.6. Hiển thị list dạng cột có link
Ví dụ 4.6: Thiết kế trang (list_dang_cot_co_link.php) hiển
thị thơng tin các quyển sách có định dạng như sau:

Hình 4.6: Thơng tin sách được hiển thị list dạng cột có link


111


Chương 4: Kết hợp PHP và MySQL

Tên sách là một liên kết, khi click vào liên kết, trang
“list_chi_tiet_sach.php” sẽ hiển thị chi tiết của sách như
sau:

Yêu cầu:
- Kết nối vào MySQL.
- Chọn csdl “BookDB”.
- Đọc bảng “sach”.
- Thiết kế và hiển thị các thơng tin về sách như hình trên.
Giải:
* Đối với trang “list_dang_cot_co_link.php”
- Dùng mysql_connect(…) để kết nối vào csdl.
- Dùng mysql_select_db(…) để chọn csdl “BookDB”.
- Để đọc bảng sách dùng mysql_query(…).
Duyệt
các
mẩu
tin
trong
mảng
sách
bằng
hàm
mysql_fetch_row(…) và cứ mỗi dịng thì xuất ra một mẩu tin

trong bảng sách theo định dạng trên.
- Khai báo một biến $stt (gán bằng 0) để làm biến chạy theo
các mẩu tin được duyệt.
- Đối với mỗi mẩu tin được duyệt, kiểm tra xem biến $stt có
chia hết cho 4 hay khơng, nếu có thì in dịng mới, nếu khơng
thì sẽ xuất tiếp các cột trong cùng một dòng (như yêu cầu).
- Trong mỗi cột (mỗi mẩu tin), xuất ra một table gồm 2 dòng:
dòng đầu tiên là tên sách (in đậm) dạng link có kèm theo mã
sách (để link qua trang chi tiết sách), dòng thứ 2 là hình ảnh
của sách.
* Đối với trang “list_chi_tiet_sach.php”
- Dùng mysql_connect(…) để kết nối vào csdl.
- Dùng mysql_select_db(…) để chọn csdl “BookDB”.
- Lấy giá trị mã sách mà người dùng chọn bằng hàm:
$_REQUEST[“sachID”].
- Đọc bảng dùng mysql_query(…) với điều kiện lọc là mã sách
trong bảng bằng với mã sách được chọn.
- Đối với mẩu tin thỏa điều kiện, xuất ra một table có 3
dịng: dịng đầu tiên là tên sách (in đậm) và canh giữa; dịng
thứ 2 có 2 cột, cột đầu là hình ảnh, cột thứ 2 là các thơng

112


Chương 4: Kết hợp PHP và MySQL

tin còn lại của sách, dòng cuối cùng tạo một link để quay về
trang “list_chi_tiet_sach.php”.
Đoạn mã của trang “list_dang_cot_co_link.php” được viết như
sau:

require("dbcon.inc");
$sql="select * from sach";
$result=mysql_query($sql,$link);
?>
<html>
<head>
/>
<title>List dang don gian</title>
</head>
<body>
if(mysql_num_rows($result)!=0)
{
echo
"align='center'
width='1200'
cellpadding='0'
cellspacing='0'
border='1'
style='border-collapse:collapse
#FF6600'>";
echo
"<tr>align='center'
colspan='5'
bgcolor='#FFEEE6'><b>THÔNG TIN SÁCH</b></td></tr>";
$stt=0;

while($row = mysql_fetch_array($result))
{
//Lấy giá trị từng colum
$varmasach= $row["sachID"];
$vartensach= $row["tensach"];
//Đặt tên file ảnh trùng với mã sách
$varhinh= "height='100'>";
$vartacgia= $row["tacgia"];
$varnxb= $row["nxb"];
$varnamxb= $row["namxb"];
$vargiatien= number_format($row["giatien"],0,'.','.');
if($stt%4 == 0)
{echo "<tr>";}
echo "<td valign='top'>";
echo "<table align='center'>";
echo
"<tr>align='center'>href='list_chi_tiet_sach.php?sachID=".$varmasach."'><b> $vartensach
</b></a></td></tr>";
echo "<tr><td align='center'> $varhinh </td></tr>";
echo "</table>";
echo "</td>";
$stt=$stt+1;
if($stt%4 == 0)
{echo "</tr>";}
}
echo "</table>";
}

?>
</body>

113


Chương 4: Kết hợp PHP và MySQL

</html>
//Đóng kết nối cơ sở dữ liệu
mysql_close($link);
?>

Đoạn mã của trang “list_chi_tiet_sach.php” được viết như
sau:
require("dbcon.inc");
//Mã sách được lấy từ địa chỉ trên thanh address của trình
duyệt
$sachID = $_REQUEST["sachID"];
$sql="select * from sach where sachID LIKE '$sachID'";
$result=mysql_query($sql,$link);
?>
<html>
<head>
/>
<title>List dang don gian</title>
</head>

<body>
if(mysql_num_rows($result)!=0)
{
echo
"align='center'
width='600'
cellpadding='2'
cellspacing='2' border='1' style='border:medium #FF6600'>";
while($row = mysql_fetch_array($result))
{
//Lấy giá trị từng colum
$varmasach= $row["sachID"];
$vartensach= $row["tensach"];
//Đặt tên file ảnh trùng với mã sách
$varhinh= "height='100'>";
$vartacgia= $row["tacgia"];
$varnxb= $row["nxb"];
$varnamxb= $row["namxb"];
$vargiatien= number_format($row["giatien"],0,'.','.');
echo
"<tr>align='center'
colspan='2'
bgcolor='#FFEEE6'><b> $vartensach </b></td></tr>";
echo "<tr>";
echo
"

align='center'
valign='middle'>
$varhinh
</td>";
echo "<td>";
echo "<table align='center'>";
echo
"<tr><td><b>
Tên
tác
giả:
</b>
$vartacgia</td></tr>";
echo
"<tr><td><b>
Nhà
xuất
bản:
</b>
$varnxb</td></tr>";
echo
"<tr><td><b>
Năm
xuất
bản:
</b>
$varnamxb</td></tr>";
echo "<tr><td><b> Giá tiền: </b> $vargiatien
VNĐ</td></tr>";


114


Chương 4: Kết hợp PHP và MySQL

echo "</table>";
echo "</td>";
echo
"align='right'><td>href='list_dang_cot_co_link.php'>Quay về</a></td></tr>";
echo "</tr>";
}
echo "</table>";
}
?>
</body>
</html>
//Đóng kết nối cơ sở dữ liệu
mysql_close($link);
?>

4.2.7. Hiển thị list chi tiết có phân trang
Ví dụ 4.7: Thiết kế trang (list_phan_trang_sach.php) hiển
thị thơng tin các quyển sách có định dạng như sau:

Hình 4.7: Thơng tin sách được hiển thị list có phân trang

Yêu cầu:

- Kết nối vào MySQL.
- Chọn csdl “BookDB”.
- Đọc bảng “sach”.
- Thiết kế và hiển thị các thơng tin về sách có phân trang
như hình trên.
Giải:
- Dùng mysql_connect(…) để kết nối vào csdl.

115


Chương 4: Kết hợp PHP và MySQL

- Dùng mysql_select_db(…) để chọn csdl “BookDB”.
- Để đọc bảng sách dùng mysql_query(…).
Duyệt
các
mẩu
tin
trong
mảng
sách
bằng
hàm
mysql_fetch_row(…) và cứ mỗi dịng thì xuất ra một mẩu tin
trong bảng sách theo định dạng trên.
- Trong đó, mỗi mẩu tin được duyệt xuất ra một table có 2
dịng: dịng đầu tiên là tên sách (in đậm) và canh giữa; dòng
thứ 2 có 2 cột, cột đầu là hình ảnh, cột thứ 2 là các thơng
tin cịn lại của sách.

Đoạn mã của trang “list_phan_trang_sach.php” được viết như
sau:
require("dbcon.inc");
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test</title>
</head>
<body>
/************************************************************
* Class:Pager
* Methods:
* findStart
* findPages
* pageList
* nextPrev
* Redistribute as you see fit.
***********************************************************/
class Pager{
/**********************************************************
* Hàm int findStart(int limit)
* Trả về dòng bắt đầu của trang được chọn dựa trên trang lấy được
và biến limit
* $limit cho biết số dòng (mẩu tin) hiển thị trên 1 trang
**********************************************************/
function findStart($limit)
{

if((!isset($_GET['page'])) || ($_GET['page'] == "1"))
{
$start = 0;
$_GET['page'] = 1;
}
else
{
$start = ($_GET['page']-1)*$limit;
}
return $start;
}
/*******************************************************
* Hàm int findPages(int count, int limit)
* Trả về số lượng trang cần thiết dựa trên tổng số dịng có trong
table và limit
* $count là tổng số mẩu tin trong bảng

116


Chương 4: Kết hợp PHP và MySQL

* Hàm floor(float $value) là hàm làm tròn, trả về số nguyên bằng
cách làm trịn số xuống số nhỏ gần nhất
* ví dụ: floor(4.3)=4; floor(9.999)=9; floor(-3.14)=-4
*******************************************************/
function findPages($count, $limit)
{
$pages = (($count % $limit) == 0) ? $count/$limit :
floor($count/$limit) + 1;

return $pages;
}
/*****************************************************
* Hàm string pageList(int curpage, int pages)
* Trả về danh sách trang theo định dạng "Trang đầu tiên < [Các
trang] > Trang cuối cùng"
* $curpage: Trang hiện tại
* $pages: Tổng số trang
* $_SERVER['PHP_SELF']: Lấy tên file hiện tại trên thanh address.
Tên file nằm trên folder gốc của website. Ví dụ: biến
$_SERVER['PHP_SELF']
trong
script
đặt
tại
địa
chỉ
sẽ là test.php
*****************************************************/
function pageList($curpage, $pages)
{
$page_list = "";
/*In trang đầu tiên và những link tới trang trước nếu cần*/
if(($curpage != 1) && ($curpage))
{
$page_list .= "
page=1\">[Trang đầu]</a> ";
}
if(($curpage - 1) > 0)
{

$page_list .= "
page=".($curpage-1). "\"> [Previous] </a> ";
}
/*In danh sách các trang và làm cho trang hiện tại đậm hơn va
mat link o chan*/
for($i=1;$i<=$pages;$i++)
{
if($i == $curpage)
{
$page_list .= "<b><big> ".$i." </big></b>";

}
else
{
$page_list .= "
? page=".$i."\"> ".$i." </a> ";
}
$page_list .= "";
}
/*In link của trang tiếp theo và trang cuối cùng nếu cần*/
if(($curpage+1) <= $pages)
{
$page_list .= "
page=".($curpage+1). "\"> [Next] </a> ";
}
if(($curpage != $pages) && ($pages != 0))

117



Chương 4: Kết hợp PHP và MySQL

{
$page_list .= "
page=".$pages."\">[Trang cuối]</a> ";
}
$page_list .= "</td>\n";
return $page_list;
}
/************************************************
* Hàm string nextPrev(int curpage, int pages)
* Returns "Previous | Next" string for individual pagination (it's
a word!)
**************************************************/
function nextPrev($curpage, $pages)
{
$next_prev = "";
if(($curpage-1) <= 0)
{
$next_prev .= "Về trang trước";
}
else
{
$next_prev .= "
page=".($curpage-1)."\">Về trang trước</a>";
}
$next_prev .= " | ";
if(($curpage+1) > $pages)
{
$next_prev .= "Đến trang sau";

}
else
{
$next_prev .= "
page=".($curpage+1)."\">Đến trang sau</a>";
}
return $next_prev;
}
} //Đóng class Pager
?>

?

//Khai báo biến class Pager
$p = new Pager;
//Yêu cầu giới hạn một trang có bao nhiêu dịng
$limit=2;
//Tìm dịng bắt đầu đưa vào biến trang lấy được (khai báo nếu nó
chưa có giá trị)
$start = $p->findStart($limit);
//Tìm số dòng của bảng nhờ câu lệnh truy vấn
$count = mysql_num_rows(mysql_query("select * from sach"));
//Tìm số trang dựa trên số dịng vừa có và giới hạn cho một trang
$pages = $p->findPages($count, $limit);
//Dùng start và limit để lấy số mẩu tin trong khoảng từ $start, và
số lượng mẩu tin trên một dòng là $limit
//Câu lệnh select * from sach LIMIT n,m cho phép truy vấn một số
mẩu tin tính từ vị trí thứ n đến vị trí thứ m


118


Chương 4: Kết hợp PHP và MySQL

$sql="select * from sach LIMIT ".$start.",".$limit;
$result=mysql_query($sql,$link);
//$result
=
mysql_query("select
*
from
".$start.",".$limit);

sach

LIMIT

//Kiểm tra số mẩu tin trả về
if(mysql_num_rows($result) != 0)
{
echo
"align='center'
width='600'
cellpadding='0'
cellspacing='0'
border='1'
style='border-collapse:collapse
#FF6600'>";

while($row = mysql_fetch_array($result))
{
//Lấy giá trị từng colum
$varmasach= $row["sachID"];
$vartensach= $row["tensach"];
//Đặt tên file ảnh trùng với mã sách
$varhinh= "height='100'>";
$vartacgia= $row["tacgia"];
$varnxb= $row["nxb"];
$varnamxb= $row["namxb"];
$vargiatien= number_format($row["giatien"],0,'.','.');
echo
"<tr>align='center'
colspan='2'
bgcolor='#FFEEE6'><b> $vartensach </b></td></tr>";
echo "<tr>";
echo
"align='center'
valign='middle'>
$varhinh
</td>";
echo "<td>";
echo "<table align='center'>";
echo
"<tr><td><b>
Tên
tác

giả:
</b>
$vartacgia</td></tr>";
echo
"<tr><td><b>
Nhà
xuất
bản:
</b>
$varnxb</td></tr>";
echo
"<tr><td><b>
Năm
xuất
bản:
</b>
$varnamxb</td></tr>";
echo "<tr><td><b> Giá tiền: </b> $vargiatien
VNĐ</td></tr>";
echo "</table>";
echo "</td>";
echo "</tr>";
}
echo "</table>";
}
// Xuất danh sách trang
$pagelist = $p->pageList($_GET['page'], $pages);
echo "

";
echo $pagelist;
echo "

";

?>
</body>
</html>
//Đóng kết nối cơ sở dữ liệu
mysql_close($link);

119


Chương 4: Kết hợp PHP và MySQL

?>

4.3. Tìm kiếm dữ liệu
4.3.1. Tìm kiếm đơn giản
Đối với một ứng dụng Web bất kỳ, nếu ứng dụng có sử dụng cơ sở dữ liệu thì ứng
dụng này bao giờ cũng cung cấp một trang cho phép người dùng tìm kiếm dữ liệu.
Bằng cách cung cấp cho người dùng một form nhập các từ khóa hay các tiêu
chuẩn cần tìm kiếm, bạn có thể truy cập cơ sở dữ liệu và trả về kết quả như người
dùng mong đợi.
Ví dụ 4.8: Thiết kế trang (list_tim_kiem_sach.php) cho phép
người dùng nhập vào tên sách cần tìm và hiển thị kết quả tìm
kiếm như hình sau:
Lần đầu tiên khi chạy trang “list_tim_kiem_sach.php”

Hình 4.8: Form tìm kiếm sách

Khi nhập vào tên sách cần tìm và nhấn nút “Tìm kiếm”, trang
“list_tim_kiem_sach.php” hiển thị như sau:


120