PHP7 搭建简易的学生管理系统(二)

本文介绍了一个学生信息管理系统的实现过程,包括数据库连接、SQL执行、数据检索等功能模块的封装,以及项目初始化、学生信息展示页面的设计。

四、项目实现

代码结构

1.封装数据库函数库,方便调用,减少代码书写量

该文件放在/lib 下,文件名为db_function.php

<?php
//默认关闭调试模式
if (!defined('DB_DEBUG')) {
	defined('DB_DEBUG',false);
}

/**
 * 初始化数据库连接
 * @param array $config 数据库连接信息
 */
function db_init($config=array()){
	//数据库默认连接信息
	$def_config = array(
		'host' => '127.0.0.1',
		'user' => 'root',
		'password' => '',
		'charset' => 'utf8',
		'dbname' => 'stumanager',
		'port' => 3306
	);
	//如果传参,则覆盖默认设置
	$config = array_merge($def_config,$config);
	//连接数据库
	$link = mysqli_connect($config['host'],$config['user'],$config['password'],$config['dbname']);
	//判断数据库连接是否成功,如果不成功则显示错误信息并终止脚本继续执行
	if(!$link){
		if(DB_DEBUG){
			die('连接数据库失败!'.mysqli_connect_error());
		}else{
			die('连接数据库失败!');
		}
	}
	//设置字符集
	mysqli_query($link,'set names '.$config['charset']);
	return $link;
}

/**
 * 执行SQL的方法
 * @param string $sql 待执行的SQL
 * @return mixed 失败返回false,成功,如果是查询语句返回结果集,如果非查询类返回true
 */
function db_query($link,$sql) {
	//执行SQL语句
	if($result = mysqli_query($link,$sql)) {
		return $result;
	}else if(DB_DEBUG){
		echo 'SQL执行失败:<br>';
		echo '错误的SQL为:', $sql, '<br>';
		echo '错误的代码为:', mysqli_error($link), '<br>';
		echo '错误的信息为:', mysqli_error($link), '<br>';
		die;
	}else{
		die('SQL语句执行失败。');
	}
}

/**
 * 处理结果集中有多行数据的方法
 * @param string $sql 待执行的SQL
 * @return array 返回遍历结果集后的二维数组
 */
function db_fetch_all($link,$sql) {
	//执行query()函数
	if ($result = db_query($link,$sql)) {
		//执行成功
		//遍历结果集
		$rows = array();
		while( $row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
			$rows[] = $row;
		}
		//释放结果集资源
		mysqli_free_result($result);
		return $rows;

	} else {
		//执行失败
		return false;
	}
}

/**
 * 处理结果集中只有一行数据的方法
 * @param string $sql 待执行的SQL语句
 * @return array 返回结果集处理后的一维数组
 */
function db_fetch_row($link,$sql) {
	//执行query()函数
	if ($result = db_query($link,$sql)) {
		//从结果集取得一次数据即可
		$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
		return $row;
	} else {
		return false;
	}
}

/**
 * 处理结果集只有一个数据的方法
 */
function db_fetch_column($link,$sql){
	if($result = db_query($link,$sql)){
		$row = mysqli_fetch_row($result);
		return $row[0];
	}else{
		return false;
	}
}

/**
 * 对数据进行SQL转义
 * @param string $data 待转义字符串
 * @return string 转义后的字符串
 */
function db_escape($link,$data){
	//转义字符串中的特殊字符
	return mysqli_real_escape_string($link,$data);
}
2. 创建项目初始化文件

项目初始化文件是项目中每个实现功能的PHP脚本都引入的公共文件,该初始化文件的主要作用是引入函数库、设置字符集、连接数据库等。
该文件放在/,文件名为init.php

<?php
//设定字符集
header('Content-Type:text/html;charset=utf-8');

//开启调试模式
define('DB_DEBUG',true);

//加载数据库操作函数库
require './lib/db_function.php';

//初始化数据库
$link = db_init(array(
	'host' => '127.0.0.1', //主机名
	'user' => 'root',      //用户名
	'password' => '',//密码
	'dbname' => 'stumanager',  //数据库
	'charset' => 'utf8'    //字符集
)); 

//接收GET变量
function input_get($name){
	return isset($_GET[$name]) ? $_GET[$name] : '';
}
//接收POST变量
function input_post($name){
	return isset($_POST[$name]) ? $_POST[$name] : '';
}

/**
 * 对字符串数据进行过滤
 * @param string $data 待转义字符串
 * @return string 转义后的字符串
 */
function filter($data,$func=array('trim','htmlspecialchars')){
	foreach($func as $v){
		//调用可变函数过滤数据
		$data = $v((string)$data);
	}
	return $data;
}

/**
 * JavaScript弹窗并返回
 */
function alert_back($msg){
	echo "<script>alert('$msg');history.back();</script>";
	exit;
}

3、学生信息展示页面

展示学生列表的功能开发十分简单,将学生信息数据从数据库中查询后展示即可。
该文件放在/ ,文件名为index.php

<?php  
//学生列表功能
header("content-type:text/html;charset=utf-8");
require './init.php'; //项目初始化文件
require './lib/page_function.php'; //引入分页函数库
//函数:生成排序SQL
function make_sort_sql($order,$sort){
	//允许排序的字段
	$fields = array('id','dept_id','name','birth','entry');
	//判断$order是否存在于合法字段列表中
	if(in_array($order,$fields)){
		//判断$sort是否为合法值
		if(in_array($sort,array('asc','desc'))){
			return "order by `stu_$order` $sort";
		}
	}
	return '';
}
//函数:生成搜索SQL
function make_search_sql($link,$keyword){
	$keyword = db_escape($link,filter($keyword));
	return "and stu_name like '%$keyword%'";
}
//函数:生成LIMIT SQL
function make_limit_sql($page,$page_size){
	return 'limit '.(($page-1)*$page_size).','.$page_size;
}

//排序功能
$order = input_get('order');
$order_sort = input_get('sort');
$order_sql = make_sort_sql($order,$order_sort);  //生成排序SQL

//搜索功能
$search = input_get('search');
$where_sql = $search ? make_search_sql($link,$search) : '';

//分页功能
$page_size = 5; //每页显示5条信息
$page_count = db_fetch_column($link,'select count(*) from stu_info'); //查询所有记录条数
$page_max = ceil($page_count/$page_size); //计算最大页码值
$page = (int)input_get('page'); //获取当前访问的页码
$page = max($page,1); //页码值最小为1
$page = min($page,$page_max); //页码值最大为$max_page
$page_html = makePageHtml($page,$page_max); //调用函数生成分页链接
$limit_sql = make_limit_sql($page,$page_size); //拼接SQL

//准备SQL语句
$sql = "select * from stu_info left join stu_dept on dept_id=stu_dept_id where 1=1 $where_sql $order_sql $limit_sql";

//获取员工信息数据
$emp_info = db_fetch_all($link,$sql);
//加载视图页面,显示数据
require './view/list.html';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值