php实现简单的学生管理系统
php实现学生管理系统
一、效果
二、代码框架
functions文件夹里面是封装的mysqli的数据库操作函数和一个跳转的函数
student文件夹里面就是学生管理系统的主界面
application下的index.php就是登陆界面
application下的doAction.php页面就是对application下的index.php的各种响应
data文件夹里面是mysql生产数据库和表的代码
三、功能实现
1、邮箱验证功能的实现
是通过调用第三方工具swiftmailer-master来实现的,就是简单的调用这个第三方的工具就可以实现了
先弄一个smtp服务器(这里是用的sina,发送邮件的账号名和密码是clivelyn@sina.com和lin123)来发送邮件,发送给用户注册的那个邮箱
当然发送邮件你肯定要确定发件人,发送主题,发送的邮件的内容,发送的邮件的内容里面会有一个激活链接,当然这个链接是要加密的
账号激活与否是通过数据库中的status关键字来确定的,status为0表示没激活,为1表示激活了
核心代码如下:
//发送激活邮件
//初始化邮件服务器对象
$transport=Swift_SmtpTransport::newInstance('smtp.sina.com',25);
//设置用户名和密码
$transport->setUsername('clivelyn@sina.com');
$transport->setPassword('lin123');
$mailer=Swift_Mailer::newInstance($transport);//发送邮件对象
$message=Swift_Message::newInstance();//邮件信息对象
$message->setFrom(array('clivelyn@sina.com'));//谁发送的
$message->setTo($email);//发送给谁
$message->setSubject('注册账号激活邮件');//设置邮件主题 $activeStr="?act=active&username={$username}&token={$token}";
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].
$activeStr;
// echo $url;
// echo $url.urlencode($activeStr);
$urlEncode=urlencode($url);
//http://localhost/test/PHPAdvance/MySQLi/application/doAction.php?act=active&username=king&token=74bccca6db02607e7dd75f088ee6fee8
$emailBody=<<<EOF
欢迎{$username}使用账号激活功能
请点击链接激活账号:
<a href='{$url}' target='_blank'>{$urlEncode}</a> <br />
(该链接在24小时内有效)
如果上面不是链接形式,请将地址复制到您的浏览器(例如IE)的地址栏再访问。
EOF;
$message->setBody($emailBody,"text/html",'utf-8');
try{
$res1=$mailer->send($message);
var_dump($res);
if($res && $res1){
mysqli_commit($link);
mysqli_autocommit($link, TRUE);
alertMes('注册成功,立即激活使用', 'index.php');
}else{
mysqli_rollback($link);
alertMes('注册失败,重新注册','index.php');
} }catch(Swift_ConnectionException $e){
echo '123';
die('邮件服务器错误:').$e->getMessage();
}
break;
18、这里注意18行加密的写法,urlencode
2、mysqli的用法
在代码用mysqli全部被再次封装成了函数,所以非常方便使用,包括连接数据库,增删改查,mysqli的操作数据库也比较方便
还有一个配置文件config.php用来存放用到的数据库的连接参数
核心代码:
<?php
/**
* 连接
* @param string $host
* @param string $user
* @param string $password
* @param string $charset
* @param string $database
* @return object 连接标识符
*/
function connect1($host,$user,$password,$charset,$database) {
$link = mysqli_connect ( $host, $user, $password ) or die ( '数据库连接失败<br/>ERROR ' . mysqli_connect_errno () . ':' . mysqli_connect_error () );
mysqli_set_charset ( $link, $charset );
mysqli_select_db ( $link, $database ) or die ( '指定数据库打开失败<br/>ERROR ' . mysqli_errno ( $link ) . ':' . mysqli_error ( $link ) );
return $link;
}
/**
* 连接 需要传递数组
* @param array $config
* @return object
*/
function connect2($config) {
$link = mysqli_connect ( $config ['host'], $config ['user'], $config ['password'] ) or die ( '数据库连接失败<br/>ERROR ' . mysqli_connect_errno () . ':' . mysqli_connect_error () );
mysqli_set_charset ( $link, $config ['charset'] );
mysqli_select_db ( $link, $config ['dbName'] ) or die ( '指定数据库打开失败<br/>ERROR ' . mysqli_errno ( $link ) . ':' . mysqli_error ( $link ) );
return $link;
}
/**
* 用常量的形式建立连接
* @return unknown
*/
function connect3(){
$link = mysqli_connect ( DB_HOST, DB_USER, DB_PWD ) or die ( '数据库连接失败<br/>ERROR ' . mysqli_connect_errno () . ':' . mysqli_connect_error () );
mysqli_set_charset ( $link, DB_CHARSET );
mysqli_select_db ( $link, DB_DBNAME ) or die ( '指定数据库打开失败<br/>ERROR ' . mysqli_errno ( $link ) . ':' . mysqli_error ( $link ) );
return $link;
} /*
array(
'username'=>'king',
'password'=>'king',
'age'=>'12',
'regTime'=>'123123123'
);
INSERT user(username,password,age,regTime) VALUES('king','king','12','123123123');
*/
/**
* 插入操作
* @param object $link
* @param array $data
* @param string $table
* @return boolean
*/
function insert($link,$data,$table){
$keys = join ( ',', array_keys ( $data ) );
$vals = "'" . join ( "','", array_values ( $data ) ) . "'";
$query = "INSERT {$table}({$keys}) VALUES({$vals})";
$res = mysqli_query ( $link, $query );
if ($res) {
return mysqli_insert_id ( $link );
} else {
return false;
}
} /*
array(
'username'=>'king123',
'password'=>'king123',
'age'=>'32',
'regTime'=>'123123123'
);
UPDATE user SET username='king123',password='king123',age='32',regTime='123123123' WHERE id=1
*/
/**
* 更新操作
* @param object $link
* @param array $data
* @param string $table
* @param string $where
* @return boolean
*/
function update($link, $data, $table, $where = null) {
foreach ( $data as $key => $val ) {
$set .= "{$key}='{$val}',";
}
$set = trim ( $set, ',' );
$where = $where == null ? '' : ' WHERE ' . $where;
$query = "UPDATE {$table} SET {$set} {$where}";
$res = mysqli_query ( $link, $query );
if ($res) {
return mysqli_affected_rows ( $link );
} else {
return false;
}
} //DELETE FROM user WHERE id=
/**
* 删除操作
* @param object $link
* @param string $table
* @param string $where
* @return boolean
*/
function delete($link, $table, $where = null) {
$where = $where ? ' WHERE ' . $where : '';
$query = "DELETE FROM {$table} {$where}";
$res = mysqli_query ( $link, $query );
if ($res) {
return mysqli_affected_rows ( $link );
} else {
return false;
}
} /**
* 查询指定记录
* @param object $link
* @param string $query
* @param string $result_type
* @return array|boolean
*/
function fetchOne($link, $query, $result_type = MYSQLI_ASSOC) {
$result = mysqli_query ( $link, $query );
if ($result && mysqli_num_rows ( $result ) > 0) {
$row = mysqli_fetch_array ( $result, $result_type );
return $row;
} else {
return false;
}
} /**
* 查询所有记录
* @param object $link
* @param string $query
* @param string $result_type
* @return array|boolean
*/
function fetchAll($link, $query, $result_type = MYSQLI_ASSOC) {
$result = mysqli_query ( $link, $query );
if ($result && mysqli_num_rows ( $result ) > 0) {
while ( $row = mysqli_fetch_array ( $result, $result_type ) ) {
$rows [] = $row;
}
return $rows;
} else {
return false;
}
} /**
* 得到表中的记录数
* @param object $link
* @param string $table
* @return number|boolean
*/
function getTotalRows($link, $table) {
$query = "SELECT COUNT(*) AS totalRows FROM {$table}";
$result = mysqli_query ( $link, $query );
if ($result && mysqli_num_rows ( $result ) == 1) {
$row = mysqli_fetch_assoc ( $result );
return $row ['totalRows'];
} else {
return false;
}
} /**
* 得到结果集的记录条数
* @param object $link
* @param string $query
* @return boolean
*/
function getResultRows($link, $query) {
$result = mysqli_query ( $link, $query );
if ($result) {
return mysqli_num_rows ( $result );
} else {
return false;
}
} /**
* @param object $link
*/
function getServerInfo($link) {
return mysqli_get_server_info ( $link );
}
/**
* @param object $link
*/
function getClientInfo($link) {
return mysqli_get_client_info ( $link );
} /**
* @param object $link
*/
function getHostInfo($link){
return mysqli_get_host_info($link);
} /**
* @param object $link
*/
function getProtoInfo($link) {
return mysqli_get_proto_info ( $link );
}
配置文件config.php
<?php
$config = array(
'host'=>'localhost',
'user'=>'root',
'password'=>'root',
'charset'=>'utf8',
'dbName'=>'51zxw'
); define('DB_HOST','localhost');
define('DB_USER','root');
define('DB_PWD','root');
define('DB_CHARSET','utf8');
define('DB_DBNAME','51zxw');
3、数据库里面的数据绑定到web页面
数据库里面的数据绑定到web页面是先通过mysqli取出数据,然后在把数据显示到web页面就好
(1)、通过mysqli取出数据核心代码:
$link = connect3();
$query = "select * from student limit {$offSet},{$pageSize}";
$rows = fetchAll($link, $query);
其中的connect3()是封装好的链接mysql数据库的代码
(2)、把数据显示到web页面核心代码
<tbody>
<?php foreach ($rows as $admin):?>
<tr>
<th><?php echo $admin['id']?></th>
<th><?php echo $admin['username']?></th>
<th><?php echo $admin['age']?></th>
<th><?php echo $admin['sex']?></th>
<td>
<span>详情</span>
<span>修改</span>
<span class="delect" data_id="<?php echo $admin['id']?>">删除</span>
</td>
</tr>
<?php endforeach;?>
</tbody>
其实就用一个foreach循环遍历取到的每一条数据就可以了
4、删除响应的完成
删除操作是用的ajax技术,就是通过js代码把学生的id传给student页面下的doAction.php响应页面
然后在doAction.php响应界面通过mysqli来操作数据库完成删除的目的
(1)、通过js代码把学生的id传给student页面下的doAction.php响应页面核心代码
<?php foreach ($rows as $admin):?>
<tr>
<th><?php echo $admin['id']?></th>
<th><?php echo $admin['username']?></th>
<th><?php echo $admin['age']?></th>
<th><?php echo $admin['sex']?></th>
<td>
<span>详情</span>
<span>修改</span>
<span class="delect" data_id="<?php echo $admin['id']?>">删除</span>
</td>
</tr>
<?php endforeach;?>
</tbody>
<script>
$(function(){
$(".delect").click(function(){
var id = $(this).attr("data_id");
var url = "doAction.php?id="+id;
$.get(url);
$(this).parent().parent().empty();
});
});
</script>
(2)、在doAction.php响应界面通过mysqli来操作数据库完成删除的目的
<?php
header("content-type:text/html;charset=utf-8");
require_once '../config/config.php';
require_once '../functions/common.func.php';
require_once '../functions/mysql.func.php';
$link = connect3();
$table = "student";
$id = isset($_GET["id"])?$_GET["id"]:"";
if($id==""){
//这里是插入学生,本来应该是判断action为add的
$username = $_GET["username"];
$age = $_GET["age"];
$sex = $_GET["sex"];
$data = compact('username','age','sex');
$res = insert($link, $data, $table);
if($res){
alertMes("插入数据成功", "layout-index.php");
}else{
alertMes("插入失败", "layout-index.php");
}
}else{
delete($link, $table,"id = ".$id);
}
就是第22行的代码,第10到第二十行代码时插入操作的代码
5、增加操作的实现
增加操作就是通过在layout-form.html页面下填好数据传到doAction响应页面,然后在doAction响应页面调用mysqli来完成数据库的插入
(1)、在layout-form.html页面下填好数据传到doAction响应页面核心代码
<div class="panel panel-default">
<div class="panel-heading">新增学生</div>
<div class="panel-body">
<form action="doAction.php?act=add" method="get" class="form-horizontal" role="form">
<div class="form-group">
<label class="col-sm-2 control-label">姓名</label>
<div class="col-sm-5">
<input type="text" name="username" class="form-control" placeholder="姓名">
</div>
<div class="col-sm-5">
<p class="form-control-static text-danger">姓名不能为空</p>
</div>
</div>
(2)、在doAction响应页面调用mysqli来完成数据库的插入
<?php
header("content-type:text/html;charset=utf-8");
require_once '../config/config.php';
require_once '../functions/common.func.php';
require_once '../functions/mysql.func.php';
$link = connect3();
$table = "student";
$id = isset($_GET["id"])?$_GET["id"]:"";
if($id==""){
//这里是插入学生,本来应该是判断action为add的
$username = $_GET["username"];
$age = $_GET["age"];
$sex = $_GET["sex"];
$data = compact('username','age','sex');
$res = insert($link, $data, $table);
if($res){
alertMes("插入数据成功", "layout-index.php");
}else{
alertMes("插入失败", "layout-index.php");
}
}else{
delete($link, $table,"id = ".$id);
}
1、第10到第20行就是插入数据的代码
2、这里是为了图方便这样写,本来应该是判断act是add的情况下,把这段代码放在if那里面去的
6、分页操作的实现
分页操作是通过在数据库中查到总条数,然后知道有多少页,每一页的信息查询就是通过mysql的limit关键词来实现的,然后把查到的数据放到对应的页里面去就好了
(1)、取数据及判断分页的核心代码:
<?php
require_once '../functions/mysql.func.php';
require_once '../config/config.php';
header("content-type:text/html;charset=utf-8");
$link = connect3();
$page = $_GET['page']?$_GET['page']:1;
$pageSize = 5;
$offSet = ($page-1)*5;
$table = "student";
$totalRows = getTotalRows($link, $table);
$sumPage = ceil($totalRows/$pageSize);
$query = "select * from student limit {$offSet},{$pageSize}";
$rows = fetchAll($link, $query);
?>
(2)、选择页面的代码
<nav>
<ul class="pagination pull-right">
<?php
for($i = 1;$i<=$sumPage;$i++){
echo "<li><a href='layout-index.php?page={$i}'>$i</a></li>";
} ?>
</ul>
</nav>
7、前端框架用的bootstrap
四、完整代码
完整代码会放在github上面,直接下载就可以用
链接如下:
fry404006308/PHP_StudentManage: PHP_StudentManage
https://github.com/fry404006308/PHP_StudentManage
php实现简单的学生管理系统的更多相关文章
- Java实现功能简单的学生管理系统(附带源代码)
这几天Java学了点新的知识,打算要用这些知识做一个比较简单的管理系统,实战一下子,代码中的功能简洁,可能不多,但是作为一个练手来了解一个项目是怎么样一点一点思考的还是不错的 一.代码中要实现的功能 ...
- <每日一题>题目7:简单的学生管理系统V1.0
''' # 学生管理系统v1.0 # 添加学生的信息 # 删除学生的信息 # 修改学生的信息 # 查看学生的信息 #遍历学生的信息 #退出系统 ''' import json #1 显示操作功能 de ...
- Java——简单实现学生管理系统
import java.io.*;import java.util.ArrayList;import java.util.Scanner;class MyObjectOutputStream exte ...
- java web利用jsp完成简单的学生管理系统
index.jsp <%@ page language="java" import="java.sql.*" pageEncoding="utf ...
- 使用struts2+hibernate的增、删、改、查构架简单的学生管理系统
工程环境:MyEclipse8.5 其他配置:Hibernate框架+jtds链接数据库驱动+Sql2008数据库+MyEclipse serevr+JDK1.7 开发环境:Win7x64 这个项目用 ...
- php练习5——简单的学生管理系统(隐藏控件的使用)
要求: 程序:gradeManage.html和gradeManage.php 结果 注意: 1.使用隐藏控件时,得在不同表单下,不能在同一个表单下: 2. ...
- 饮冰三年-人工智能-Python-26 Django 学生管理系统
背景:创建一个简单的学生管理系统,熟悉增删改查操作 一:创建一个Django项目(http://www.cnblogs.com/wupeiqi/articles/6216618.html) 1:创建实 ...
- 学生管理系统(javaweb版)
准备用javaweb 的技术做一个简单的学生管理系统 打算不用登陆的那种,直接进入管理界面. 完成增删改查的功能. 慢慢开始更新,先写那么多.
- c语言之学生管理系统
0x00 学生管理系统 说到学生管理系统,对于每一个初学c语言的人都是一道不得不过的砍.不过,学习c,我觉得每个人都应该写一个学生管理系统,至于为什么,我想倘若连一个学生管理系统都写不好,哪么他的c是 ...
随机推荐
- Hadoop MapReduce编程 API入门系列之wordcount版本2(六)
这篇博客,给大家,体会不一样的版本编程. 代码 package zhouls.bigdata.myMapReduce.wordcount4; import java.io.IOException; i ...
- java集合的学习笔记
不知不觉也到了java集合这一章的学习,这因该是挺重要的一个章节,因为所有的程序都离不开数据,而一个良好的数据结构和算法应该是程序的灵魂吧. 今天对自己所初步了解的做一个总结: 数据结构是计算机存储. ...
- Android适配文件dimen自动生成代码
1:保存下,别人的code import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputSt ...
- Appium 环境搭建 - macOS
本文没有安装 Appium Desktop,Appium Server 直接在命令行中进行即可. Homebrew,macOS 包管理器: ruby -e "$(curl -fsSL htt ...
- layui 多选下拉框 控件 样式改变原因
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 如何把数值或者对象添加到ArrayList集合
生成6个1~33之间的随机整数,添加到集合,并遍历 public class ArrayListDemo1 { public static void main(String[] args) { // ...
- SQL数据查询2
USE h CREATE TABLE zy1( empno INT, ename ), job ), mgr INT, hiredate DATE, sal DOUBLE, COOM DOUBLE, ...
- gazebo 7.0 升级到7.15 参考他人博客
gazebo 7.0 升级到7.14 网址:https://blog.csdn.net/riancy_riancy/article/details/84568322 编译后遇到报错 ,解决问题的网址: ...
- 【模板】最大流模板(dinic)
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...
- /etc/default/useradd文件内容及对应功能
1.GROUP=100 #依赖于/etc/login.defs的USE RGRUUPS_ENAB参数,如果为no,则在此处控制 2.HOME=/home #把用户的家路径健在/home中 3.INAC ...