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实现简单的学生管理系统的更多相关文章

  1. Java实现功能简单的学生管理系统(附带源代码)

    这几天Java学了点新的知识,打算要用这些知识做一个比较简单的管理系统,实战一下子,代码中的功能简洁,可能不多,但是作为一个练手来了解一个项目是怎么样一点一点思考的还是不错的 一.代码中要实现的功能 ...

  2. <每日一题>题目7:简单的学生管理系统V1.0

    ''' # 学生管理系统v1.0 # 添加学生的信息 # 删除学生的信息 # 修改学生的信息 # 查看学生的信息 #遍历学生的信息 #退出系统 ''' import json #1 显示操作功能 de ...

  3. Java——简单实现学生管理系统

    import java.io.*;import java.util.ArrayList;import java.util.Scanner;class MyObjectOutputStream exte ...

  4. java web利用jsp完成简单的学生管理系统

    index.jsp <%@ page language="java" import="java.sql.*" pageEncoding="utf ...

  5. 使用struts2+hibernate的增、删、改、查构架简单的学生管理系统

    工程环境:MyEclipse8.5 其他配置:Hibernate框架+jtds链接数据库驱动+Sql2008数据库+MyEclipse serevr+JDK1.7 开发环境:Win7x64 这个项目用 ...

  6. php练习5——简单的学生管理系统(隐藏控件的使用)

    要求:    程序:gradeManage.html和gradeManage.php          结果       注意:   1.使用隐藏控件时,得在不同表单下,不能在同一个表单下:   2. ...

  7. 饮冰三年-人工智能-Python-26 Django 学生管理系统

    背景:创建一个简单的学生管理系统,熟悉增删改查操作 一:创建一个Django项目(http://www.cnblogs.com/wupeiqi/articles/6216618.html) 1:创建实 ...

  8. 学生管理系统(javaweb版)

    准备用javaweb 的技术做一个简单的学生管理系统 打算不用登陆的那种,直接进入管理界面. 完成增删改查的功能. 慢慢开始更新,先写那么多.

  9. c语言之学生管理系统

    0x00 学生管理系统 说到学生管理系统,对于每一个初学c语言的人都是一道不得不过的砍.不过,学习c,我觉得每个人都应该写一个学生管理系统,至于为什么,我想倘若连一个学生管理系统都写不好,哪么他的c是 ...

随机推荐

  1. BZOJ1060: [ZJOI2007]时态同步(树形dp 贪心)

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3285  Solved: 1286[Submit][Status][Discuss] Descript ...

  2. FLP不可能原理

    1. FLP impossibility背景 FLP Impossibility(FLP不可能性)是分布式领域中一个非常著名的结果,该结果在专业领域被称为“定理”,其地位之高可见一斑.该定理的论文是由 ...

  3. 相似图像识别检 —基于图像签名(LSH)

    原文链接:http://grunt1223.iteye.com/blog/828192 参考:人工智能,一种现代方法 第 617页,且原始论文给出了完整的证明过程.在ANN方法中,LSH算一种可靠的紧 ...

  4. 2 Selenium3.0+Python3.6环境搭建

    [说明] 再次搭建一次环境,是因为遇到怎么都打不开IE的问题了,环境信息为:Selenium3.0+Python3.6+win7+ie10 [搭建步骤] 1.下载Python3.6,并点击安装和配置环 ...

  5. 逐步理解Java中的线程安全问题

    什么是Java的线程安全问题? 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读/写完,其他线程才可使用.不会出现数据不一致或者数据 ...

  6. Fear No More歌词

      "Fear No More"   Every anxious thought that steals my breath It's a heavy weight upon my ...

  7. setTimeout()传带有参数的函数

    w3cshool里的解释:setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式,语法:setTimeout(code,millisec). 也就是说,第一个参数可以是字符串形式的Ja ...

  8. 2018秋招blibli算法工程师

    我给出代码如下:和之前做数塔(dp的入门题目)的思路一致 dp[i][j]为走到坐标(i,j)的最小减速(只有向右走和向上走两种情况) #include<stdio.h> #include ...

  9. logging模块、shutil模块、subprocess模块、xml模块

    logging模块 shutil模块 subprocess模块 xml模块 logging模块 函数式简单配置 import logging logging.debug('debug message' ...

  10. 【BZOJ4864】【BJWC2017】神秘物质 - Splay

    题意: Description 21ZZ 年,冬.小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这一天, 小诚刚从研究所得到了一块奇异的陨石样本, ...