Giáo trình Hướng dẫn thiết kế web PHP và MySQL (Phần 2)

HIỂN THỊ CHI TIẾT MỘT TIN  
I. Phần 1: Tạo trang hiển thị chi tiết tin:  
1. Định nghĩa hàm lấy chi tiết 1 tin  
function ChiTietTin($idTin)  
settype($idTin, "int");  
{
$sql="SELECT idTin, TieuDe, TomTat, Ngay, urlHinh, Content, SoLanXem,  
TinNoiBat, tin.AnHien, tin.idLT, Ten, tin.idTL, TenTL  
FROM tin, loaitin, theloai  
WHERE tin.idLT=loaitin.idLT AND loaitin.idTL=theloai.idTL AND  
idTin=$idTin";  
$kq = mysql_query($sql) or die(mysql_error());  
return $kq; }  
182. Tạo file chitiettin.php  
<?php require_once "classTin.php"; if (isset($t)==false) $t = new tin;  
$idTin = $_GET['idTin']; settype($idTin,"int");  
$tin = $t->ChiTietTin($idTin);  
$row_tin=mysql_fetch_assoc($tin);?>  
<div id=path>Trang chủ/<?=$row_tin['TenTL'];?>/<?=$row_tin['Ten'];?></div>  
<div id="chitiettin">  
<div id="chitiettin_left">  
<p id="tin_tieude"> <?=$row_tin['TieuDe'];?> </p>  
<p id="tin_tomtat">  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
149  
<img src="<?=$row_tin['urlHinh'];?>" width=70 height=70 align=left>  
<?=$row_tin['TomTat'];?>  
</p>  
<div id="tin_noidung"> <?=$row_tin['Content'];?> </div>  
</div>  
<div id="chitiettin_right"> </div>  
</div>  
183. Định dạng  
#path{ background-color:#999900; color:#003366; font-weight:bold;  
padding-top:5px; padding-bottom:5px; }  
#chitiettin_left{ float:left; width:535px;; background-color:#FF9933}  
#chitiettin_right{ float:left; width:250px; background-color:#CCCCCC; }  
#chitiettin #tin_tieude{ font-weight:bold; color:#003366; }  
#chitiettin #tin_tomtat{  
color:#009999; text-align:justify; border-bottom:#CC3300 1px solid;  
padding-bottom:5px; padding-right:5px; font-size:16px}  
#chitiettin #tin_noidung{ text-align:justify}  
#chitiettin .ngay{ color:#036; font-style:italic; text-align:right}  
184. Cập nhật số lần xem tin  
-
Định nghĩa hàm  
function CapNhatSolanXemTin($idTin){  
settype($idTin,"int");  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
150  
$sql = "UPDATE tin SET SolanXem = SoLanXem+1 WHERE idTin = $idTin";  
mysql_query($sql) or die(mysql_error());  
}
-
Gọi hàm  
$t->CapNhatSolanXemTin($idTin);  
LVII. Phần 2: Nhúng vào trang chủ  
1. Mở trang home  
-
Ở đầu trang tiếp nhận tham số view trên thanh địa chỉ  
$view=$_GET['view'];  
-
Trong div content4, sửa code đang có để có kết quả sau:  
<?phpif ($view=="news") include "chitiettin.php";  
else include "tinmoi.php";?>  
185. Chỉnh địa chỉ cho tiêu đề các tin  
-
Mở file tinxemnhieu.php, chỉnh giá trị của thuộc tính href cho phù hợp  
( href="home.php?view=<?php echo $row['idTin'];?>" )  
-
-
Mở file tinnoibat.php, chỉnh giá trị của thuộc tính href cho phù hợp (2 chỗ)  
Mở file tinmoi.php, chỉnh giá trị của thuộc tính href cho phù hợp (2 chỗ)  
LVIII. Phần 3: Hiện số lần xem, ngày đăng, bản in , tin cũ hơn, mới hơn  
1. Mở chitiettin.php, trong chitiettin_right:  
186. Số lần xem, bản in  
<div id="util">  
<a href="#" id="banin"> Bản in </a> &nbsp;  
Xem: <?=$row_tin['SoLanXem'];?>.  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
151  
Đăng: <?=date('d/m/Y',strtotime($row_tin['Ngay']));?>  
</div>  
Định dạng div util :  
187. Tin cũ hơn , tin mới hơn  
-
Định nghĩa hàm  
function TinCuCungLoai($idTin, $lang ='vi', $sotin = 5){  
$sql="SELECT idTin, TieuDe, TomTat, urlHinh, Ngay, SoLanXem FROM tin  
WHERE AnHien = 1 AND idTin<$idTin AND ( lang ='$lang' or '$lang'='' )  
AND idLT = (SELECT idLT FROM tin WHERE idTin = $idTin)  
ORDER BY idTin DESC LIMIT 0, $sotin";  
$kq = mysql_query($sql) or die(mysql_error());  
return $kq; }  
function TinMoiCungLoai($idTin, $lang ='vi', $sotin = 5){  
$sql="SELECT idTin, TieuDe, TomTat, urlHinh, Ngay, SoLanXem FROM tin  
WHERE AnHien = 1 AND idTin>$idTin AND ( lang ='$lang' or '$lang'='' )  
AND idLT = (SELECT idLT FROM tin WHERE idTin = $idTin)  
ORDER BY idTin DESC LIMIT 0, $sotin";  
$kq = mysql_query($sql) or die(mysql_error());  
return $kq; }  
-
Gọi hàm và hiển thị:  
<div id="tinmoihon">  
<span class="caption"> Tin mới hơn</span>  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
152  
<?php $kq = $t->TinMoiCungLoai($idTin,$lang,10);?>  
<?php while ($row_kq = mysql_fetch_assoc($kq)) {?>  
<a href="#"> <?=$row_kq['TieuDe'];?> </a>  
<?php } ?>  
</div>  
<div id="tincuhon">  
<span class="caption"> Tin tiếp theo</span>  
<?php $kq = $t->TinCuCungLoai($idTin,$lang,10);?>  
<?php while ($row_kq = mysql_fetch_assoc($kq)) {?>  
<a href="#"> <?=$row_kq['TieuDe'];?> </a>  
<?php } ?>  
</div>  
Định dạng: tuỳ ý bạn  
188. Code jquery cho link Bản in  
$("#banin").click(function(){  
$("#header").hide();  
$("#content1").hide();  
$("#info").hide();  
$("#thanhmenu").hide();  
$("#content2").hide();  
$("#content3").hide();  
$("#util").hide();  
$("#footer").hide();  
$("#chitiettin_right").hide();  
$("#chitiettin").css("width","990px");  
$("#chitiettin_left").css("width","990px");  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
153  
$("#path").css("width","990px");  
return false; });  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
154  
THANH MENU  
I. Chép folder  
Chép folder apycom.com-deep-sky-blue vào site và xem thử index.html trong folder mới chép  
LIX. Tạo file menu.php  
<?php require_once "classTin.php"; if (isset($t)==false) $t = new tin;  
$lang='vi'; $theloai = $t ->TheLoai($lang);  
?>  
<div id="menu">  
<ul class="menu">  
<? while ($row_theloai = mysql_fetch_assoc($theloai) ) {?>  
<li><a class=parent href=#><span> <?=$row_theloai['TenTL'];?> </span></a></  
li>  
<? } ?>  
</ul>  
</div>  
LX. Lấy các loại tin trong từng thể loại và hiển thị (sau tag a)  
<? $loaitin = $t->LoaiTinTrongTheLoai($row_theloai['idTL']); ?>  
<ul><? while ($row_loaitin = mysql_fetch_assoc($loaitin)) {?>  
<li><a href=#><span> <?=$row_loaitin['Ten'];?> </span></a></li>  
<? }?>  
</ul>  
LXI. Chèn menu.js, menu.css  
LXII. Thêm div copyright ở sau cùng  
<div id="copyright"><a href="http://apycom.com/"></a></div>  
LXIII. Đưa vào trang chủ:  
Mở file home.php, trong div thanhmenu, include file menu.php  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
155  
LAB HIỂN THỊ CÁC TIN TRONG 1 LOẠI  
I. Định nghĩa hàm  
function TinTrongLoai($idLT){  
$sql="SELECT idTin, TieuDe, TomTat, urlHinh, Ngay, SoLanXem  
FROM tin WHERE AnHien = 1 AND idLT=$idLT  
ORDER BY idTin DESC";  
$kq = mysql_query($sql) or die(mysql_error());  
return $kq;  
}
function ChiTietLoaiTin($idLT) {  
settype($idLT, "int");  
$sql="SELECT idLT, Ten, loaitin.idTL, TenTL FROM loaitin, theloai  
WHERE loaitin.idTL = theloai.idTL AND idLT = $idLT";  
$kq = mysql_query($sql) or die(mysql_error());  
return $kq;  
}
LXIV. Tạo file tintrongloai.php  
a. Code  
<?php  
$idLT=$_GET['idLT']; settype($idLT, "int");  
$tin = $t->TinTrongLoai($idLT);  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
156  
$loaitin = $t->ChiTietLoaiTin($idLT);  
$row_loaitin = mysql_fetch_assoc($loaitin);  
?>  
<div id="tintrongloai">  
<div id="path"> TRANG CHỦ > <?=$row_loaitin['TenTL'];?> > <?=$row_loaitin['Ten'];?>  
</div>  
<?php while ($row_tin=mysql_fetch_assoc($tin)) {?>  
<div class="row_tin">  
<p class="tieude"> <?=$row_tin['TieuDe'];?> </p>  
<p class="ngay">  
<img src="<?=$row_tin['urlHinh'];?>" width="70" height="70" align="left">  
Ngày đăng: <?=date('d/m/Y',strtotime($row_tin['Ngay']));?>.  
Số lần xem: <?=$row_tin['SoLanXem'];?> </p>  
<p class="tomtat"> <?=$row_tin['TomTat'];?> </p>  
<div class="xemtiep"> <a href="#">Xem chi tiết</a> </div>  
</div>  
<?php } ?>  
</div> <!--div tintrongloai -->  
b. Định dạng CSS  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
157  
LXV. Đưa vào trang chủ  
-
-
-
Nhúng trang tintrongloai.php vào content4 khi giá trị biến view là cat  
Chỉnh link cho các tên loại tin trong thanh menu  
Sửa giá trị href trong link xem tiếp để người xem nhắp xem tin  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
158  
LAB XỬ LÝ TÌM KIẾM  
I. Chỉnh file formtim.php và chỉnh các tham số  
Action= ketquatimkiem.php  
Method: get  
LXVI. Định nghĩa hàm TimKiem  
function TimKiem($tukhoa, &$totalRows, $pageNum=1, $pageSize=5){  
$startRow = ($pageNum-1)*$pageSize;  
$tukhoa = trim(strip_tags($tukhoa));  
if (get_magic_quotes_gpc()==false) {  
$tukhoa = mysql_real_escape_string($tukhoa);  
}
$sql = "SELECT idTin, TieuDe, TomTat, urlHinh, Ngay, SoLanXem, Ten, TenTL  
FROM tin, loaitin, theloai  
WHERE tin.AnHien = 1 AND tin.idLT = loaitin.idLT AND tin.idTL =  
theloai.idTL  
AND (TieuDe RegExp '$tukhoa' or TomTat RegExp '$tukhoa')  
ORDER BY idTin DESC LIMIT $startRow , $pageSize ";  
$kq = mysql_query($sql) or die (mysql_error());  
$sql = "SELECT count(*)  
FROM tin, loaitin, theloai  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
159  
WHERE tin.AnHien = 1 AND tin.idLT = loaitin.idLT AND tin.idTL =  
theloai.idTL  
AND (TieuDe RegExp '$tukhoa' or TomTat RegExp '$tukhoa') ";  
$rs = mysql_query($sql) or die (mysql_error());  
$row_rs = mysql_fetch_row($rs);  
$totalRows = $row_rs[0];  
return $kq;  
}
LXVII. Tạo file ketquatimkiem.php  
1. Tiếp nhận tham số  
$tukhoa = $_GET['tukhoa'];  
189. Khai báo các biến dùng để phân trang  
$pageSize = 10;  
$pageNum = $_GET['pageNum']; settype($pageNum, "int");  
if ($pageNum<=0) $pageNum=1;  
190. Lấy dữ liệu  
$kq = $t->TimKiem($tukhoa,$totalRows, $pageNum, $pageSize);  
191. Hiển thị dữ liệu  
<div id="ketquatimkiem">  
<p class="caption">KẾT QUẢ TÌM KIẾM</p>  
<?php while ($row_tin = mysql_fetch_assoc($kq) ) {?>  
<?php ob_start(); ?>  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
160  
<div class="row_tin">  
<p><a href="#">{TieuDe}</a><span>({TenTL} / {Ten})</span></p>  
<p><img src="{urlHinh}" width="70" height="70" align="left">  
<span class=ngay>Ngày đăng: {Ngay}.</span>  
<span class=solanxem>Số lần xem: {SoLanXem} </span>  
</p>  
<p class="tomtat"> {TomTat}</p>  
</div>  
<?php $str = ob_get_clean();  
$str = str_replace("{idTin}" , $row_tin['idTin'] , $str);  
$str = str_replace("{TieuDe}" , $row_tin['TieuDe'] , $str);  
$str = str_replace("{TomTat}" , $row_tin['TomTat'], $str);  
$str = str_replace("{urlHinh}" , $row_tin['urlHinh'], $str);  
$str=str_replace("{Ngay}",date("d/m/Y",strtotime($row_tin['Ngay'])  
),$str);  
$str = str_replace("{SoLanXem}" , $row_tin['SoLanXem'], $str);  
$str = str_replace("{Ten}" , $row_tin['Ten'], $str);  
$str = str_replace("{TenTL}" , $row_tin['TenTL'], $str);  
echo $str;  
?>  
<?php } ?>  
</div> <!-- div ketquatimkiem -->  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
161  
192. Hiện số tin tìm được phía trên vòng lặp  
<p>Tìm được <?php echo $totalRows?> tin</p>  
193. Hiện thanh phân trang  
194. Định dạng CSS  
195. Test: Chạy file formtim để test  
196. Đưa code xử lý vào trang home  
-
-
-
Xóa thuộc tính action của form tìm kiếm  
Thêm vào form tìm kiếm 1 hidden field tên là view, giá trị là search  
Trong trang chủ, nếu giá trị biến view là seach thì nhúng trang kết quả tìm kiếm vào  
content4  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
162  
TẠO TIÊU ĐỀ CHO CÁC TRANG  
I. Mở file classTin.php và định nghĩa hàm sau:  
function getTitle($view=''){  
if ($view=='') return "Tin tức online";  
elseif ($view=='search') return "Tím kiếm thông tin";  
elseif ($view=='register') return "Đăng ký thành viên";  
elseif ($view=="news"){  
$id = $_GET['idTin']; settype($id,"int");  
$kq = mysql_query("select TieuDe from tin where idTin=$id") or die(mysql_error()  
);  
if (mysql_num_rows($kq)<=0) return "Tin tức online";  
$row_kq = mysql_fetch_row($kq);  
return $row_kq[0];  
}
elseif ($view=="cat"){  
$id = $_GET['idLT']; settype($id,"int");  
$kq = mysql_query("select Ten from loaitin where idLT=$id") or die(mysql_error()  
);  
if (mysql_num_rows($kq)<=0) return "Tin tức online";  
$row_kq = mysql_fetch_row($kq);  
return $row_kq[0];  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
163  
}
} //function getTitle  
II. Mở file home.php  
Code trong tag title  
<?=$t->getTitle($view); ?>  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
164  
.HTACCESS  
I. Chuẩn bị  
1. Bật mod rewrite của apache  
-
-
-
Mở file httpd.conf trong c:/appserv/Apache2.2/conf  
Bỏ dấu # ở đầu dòng 196  
Lưu file và restart Apache  
197. Test lệnh RewriteRule  
RewriteRule ^news/songdep/$ home.php?view=cat&idLT=12 [L]  
RewriteRule ^news/thohay/$ home.php?view=cat&idLT=28 [L]  
198. File home.php, trong tag head, thêm lệnh sau:  
<base href="http://<?=$_SERVER['SERVER_NAME'];?>/tintuc/" />  
LXVIII. Giả địa chỉ của 1 tin  
1. File .htaccess  
RewriteEngine on  
RewriteRule ^news/(.*).html$ home.php?view=news&TieuDe_KhongDau=$1  
199. Tiếp nhận tiêu đề không dấu:  
Trong file chitiettin.php, bỏ lệnh tiếp nhận idTin, và thay bằng đoạn code sau:  
$TieuDe_KhongDau = $_GET['TieuDe_KhongDau'];  
if (get_magic_quotes_gpc()==false)  
$TieuDe_KhongDau = mysql_real_escape_string($TieuDe_KhongDau);  
$idTin = $t->LayidTin($TieuDe_KhongDau);  
200. Định nghĩa hàm LayidTin  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
165  
function LayidTin($TieuDe_KhongDau){  
$sql = "SELECT idTin FROM tin  
WHERE TieuDe_KhongDau='$TieuDe_KhongDau'";  
$kq = mysql_query($sql) or die(mysql_errno());  
$row_kq = mysql_fetch_assoc($kq);  
return $row_kq['idTin'];  
}
201. Tạo liên kết xem tin với địa chỉ giả  
-
Mở các file tinxemnhieu.php, tinnoibat.php, tinmoi.php, tintrongloai.php, chitiettin.php,  
ketquatimkiem.php rồi chỉnh địa chỉ các liên kết sang cấu trúc mới  
-
Mở classTin, bổ sung thêm cột TieuDe_KhongDau cho các hàm lấy tin  
LXIX. Giả địa chỉ của loại tin  
1. File .htaccess  
RewriteRule ^cat/(.*)/$ home.php?view=cat&Ten_KhongDau=$1 [L]  
2. Tiếp nhận tham số Ten_KhongDau  
File file tintrongloai.php, bỏ lệnh tiếp nhận tham số idLT, thay bằng code sau:  
$Ten_KhongDau = $_GET['Ten_KhongDau'];  
if (get_magic_quotes_gpc()==false)  
$Ten_KhongDau=mysql_real_escape_string($Ten_KhongDau);  
$idLT = $t->LayidLT($Ten_KhongDau);  
202. Định nghĩa hàm LayidLT  
function LayidLT($Ten_KhongDau){  
$sql="select idLT from loaitin where Ten_KhongDau='$Ten_KhongDau'";  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
166  
$kq = mysql_query($sql) or die (mysql_error());  
$row_kq = mysql_fetch_assoc($kq);  
$idLT= $row_kq['idLT'];  
return $idLT;  
}
203. Tạo liên kết để xem tin trong loại với địa chỉ giả  
-
file menu.php: chỉnh địa chỉ cho liên kết của tên các loại tin như sau:  
cat/<?php echo $row_loaitin['Ten_KhongDau']?>/  
-
classDB.php: thêm field Ten_KhongDau vào hàm LoaiTinTrongTheLoai  
204. Chỉnh thanh phân trang  
-
File .htaccess: xóa lệnh  
RewriteRule ^cat/(.*)/$ home.php?view=cat&Ten_KhongDau=$1 [L]  
và gõ hai lệnh sau:  
RewriteRule ^cat/(.*)/(.*)/$ home.php?view=cat&Ten_KhongDau=$1&pageNum=$2  
{L]  
RewriteRule ^cat/(.*)/$ home.php?view=cat&Ten_KhongDau=$1&pageNum=1 [L]  
-
-
File tintrongloai.php, sửa lời gọi hàm phân trang pageList như sau:  
<?=$t->pagesList1("cat/$Ten_KhongDau",$totalRows,$pageNum,$pageSize,5)?>  
Định nghĩa hàm pagesList1  
function pagesList1($baseURL,$totalRows,$pageNum=1,$pageSize=5,$offset=3){  
if ($totalRows<=0) return "";  
$totalPages = ceil($totalRows/$pageSize);  
if ($totalPages<=1) return "";  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
167  
$from = $pageNum - $offset;  
if ($from <=0) { $from = 1;  
$to = $pageNum + $offset;  
$to = $offset*2; }  
if ($to > $totalPages) { $to = $totalPages; }  
$links = "";  
for($j = $from; $j <= $to; $j++) {  
$links= $links . "<a href = '$baseURL/$j/'>$j</a>";  
} //for  
return $links;  
}
LXX. Giả địa chỉ cho tìm kiếm  
1. File formtim.php  
2. Chỉnh method thành post  
3. Trong tag form, thêm lệnh để được như sau:  
<form onsubmit="this.action='/tintuc/search/' +  
document.formtim.tukhoa.value+'/'" action="" method="post" id="formtim">  
4. File htaccess, thêm lệnh  
RewriteRule ^search/(.*)/$ home.php?view=search&tukhoa=$1 [L]  
LXXI. Các chỉ thị hữu ích khác trong file htaccess  
1. Đổi tên mở rộng php  
RewriteRule ^(.*)\.tco$ $1.php  
Mở file home, tìm và sửa các request đến các file .php thành .tco (formbinhchon.tco,  
ketquabinhchon.tco, tinxemnhieu.tco, tinnoibat.tco, formtim.tco, formtimnangcao.tco)  
NHÂ  
́
̣
NƠI DUY NHÂ  
́
́
̣
̀
̣
C ĐA  
̉
̉
̀
̃
́
̣
THÊ  
̉
168  
Tải về để xem bản đầy đủ
pdf 122 trang yennguyen 13/04/2022 6500
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Hướng dẫn thiết kế web PHP và MySQL (Phần 2)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfgiao_trinh_huong_dan_thiet_ke_web_php_va_mysql_phan_2.pdf