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是 ...
随机推荐
- 爬虫中之Requests 模块的进阶
requests进阶内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 引入 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个 ...
- C#调用SMS短信接口,轻松搞定发送短信的任务。。。。
首先我们需要去这里http://sms.webchinese.cn/申请一个账号和短信接口秘钥,在该网址下有许多语言的demo介绍,下面我主要为大家贴一个C#中的Helper类: using Syst ...
- Android 关于Toolbar和FragmentActivity的问题
今天在工作中遇到用Fragment搭Tab框架时,FragmentActivity无法使用Toolbar的问题.查了许多资料,其实AppComponent继承自FragmentActivity,所以A ...
- [OpenWrt]安装mjpg-streamer
安装mjpg-streamer 远程监控基本上是wifi小车的一个必备功能了.摄像头我用的是奥尼百脑通 D881,这个要100左右. 确认安装了以下软件: kmod-usb2 kmod-video-u ...
- Module, Package in Python
1.To put it simple, Module是写好的一系列函数或变量,文件以.py为后缀,可以在其他Module中整体或部分引用. PS: 在Module中[结尾或开头]加入if __name ...
- 利用chrome浏览器断电调试确定函数触发的位置
比如某天遇到这样一个问题,页面有一个按钮,上面绑定了事件可能是多个事件,然后我们点击后出现了bug,我们要如何快速定位到这个事件,如果页面只有一个js或少量的js,我们一个打开查找,也可以接受.但是如 ...
- Java中的强制转换
特点: 1.需要程序员手动修改代码 2.语法:范围小的类型 变量名 = (范围小的类型)范围大的类型的数据 3.从范围小 到 范围大 注意: 强制类型转换可能会造成数据的丢失哦,小伙伴们在应用时一定 ...
- Git 常用命令速查(转载)
git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r 查看远程所有分支git co ...
- IOS - 零碎
---恢复内容开始--- 1.模拟器目录: ProjectNameApk.documents.library(cache.preference.cookies).temp 2.Edit-Refacto ...
- 封装基于jq弹窗插件
相信码友们对于$.fn.extexd();$.extend()以及$.fn.custom和$.custom都有一定的了解:我阐述一下我自己对于$.fn.custom和$.custom的理解.有理解错误 ...