TRƯỜNG ĐẠI HỌC ĐÀ LẠT
KHOA TOÁN – TIN
BÀI BÁO BÀI TẬP NHÓM
Đề tài 16 : Xây dựng ‘chương trình quản lý sinh viên’
với PHP và MySQL.
Đà Lạt, Ngày 30-04-2010
1
1
TRƯỜNG ĐẠI HỌC ĐÀ LẠT
KHOA TOÁN – TIN
BÀI BÁO BÀI TẬP NHÓM
Đề tài 16 Xây dựng ‘chương trình quản lý sinh viên’
với PHP và MySQL.
Thành viên nhóm
Trần Ngọc Nhật 0712144
Phạm Thị Miền 0713353
Chu Văn Phương 0713362
Nguyễn Xuân Trung 0713376
Lê Thế Trung 0713378
Đà Lạt, Ngày 30-03-2010
2
2
LỜI NÓI ĐẦU
Ngày nay,cùng với sự phát triển của khoa học kỹ thuật, các mạng máy tính đã phát
triển một cách nhanh chóng và đa dạng. Những ứng dụng, tiện ích từ sự phát triển này hỗ
trợ cho con người rất nhiều trong công việc cũng như trong mọi lĩnh vực khác nhau.
Trong đó có tiện ích từ Website. Do đó Website được nhiều người quan tâm, nghiên cứu
và phát triển.
Từ thực tế học tập, yêu cầu quản lý sinh viên của lớp nói riêng và của khoa nói
Trân trọng cảm ơn ! – Nhóm thực hiện đề tài.
4
4
MỤC LỤC
Chương 1: Xây dựng cơ sở dữ liệu quản lý sinh viên.
Chương 2: Thiết kế giao diện Web.
Chương 3: Những thao tác chính.
I. Giới thiệu class MySQL.php và Xtemplete.php.
II. Trang index.php.
III. Trang function.php.
VI. Trang config.php.
V. Trang login.php.
VI. Trang register.php.
VII. Trang seach.php.
VIII. Trang hienthi.php.
IX. Trang hieuchinh.php.
X Trang backup.php.
XI. Trang Ajax.
TỔNG KẾT
TÀI LIỆU THAM KHẢO
5
5
Phần 1 Xây dựng cơ sở dữ liệu quản lý sinh viên
I. Cấu trúc cơ sở dữ liệu
Cơ sở dữ liệu gồm 14 bảng
MaHe varchar(2) NOT NULL,
TenHe varchar(10) NOT NULL,
PRIMARY KEY (MaHe)
8. Bảng sinh viên
Mssv varchar(7) NOT NULL,
HoTen varchar(35) NOT NULL,
Image varchar(50) NOT NULL,
NgaySinh date NOT NULL,
Phai varchar(3) NOT NULL,
NoiSinh varchar(50) NOT NULL,
MaLop varchar(10) NOT NULL,
PRIMARY KEY (Mssv)
9. Chi tiết lý lịch
Mssv varchar(7) NOT NULL,
HKTT varchar(200) NOT NULL,
MaDT varchar(6) NOT NULL,
TonGiao varchar(30) NOT NULL,
NgayVDang date NOT NULL,
NgayVDoan date NOT NULL,
NgayVHSV date NOT NULL,
HoTenCha varchar(35) NOT NULL,
NamSinhCha date NOT NULL,
NgheNghiepCha varchar(30) NOT NULL,
HoTenMe varchar(35) NOT NULL,
NamSinhMe date NOT NULL,
NgheNghiepMe varchar(30) NOT NULL,
MaLT varchar(4) NOT NULL,
DiaChi varchar(100) NOT NULL,
SDT varchar(15) NOT NULL,
Email varchar(50) NOT NULL,
Phần 2 Thiết kế Web
I. Giao diện chính của trang web
1. Trang chủ
Trang chủ là giao diện chính của chương trình, ở tại trang này khi có một yêu cầu
thì kết quả được hiển thị ngay tại trang chủ.
Giao diện của trang chủ
Để thiết kế được giao diện trên ta dùng HTML với sự định dạng của CSS:
Giao diện được thiết kế bằng ngôn ngữ html.
a) phần head
<head>
9
9
<title>{WEB_TITLE}</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="{PATH}/style.css" />
</head>
b) phần thân
<body>
<div id="wrapper">
<div id="header">
<h1>Chương trình quản lý sinh viên</h1>
<div id="banner">
<img </div><! End #banner >
</div><! End #header >
<div id="content">
<div id="sidebar">
<! BOX box_menuside() >
<div id="luottc">
<! BOX box_luottc() >
</div><! End #luottc >
</body>
Trong quá trình thiết kế chúng tôi sử dụng các mẫu dánh đấu để chèn code vào chương
trình nhằm mục đích bảo mật và là cho trang chủ dơn giản, ngắn gọn.
11
11
Phần 3 Những thao tác kết nối cơ sở dữ liệu và giao diện web
I. Class Mysql.php và Class Xtemplate.php
Đây là hai lớp chính do chúng tôi tự định nghĩa và cài đặt bằng ngôn ngữ PHP, nó
chứa những đối tượng mà chúng tôi sẽ sử dụng xuyên suốt quá trình thực hiện chương
trình.
1.Mysql.php
Định nghĩa lại các hàm của Mysql luôn luôn phù hợp với mọi phiên bản của PHP.
Chứa các thủ tục liên kết đến cơ sơ dữ liệu, thực thi câu truy vấn, ghi nhận lỗi trong quá
trình làm. Được cài đặt như sau:
<?php
class Mysql{
var $link_id;
var $log_file = 'logs.log';
var $lock_error = 1;
function Error($String, $Sql = ''){
if($Sql == '')
$Str = "[".date('d/m/Y H : i :s',NOW)."] IP : ".IP."\n".$String."\n";
else
$Str = "[".date('d/m/Y H : i :s',NOW)."] IP : ".IP."\n".$String."\nTruy vấn
SQL : ".$Sql."\n";
if($this->lock_error){
$fp = fopen($this->log_file,'a');
flock($fp, 2);
fwrite($fp, $Str);
flock($fp, 1);
return $Numrows;
}
Đếm số dòng từ kết quả câu truy vấn.
function Free_resurt($Query){
$Free = @mysql_free_result($Query);
return $Free;
}
}
Giải phóng kết quả( giải phóng bộ nhớ).
?>
2. Class_template.php
Lớp này có nhiệm vụ load trang khi có yêu cầu, thay thế những phần khác biệt tại
trang hiện tại.
<?php
class XTemplate{
var $ext = '.html';
13
13
var $XTemplate_folder = 'XTemplate';
var $cache = array();
function Get_XTemplate($lename, $box = ''){
if($box == ''){
$full_link = $this->XTemplate_folder.'/'.$%lename.
$this->ext;
$pre%x = '%le_';
}else{
$full_link = $this->XTemplate_folder.'/'.$box.'/'.
$%lename.$this->ext;
$pre%x = 'box_';
}
$path = $_SERVER['REQUEST_URI'].'cache'.$%lename;
unlink($path);
}
function Replace($search, $replace, $object){
$object = str_replace($search, $replace, $object);
return $object;
}
Tìm mẫu tin là $search và thay thế bằng $replace trong $object.
function Get_block_from_str($str, $block){
if(!$this->cache['block_'.$block]){
preg_replace('#<! Begin '.$block.' >[\r\n]*(.*?)
[\r\n]*<! End '.$block.' >#se','$s = stripslashes("\1");',$str);
if($s != $str)
$str = $s;
else
$str = '';
$this->cache['block_'.$block] = $s;
}
return $this->cache['block_'.$block];
}
Lấy một đoạn nội dung có đánh dấu là $block.
function Assign_vars($code, $arr){
foreach($arr as $key => $value)
$code = $this->Replace('{'.$key.'}',$value, $code);
return $code;
}
function Assign_blocks_content($code, $arr){
foreach($arr as $block => $value)
$code = preg_replace('#<! Begin '.$block.'
>[\r\n]*(.*?)[\r\n]*<! End '.$block.' >#s',$value,$code);
<?php
include('includes/con%g.php');
include('includes/XTemplate.php');
include('includes/function.php');
$isLogged = Checklogin();
$tpl = new XTemplate;
if($_POST['login']){
include('login.php');
exit();
}elseif($_POST[reg]){
include('register.php');
exit();
}elseif($_POST['backup']){
include('backup.php');
exit();
}elseif($_POST['fogot']){
include('user.php');
exit();
}elseif($_POST['Edit'] || $_POST['Drop'] || $_POST['Add']){
include('hieuchinh.php');
exit();
16
16
}
$value = array();
if($url){
$value = explode(',',$url);
}else{
$js = '<script type="text/javascript"
src="Ajax/Ajax.js"></script>';
giờ.
<?php
17
17
include('function_box.php');
function Checklogin(){
if($_COOKIE['USER'])
return true;
return false;
}
function Luottruycap($var){
$n = 6 - strlen($var);
for($i = 0; $i < $n; $i++)
$str .= "0";
$str .= $var;
for($i = 0; $i < strlen($str); $i++){
$t .= "<span>".$str[$i]."</span>\n";
}
unset($str, $var, $i, $n);
return $t;
}
function Search($table, $eld, $paterm, $ssanh = '='){
global $Mysql,$pre%x;
if($paterm == '')
$Query = $Mysql->Query('SELECT * FROM '.$pre%x.$table);
else
$Query = $Mysql->Query('SELECT * FROM '.$pre%x.$table.'
WHERE '.$%eld.' '.$ssanh.' "'.$paterm.'"');
if($Mysql->Num_rows($Query) <= 0)
$return = '<center><h2>Không tìm thấy kết quả của yêu
if($action == 3){
$Mysql->Query('DELETE FROM '.$pre%x.$table.' WHERE '.
$%eld.' '.$ssanh.' "'.$paterm.'"');
}
}
function Get_info($key, $query, $xtpl, $box, $block, $arr){
global $Mysql,$tpl,$cache;
if(is_string($r)) $info = $query;
else{
$info = $tpl->Get_XTemplate($xtpl,$box);
if(!$cache['info.rows_'.$key])
$cache['info.rows_'.$key] = $tpl-
>Get_block_from_str($info,$block);
$s = '';
$assign = array();
while($r = $Mysql->Fetch_array($query)){
for($i = 0; $i < count($arr); $i++)
$assign[$arr[$i]] = $r[$i];
$s .= $tpl->Assign_vars($cache['info.rows_'.$key],
$assign);
}
if($s == '')
$info = '<center><h2><i>Không có dữ liệu trong
mục này !</i></h2></center>';
else
$info = $tpl->Assign_blocks_content($info,array(
19
19
$block => $s,
)
define('NOW',time());
define('IP',$_SERVER['REMOTE_ADDR']);
error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
header("Content-Type: text/html; charset=UTF-8");
if (!ini_get('register_globals')) {
@$_GET = $HTTP_GET_VARS;
@$_POST = $HTTP_POST_VARS;
20
20
@$_COOKIE = $HTTP_COOKIE_VARS;
extract($_GET);
extract($_POST);
}
if ($_GET['refesh'] == 1) {
header('location: ./');
exit();
}
include('Mysql.php');
$Mysql = new Mysql;
$Mysql->Connect($Server, $Username, $Password, $Database);
$cache = array();
function Get_config($name){
global $Mysql, $prefix, $cache;
if(!$cache['config_'.$name]){
$r = $Mysql->Fetch_array($Mysql->Query('SELECT config_value
FROM '.$prefix.'config WHERE config_name = "'.$name.'"'));
$cache['config_'.$name] = stripslashes($r['config_value']);
}
return $cache['config_'.$name];
}
22
22
Usetcookie('USER',$r['username']);
Usetcookie('LEVEL',$r['userlevel']);
}
exit();
}else{
$html = $tpl->Get_XTemplate('login');
$tpl->Display($html);
}
?>
VI. Trang register.php.
Quản lý việc đăng ký tài khoản của người dung, những ngửơi này không có quyền
admin.
<?php
if($_POST['reg']){
$user = $_POST['user'];
$pass = $_POST['pass'];
$email = $_POST['email'];
$q = $Mysql->Query('SELECT username FROM '.$prefix.'user WHERE
username = "'.$user.'"');
23
23
if($Mysql->Num_rows($q) > 0)
echo 'Username này đã có người sử dụng bạn vui lòng chọn username
khác';
$q1 = $Mysql->Query('SELECT email FROM '.$prefix.'user WHERE username =
"'.$email.'"');
if($Mysql->Num_rows($q1) > 0)
echo 'Email này đã có người sử dụng bạn vui lòng chọn email khác';
$info=Get_info($value[1],$r, box_sinhvien','boxes','info.rows',$arr) ;
$Mysql->Free_resurt($r);
}elseif($value[1] == 2){
$r = Search('sinhvien','hoTenascii','%'.$value[2].'%','LIKE');
$arr = array('MASO','HOTEN','NAMSINH','DANTOC','MALOP');
$info=Get_info($value[1],$r, 'box_sinhvien','boxes','info.rows',$arr);
$Mysql->Free_resurt($r);
}elseif($value[1] == 3){
r = Search('sinhvien','maLop',$value[2]);
$arr = array('MASO','HOTEN','NAMSINH','DANTOC','MALOP');
$info=Get_info($value[1],$r, 'box_sinhvien','boxes','info.rows',$arr);
$Mysql->Free_resurt($r);
}elseif($value[1] == 4){
$r = Search('lop','tenLopascii','%'.$value[2].'%','LIKE');
$arr = array('MASO','HOTEN','NAMSINH','DANTOC','MALOP');
$info=Get_info($value[1],$r, 'box_sinhvien','boxes','info.rows',$arr);
$Mysql->Free_resurt($r);
25
25