LỜI MỞ ĐẦU☼☼☼☼☼☼☼☼ Sau một thời gian học tập nghiên cứu và được sự hướng dẫn tận tình của giảng viên hướng dẫn thầy Hồ Diên Lợi nhóm PTV đã hoàn thành Đề tài 01: Xây dựng trang thông tin
Trang 1LỜI MỞ ĐẦU
☼☼☼☼☼☼☼☼
Sau một thời gian học tập nghiên cứu và được sự hướng dẫn tận tình của giảng
viên hướng dẫn thầy Hồ Diên Lợi nhóm PTV đã hoàn thành Đề tài 01: Xây dựng
trang thông tin ứng dụng quản lý sinh viên (dữ liệu lưu dang XML, có các chức năng thêm, bớt, sửa, tìm kiếm, trình bày chi tiết)
Khi nói về XML thì đó là một ngôn ngữ siêu đánh dấu cho việc trình bày chuyên ngành Mỗi ngôn ngữ đánh dấu dựa trên XML được gọi là ứng dụng XML
VD:Trình duyệt Moliza, bảng tính Gnumeric, trình biên dịch XML, một ứng
dụng XML có thể đặc tả chuyên ngành như là Ngôn ngữ đánh dấu hóa học cho hóa học, hoặc GML cho cây phả hệ
Mỗi ứng dụng XML gồm có những cú pháp và vốn từ riêng của nó, những vốn
từ và cú pháp này tuân theo những qui tắc của XML
XML là một định dạng rất mềm dẻo cho dữ liệu XML được chọn là cở sở cho những ngôn ngữ khác vì XML cung cấp một sự định dạng tài liệu rất tốt , làm cho việc truy xuất tài liệu đó dễ dàng
XML rất lí tưởng cho những tài liệu đồ sộ và phức tạp ,nó không chỉ cho phép bạn chỉ rõ từ vựng định nghĩa các phần tử trong tài liệu, mà còn chó phép chỉ ra mối quan hệ giữa các phần tử này
XML cũng cung cấp phía client bao gồm kĩ thuật tích hợp dữ liệu từ nhiều nguồn và trình bày nó chỉ trong một tài liệu duy nhất
Đề tài nhóm PTV cũng sử dụng ngôn ngữ XML.Nội dung tài liệu XMl mà nhóm PTV đang thực hiện được viết bằng ngôn ngữ PHP với cơ sở dữ liệu bằng XML
Trong quá trình thực hiện đồ án nhóm PTV cũng gặp nhiều khó khăn về kiến thức rất rộng của ngôn ngữ PHP,nhưng dưới sự hướng dẫn của thầy Hồ Diên Lợi và
sự hỗ của mọi người trong nhóm cuối cùng nhóm PTV đã hoàn thành đề tài
Nhóm PTV xin chân thành cảm ơn sự giúp đỡ tận tình của thầy Hồ Diên Lợi đã giúp em hoàn thành đề tài một cách tốt nhất.Kính mong thầy đóng góp ý kiến để nhưng lần sau nhóm em sẽ hoàn thành tốt hơn
Trang 2NỘI DUNG CHI TIẾT:
I.ĐỊNH DẠNG TÀI LIỆU XML(DTD):
<!ELEMENT qlsinhvien (sinhvien)*>
<!ELEMENT sinhvien (tensv, ngaysinh, gioitinh, diachi, lop, khoa, khoahoc, diemtb)>
<!ATTLIST sinhvien masv ID #REQUIRED>
<!ELEMENT tensv (ho, ten)>
<!ELEMENT ho (#PCDATA)>
<!ELEMENT ten (#PCDATA)>
<!ELEMENT ngaysinh (#PCDATA)>
<!ELEMENT gioitinh (#PCDATA)>
<!ELEMENT diachi (#PCDATA)>
<!ELEMENT lop (#PCDATA)>
<!ATTLIST lop malop CDATA #REQUIRED>
<!ELEMENT khoa (#PCDATA)>
<!ATTLIST khoa makhoa CDATA #REQUIRED>
<!ELEMENT khoahoc (#PCDATA)>
<!ELEMENT ketqua (monhoc)+>
<!ELEMENT monhoc (tenmh, diem)>
<!ELEMENT tenmh (#PCDATA)>
<!ELEMENT diem (#PCDATA)>
II.TÀI LIỆU XML:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE qlsinhvien PUBLIC "XMLHOCSINH" "sinhvien.dtd">
<qlsinhvien>
<sinhvien masv="H3211111125">
<tensv>
<ho>Nguyễn Hồng</ho>
<ten>Phú</ten>
</tensv>
<ngaysinh>08/07/1990</ngaysinh>
<gioitinh>Nam</gioitinh>
<diachi>Q9 - TP.HCM</diachi>
<lop malop="32">Tin32B</lop>
<khoa makhoa="CNTT">Công Nghệ Thông Tin</khoa>
<khoahoc>Khóa 32</khoahoc>
<ketqua>
<monhoc>
<tenmh>Toán RR</tenmh>
<diem>8</diem>
Trang 3<monhoc>
<tenmh>LT for win</tenmh>
<diem>9</diem>
</monhoc>
<monhoc>
<tenmh>LT web</tenmh>
<diem>10</diem>
</monhoc>
</ketqua>
</sinhvien>
<sinhvien masv="H3211111208">
<tensv>
<ho>Nguyễn Quang</ho>
<ten>Vinh</ten>
</tensv>
<ngaysinh>15/03/1990</ngaysinh>
<gioitinh>Nam</gioitinh>
<diachi>Q9 - TP.HCM</diachi>
<lop malop="32">Tin32B</lop>
<khoa makhoa="CNTT">Khoa CNTT</khoa>
<khoahoc>Khoa 32</khoahoc>
<ketqua>
<monhoc>
<tenmh>Toán RR</tenmh>
<diem>8</diem>
</monhoc>
<monhoc>
<tenmh>LT for win</tenmh>
<diem>9</diem>
</monhoc>
<monhoc>
<tenmh>LT web</tenmh>
<diem>10</diem>
</monhoc>
</ketqua>
</sinhvien>
<sinhvien masv="H3211111182">
<tensv>
<ho>Le Thi</ho>
<ten>Trang</ten>
</tensv>
<ngaysinh>08/07/1990</ngaysinh>
<gioitinh>Nam</gioitinh>
<diachi>Q9 - TP.HCM</diachi>
<lop malop="32">Tin32B</lop>
Trang 4<khoa makhoa="CNTT">Khoa CNTT</khoa>
<khoahoc>Khoa 32</khoahoc>
<ketqua>
<monhoc>
<tenmh>Toán RR</tenmh>
<diem>8</diem>
</monhoc>
<monhoc>
<tenmh>LT for win</tenmh>
<diem>9</diem>
</monhoc>
<monhoc>
<tenmh>LT web</tenmh>
<diem>10</diem>
</monhoc>
</ketqua>
</sinhvien>
</qlsinhvien>
Trong quá trình hiển thị và thao tác ta cần viết 1 số function để thực hiện việc truy cập DOM trên tài liệu XML
DOMDocument php là 1 lớp được định nghĩa sẵn cho phép ta truy cập các tài liệu XML, HTML, XHTML,
<?php
$xmldoc = new DOMDocument('1.0', 'UTF-8');
$xmldoc->preserveWhiteSpace = false;
$xmldoc->load("xml/sinhvien.xml");
$xmldoc->formatOutput = true;
// Hàm trả về giá trị của node đầu tiên với tên tag của node đó truyền vào
function getFirstValue($node,$tag){
return $node->getElementsByTagName($tag)->item(0)->nodeValue;
}
// Hàm trả về node đầu tiên với tên tag của node đó truyền vào
function getFirstNode($node,$tag){
return $node->getElementsByTagName($tag)->item(0);
}
// Hàm gán giá trị cho 1 node $node có tag $tag với giá trị $value
function setNodeValue($node,$tag,$value){
getFirstNode($node,$tag)->nodeValue = $value;
}
// Hàm trả về node sinhvien tìm được từ tag masv
function getSinhVien($xmldoc,$masv){
// Lấy tất cả các node sinh viên
Trang 5$allSinhVien = $xmldoc->getElementsByTagName("sinhvien");
// Duyệt từng node sinh viên
foreach($allSinhVien as $sinhvien)
{
// Tìm được masv với masv là 1 attribute
if(trim(getValueAttribute($sinhvien,"masv")) == trim($masv))
return $sinhvien; // Trả về node sinh viên tìm được
}
}
// function tìm 1 từ của tên
function TrimName($name)
{
$name = @explode(" ",trim($name));
return $name[0];
}
// Hàm trả về mảng các node sinhvien tìm được từ 1 thẻ bất kỳ trong node sinhvien
// Ví dụ sinh viên có tag ngaysinh
function searchSinhVien($xmldoc,$tag,$value){
// Nếu tìm theo mã, vì mã mà 1 attribute định danh nên ta sử dụng lại hàm getSinhVien
if($tag == "masv")
return array(getSinhVien($xmldoc,$value));
// Tìm tất cả sinhvien
$allSinhVien = $xmldoc->getElementsByTagName("sinhvien");
// Duyệt từng sinhvien
foreach($allSinhVien as $sinhvien)
{
// Nếu tìm theo họ hoặc tên (vì họ tên là 2 tag con của tag tensv trong node sinhvien)
if($tag == "ho" || $tag == "ten")
{
$nodeTensv=$sinhvien->getElementsByTagName("tensv")->item(0);
// Nếu tìm được giá trị
if(TrimName(getFirstValue($nodeTensv,$tag)) == TrimName($value))
$arraySinhVien[] = $sinhvien; // gán vào mảng
}
// Tìm những tag không có children node còn lại
else if(getFirstValue($sinhvien,$tag) == $value)
{
$arraySinhVien[] = $sinhvien;
}
}
return $arraySinhVien;
Trang 6// Hàm tìm giá trị thuộc tính atribute, đối tượng $node phải chứa $value tìm kiếm
// Ví dụ node sinhvien có masv là attribute
function getValueAttribute($node,$value)
{
return @$node->getAttribute($value);
}
// Hàm gán giá trị cho 1 attribute tìm được, $node phải tồn tại attribute
$nameAttribute
function setNodeAttribute($node,$nameAttribute,$value)
{
$node->setAttribute($nameAttribute,$value);
}
?>
III.TRANG HIỆN THỊ NỘI DUNG TÀI LIỆU XML:
III.1.Hình ảnh trang hiện thị nội dung:
Trang 7III.2.Phần code trang hiện thị nội dung:
<?php
require_once("function.php");
$select = @$_GET["select"];
?>
<h2 align="center"><a href="index.php" class="style5">Danh sách sinh
viên</a></h2>
<table align="center" width="1000px" border="1" bordercolor="#0033FF"
cellpadding="0" cellspacing="0">
<tr>
<td colspan="9">
<form method="get" action="">
<label>
<span class="style6">Tìm kiếm theo:</span> </label>
<select name="select" id="select">
<option <?php echo ($select == "masv") ? "selected" : ""; ?>
value="masv">Mã sinh viên</option>
<option <?php echo ($select == "ho") ? "selected" : ""; ?>
value="ho">Họ sinh viên</option>
<option <?php echo ($select == "ten") ? "selected" : ""; ?>
value="ten">Tên sinh viên</option>
<option <?php echo ($select == "ngaysinh") ? "selected" : ""; ?>
value="ngaysinh">Ngày sinh</option>
<option <?php echo ($select == "gioitinh") ? "selected" : ""; ?>
value="gioitinh">Giới tính</option>
<option <?php echo ($select == "lop") ? "selected" : ""; ?>
value="lop">Lớp</option>
Trang 8<option <?php echo ($select == "khoa") ? "selected" : ""; ?>
value="khoa">Tên khoa</option>
</select>
<input name="noidung" type="text" id="noidung"
value="<?php echo $_GET["noidung"]; ?>" size="30" />
<input name="timkiem" type="submit" value="Tìm kiếm" />
</form> </td>
</tr>
<tr>
<td><span class="style10">Mã sinh viên</span></td>
<td><span class="style10">Tên sinh viên</span></td>
<td><span class="style10">Ngày sinh</span></td>
<td><span class="style10">Giới tính</span></td>
<td><span class="style10">Địa chỉ</span></td>
<td><span class="style10">Lớp</span></td>
<td><span class="style10">Khoa</span></td>
<td><span class="style10">Sửa</span></td>
<td><span class="style10">Xóa</span></td>
</tr>
<?php
if($_GET["timkiem"]) // nếu tìm kiếm
{
$noidung = $_GET["noidung"];
// Danh sách sinh viên tìm được
$arraysv = searchSinhVien($xmldoc,$select, $noidung);
// Đếm nếu danh sách rỗng
if(count($arraysv) == 0)
die("<p align=\"center\">Không tìm thấy sinh viên!</p>");
// Duyệt từng sinhvien
foreach($arraysv as $sinhvien)
{
// Gán kết quả
$masv = getValueAttribute($sinhvien,"masv");
$tensv = getFirstValue($sinhvien,"ho")."
".getFirstValue($sinhvien,"ten");
$ngaysinh = getFirstValue($sinhvien,"ngaysinh");
$gioitinh = getFirstValue($sinhvien,"gioitinh");
$diachi = getFirstValue($sinhvien,"diachi");
$lop = getFirstValue($sinhvien,"lop");
$khoa= getValueAttribute(getFirstNode($sinhvien,"khoa"),"makhoa");
?>
<tr>
<td><?php echo $masv; ?></td>
<td><?php echo $tensv; ?></td>
<td><?php echo $ngaysinh; ?></td>
Trang 9<td><?php echo $gioitinh; ?></td>
<td><?php echo $diachi; ?></td>
<td><?php echo $lop; ?></td>
<td><?php echo $khoa; ?></td>
<td><a href="editXml.php?masv=<?php echo
$masv; ?>">Sửa</a></td>
<td><a href="saveXml.php?masv=<?php echo $masv; ?>">Xóa</a></td>
</tr>
<?php
}
// end foreach
}
Else
// Hiển thị thông thường
{
$qlsinhvien = $xmldoc->getElementsByTagName("sinhvien");
foreach($qlsinhvien as $sinhvien)
{
$masv = getValueAttribute($sinhvien,"masv");
$tensv = getFirstValue($sinhvien,"ho")."
".getFirstValue($sinhvien,"ten");
$ngaysinh = getFirstValue($sinhvien,"ngaysinh");
$gioitinh = getFirstValue($sinhvien,"gioitinh");
$diachi = getFirstValue($sinhvien,"diachi");
$lop = getFirstValue($sinhvien,"lop");
$khoa = getValueAttribute(getFirstNode($sinhvien,"khoa"),"makhoa");
?>
<tr>
<td><?php echo $masv; ?></td>
<td><?php echo $tensv; ?></td>
<td><?php echo $ngaysinh; ?></td>
<td><?php echo $gioitinh; ?></td>
<td><?php echo $diachi; ?></td>
<td><?php echo $lop; ?></td>
<td><?php echo $khoa; ?></td>
<td><a href="editXml.php?masv=<?php echo $masv; ?>">Sửa</a></td>
<td><a href="saveXml.php?masv=<?php echo $masv; ?
>">Xóa</a></td>
</tr>
<?php
}
// end foreach
}
// else
Trang 10</table>
<p align="center"><a target="_blank" href="xml/sinhvien.xml"><b>Danh
sách sinh viên XML</b></a><a href="addXml.php"><b>Thêm Sinh
viên</b></a></p>
<p align="center" class="style1" style="padding:5px;"><span class="style3">GVHD: Thầy Hồ Diên Lợi</span><br />
<span class="style4">Nhóm thực hiện: PTV Nguyễn Hồng Phú Lê Thị Trang -Nguyễn Quang Vinh</span></p>
</body>
</html>
IV.TRANG CẬP NHẬT NỘI DUNG TÀI LIỆU XML:
IV.1.Hình ảnh trang cập nhật nội dung:
Thông tin muốn sửa sẽ được hiện thị lên trang
Khi hoàn thành xong thông tin sửa thì nhấn Sửa sinh viên để lưu lại thông tin đã được
sửa
Nhấp Quay lại để trở lại trang hiện thị.
IV.2.Phần code trang cập nhật nội dung:
<?php
Trang 11$masv = $_GET["masv"];
// Node sinh viên tìm được
$sinhvien = getSinhVien($xmldoc,$masv) or die("Không tìm thấy sinh viên");
// Tên SV
$hosv = getFirstValue($sinhvien,"ho");
$tensv = getFirstValue($sinhvien,"ten");
// Ngày sinh
$ngaysinh = getFirstValue($sinhvien,"ngaysinh");
// Giới tính
$gioitinh = getFirstValue($sinhvien,"gioitinh");
// Địa chỉ
$diachi = getFirstValue($sinhvien,"diachi");
// Lớp
$lop = getFirstNode($sinhvien,"lop"); // xác định node lop trong node sinhvien
$malop = $lop->getAttribute("malop"); // lấy giá trị attribute malop trong node lop
$tenlop = getFirstValue($sinhvien,"lop"); // lấy giá trị tenlop trong node lop
// Khoa
$khoa = getFirstNode($sinhvien,"khoa"); // xác định node khoa trong node khoa
$makhoa = $khoa->getAttribute("makhoa"); // lấy giá trị attribute makhoa trong node khoa
$tenkhoa = getFirstValue($sinhvien,"khoa"); // lấy giá trị tenkhoa trong node khoa // Khóa học
$khoahoc = getFirstValue($sinhvien,"khoahoc");
// Đếm số môn học trong node ketqua
$nodeKetqua = getFirstNode($sinhvien,"ketqua");
$arrayMonHoc = $nodeKetqua->getElementsByTagName("monhoc");
$somon = 0;
foreach($arrayMonHoc as $monhoc)
{
$ketqua["tenmh"][$somon] = getFirstValue($monhoc,"tenmh"); // lấy tên môn học
$ketqua["diem"][$somon] = getFirstValue($monhoc,"diem");
$somon++;
}
?>
<h2 align="center">Sửa sinh viên</h2>
<form name="formsua" method="post" action="saveXml.php">
<fieldset>
<label> Mã sinh viên: </label> <input style="background:#CCCCCC" type="text"
name="masv" value="<?php echo $masv; ?>" readonly="true" /> <br />
<label> Tên sinh viên: </label><input name="hosv" type="text" id="ho"
value="<?php echo $hosv; ?>" size="18" />
<input name="tensv" type="text" value="<?php echo $tensv; ?>" size="5" />
<br />