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表示激活了
核心代码如下:
1 //发送激活邮件 2 //初始化邮件服务器对象 3 $transport=Swift_SmtpTransport::newInstance('smtp.sina.com',25); 4 //设置用户名和密码 5 $transport->setUsername('clivelyn@sina.com'); 6 $transport->setPassword('lin123'); 7 $mailer=Swift_Mailer::newInstance($transport);//发送邮件对象 8 $message=Swift_Message::newInstance();//邮件信息对象 9 $message->setFrom(array('clivelyn@sina.com'));//谁发送的 10 $message->setTo($email);//发送给谁 11 $message->setSubject('注册账号激活邮件');//设置邮件主题 12 13 $activeStr="?act=active&username={$username}&token={$token}"; 14 $url="http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']. 15 $activeStr; 16 // echo $url; 17 // echo $url.urlencode($activeStr); 18 $urlEncode=urlencode($url); 19 //http://localhost/test/PHPAdvance/MySQLi/application/doAction.php?act=active&username=king&token=74bccca6db02607e7dd75f088ee6fee8 20 $emailBody=<<<EOF 21 欢迎{$username}使用账号激活功能 22 请点击链接激活账号: 23 <a href='{$url}' target='_blank'>{$urlEncode}</a> <br /> 24 (该链接在24小时内有效) 25 如果上面不是链接形式,请将地址复制到您的浏览器(例如IE)的地址栏再访问。 26 EOF; 27 $message->setBody($emailBody,"text/html",'utf-8'); 28 try{ 29 $res1=$mailer->send($message); 30 var_dump($res); 31 if($res && $res1){ 32 mysqli_commit($link); 33 mysqli_autocommit($link, TRUE); 34 alertMes('注册成功,立即激活使用', 'index.php'); 35 }else{ 36 mysqli_rollback($link); 37 alertMes('注册失败,重新注册','index.php'); 38 } 39 40 }catch(Swift_ConnectionException $e){ 41 echo '123'; 42 die('邮件服务器错误:').$e->getMessage(); 43 } 44 break;
18、这里注意18行加密的写法,urlencode
2、mysqli的用法
在代码用mysqli全部被再次封装成了函数,所以非常方便使用,包括连接数据库,增删改查,mysqli的操作数据库也比较方便
还有一个配置文件config.php用来存放用到的数据库的连接参数
核心代码:
1 <?php 2 /** 3 * 连接 4 * @param string $host 5 * @param string $user 6 * @param string $password 7 * @param string $charset 8 * @param string $database 9 * @return object 连接标识符 10 */ 11 function connect1($host,$user,$password,$charset,$database) { 12 $link = mysqli_connect ( $host, $user, $password ) or die ( '数据库连接失败<br/>ERROR ' . mysqli_connect_errno () . ':' . mysqli_connect_error () ); 13 mysqli_set_charset ( $link, $charset ); 14 mysqli_select_db ( $link, $database ) or die ( '指定数据库打开失败<br/>ERROR ' . mysqli_errno ( $link ) . ':' . mysqli_error ( $link ) ); 15 return $link; 16 } 17 /** 18 * 连接 需要传递数组 19 * @param array $config 20 * @return object 21 */ 22 function connect2($config) { 23 $link = mysqli_connect ( $config ['host'], $config ['user'], $config ['password'] ) or die ( '数据库连接失败<br/>ERROR ' . mysqli_connect_errno () . ':' . mysqli_connect_error () ); 24 mysqli_set_charset ( $link, $config ['charset'] ); 25 mysqli_select_db ( $link, $config ['dbName'] ) or die ( '指定数据库打开失败<br/>ERROR ' . mysqli_errno ( $link ) . ':' . mysqli_error ( $link ) ); 26 return $link; 27 } 28 /** 29 * 用常量的形式建立连接 30 * @return unknown 31 */ 32 function connect3(){ 33 $link = mysqli_connect ( DB_HOST, DB_USER, DB_PWD ) or die ( '数据库连接失败<br/>ERROR ' . mysqli_connect_errno () . ':' . mysqli_connect_error () ); 34 mysqli_set_charset ( $link, DB_CHARSET ); 35 mysqli_select_db ( $link, DB_DBNAME ) or die ( '指定数据库打开失败<br/>ERROR ' . mysqli_errno ( $link ) . ':' . mysqli_error ( $link ) ); 36 return $link; 37 } 38 39 /* 40 array( 41 'username'=>'king', 42 'password'=>'king', 43 'age'=>'12', 44 'regTime'=>'123123123' 45 ); 46 INSERT user(username,password,age,regTime) VALUES('king','king','12','123123123'); 47 */ 48 /** 49 * 插入操作 50 * @param object $link 51 * @param array $data 52 * @param string $table 53 * @return boolean 54 */ 55 function insert($link,$data,$table){ 56 $keys = join ( ',', array_keys ( $data ) ); 57 $vals = "'" . join ( "','", array_values ( $data ) ) . "'"; 58 $query = "INSERT {$table}({$keys}) VALUES({$vals})"; 59 $res = mysqli_query ( $link, $query ); 60 if ($res) { 61 return mysqli_insert_id ( $link ); 62 } else { 63 return false; 64 } 65 } 66 67 /* 68 array( 69 'username'=>'king123', 70 'password'=>'king123', 71 'age'=>'32', 72 'regTime'=>'123123123' 73 ); 74 UPDATE user SET username='king123',password='king123',age='32',regTime='123123123' WHERE id=1 75 */ 76 /** 77 * 更新操作 78 * @param object $link 79 * @param array $data 80 * @param string $table 81 * @param string $where 82 * @return boolean 83 */ 84 function update($link, $data, $table, $where = null) { 85 foreach ( $data as $key => $val ) { 86 $set .= "{$key}='{$val}',"; 87 } 88 $set = trim ( $set, ',' ); 89 $where = $where == null ? '' : ' WHERE ' . $where; 90 $query = "UPDATE {$table} SET {$set} {$where}"; 91 $res = mysqli_query ( $link, $query ); 92 if ($res) { 93 return mysqli_affected_rows ( $link ); 94 } else { 95 return false; 96 } 97 } 98 99 //DELETE FROM user WHERE id= 100 /** 101 * 删除操作 102 * @param object $link 103 * @param string $table 104 * @param string $where 105 * @return boolean 106 */ 107 function delete($link, $table, $where = null) { 108 $where = $where ? ' WHERE ' . $where : ''; 109 $query = "DELETE FROM {$table} {$where}"; 110 $res = mysqli_query ( $link, $query ); 111 if ($res) { 112 return mysqli_affected_rows ( $link ); 113 } else { 114 return false; 115 } 116 } 117 118 /** 119 * 查询指定记录 120 * @param object $link 121 * @param string $query 122 * @param string $result_type 123 * @return array|boolean 124 */ 125 function fetchOne($link, $query, $result_type = MYSQLI_ASSOC) { 126 $result = mysqli_query ( $link, $query ); 127 if ($result && mysqli_num_rows ( $result ) > 0) { 128 $row = mysqli_fetch_array ( $result, $result_type ); 129 return $row; 130 } else { 131 return false; 132 } 133 } 134 135 /** 136 * 查询所有记录 137 * @param object $link 138 * @param string $query 139 * @param string $result_type 140 * @return array|boolean 141 */ 142 function fetchAll($link, $query, $result_type = MYSQLI_ASSOC) { 143 $result = mysqli_query ( $link, $query ); 144 if ($result && mysqli_num_rows ( $result ) > 0) { 145 while ( $row = mysqli_fetch_array ( $result, $result_type ) ) { 146 $rows [] = $row; 147 } 148 return $rows; 149 } else { 150 return false; 151 } 152 } 153 154 /** 155 * 得到表中的记录数 156 * @param object $link 157 * @param string $table 158 * @return number|boolean 159 */ 160 function getTotalRows($link, $table) { 161 $query = "SELECT COUNT(*) AS totalRows FROM {$table}"; 162 $result = mysqli_query ( $link, $query ); 163 if ($result && mysqli_num_rows ( $result ) == 1) { 164 $row = mysqli_fetch_assoc ( $result ); 165 return $row ['totalRows']; 166 } else { 167 return false; 168 } 169 } 170 171 /** 172 * 得到结果集的记录条数 173 * @param object $link 174 * @param string $query 175 * @return boolean 176 */ 177 function getResultRows($link, $query) { 178 $result = mysqli_query ( $link, $query ); 179 if ($result) { 180 return mysqli_num_rows ( $result ); 181 } else { 182 return false; 183 } 184 } 185 186 187 188 /** 189 * @param object $link 190 */ 191 function getServerInfo($link) { 192 return mysqli_get_server_info ( $link ); 193 } 194 /** 195 * @param object $link 196 */ 197 function getClientInfo($link) { 198 return mysqli_get_client_info ( $link ); 199 } 200 201 /** 202 * @param object $link 203 */ 204 function getHostInfo($link){ 205 return mysqli_get_host_info($link); 206 } 207 208 /** 209 * @param object $link 210 */ 211 function getProtoInfo($link) { 212 return mysqli_get_proto_info ( $link ); 213 }
配置文件config.php
1 <?php 2 $config = array( 3 'host'=>'localhost', 4 'user'=>'root', 5 'password'=>'root', 6 'charset'=>'utf8', 7 'dbName'=>'51zxw' 8 ); 9 10 11 define('DB_HOST','localhost'); 12 define('DB_USER','root'); 13 define('DB_PWD','root'); 14 define('DB_CHARSET','utf8'); 15 define('DB_DBNAME','51zxw');
3、数据库里面的数据绑定到web页面
数据库里面的数据绑定到web页面是先通过mysqli取出数据,然后在把数据显示到web页面就好
(1)、通过mysqli取出数据核心代码:
1 $link = connect3(); 2 $query = "select * from student limit {$offSet},{$pageSize}"; 3 $rows = fetchAll($link, $query);
其中的connect3()是封装好的链接mysql数据库的代码
(2)、把数据显示到web页面核心代码
1 <tbody> 2 <?php foreach ($rows as $admin):?> 3 <tr> 4 <th><?php echo $admin['id']?></th> 5 <th><?php echo $admin['username']?></th> 6 <th><?php echo $admin['age']?></th> 7 <th><?php echo $admin['sex']?></th> 8 <td> 9 <span>详情</span> 10 <span>修改</span> 11 <span class="delect" data_id="<?php echo $admin['id']?>">删除</span> 12 </td> 13 </tr> 14 <?php endforeach;?> 15 </tbody>
其实就用一个foreach循环遍历取到的每一条数据就可以了
4、删除响应的完成
删除操作是用的ajax技术,就是通过js代码把学生的id传给student页面下的doAction.php响应页面
然后在doAction.php响应界面通过mysqli来操作数据库完成删除的目的
(1)、通过js代码把学生的id传给student页面下的doAction.php响应页面核心代码
1 <?php foreach ($rows as $admin):?> 2 <tr> 3 <th><?php echo $admin['id']?></th> 4 <th><?php echo $admin['username']?></th> 5 <th><?php echo $admin['age']?></th> 6 <th><?php echo $admin['sex']?></th> 7 <td> 8 <span>详情</span> 9 <span>修改</span> 10 <span class="delect" data_id="<?php echo $admin['id']?>">删除</span> 11 </td> 12 </tr> 13 <?php endforeach;?> 14 </tbody> 15 <script> 16 $(function(){ 17 $(".delect").click(function(){ 18 var id = $(this).attr("data_id"); 19 var url = "doAction.php?id="+id; 20 $.get(url); 21 $(this).parent().parent().empty(); 22 }); 23 }); 24 </script>
(2)、在doAction.php响应界面通过mysqli来操作数据库完成删除的目的
1 <?php 2 header("content-type:text/html;charset=utf-8"); 3 require_once '../config/config.php'; 4 require_once '../functions/common.func.php'; 5 require_once '../functions/mysql.func.php'; 6 $link = connect3(); 7 $table = "student"; 8 $id = isset($_GET["id"])?$_GET["id"]:""; 9 if($id==""){ 10 //这里是插入学生,本来应该是判断action为add的 11 $username = $_GET["username"]; 12 $age = $_GET["age"]; 13 $sex = $_GET["sex"]; 14 $data = compact('username','age','sex'); 15 $res = insert($link, $data, $table); 16 if($res){ 17 alertMes("插入数据成功", "layout-index.php"); 18 }else{ 19 alertMes("插入失败", "layout-index.php"); 20 } 21 }else{ 22 delete($link, $table,"id = ".$id); 23 }
就是第22行的代码,第10到第二十行代码时插入操作的代码
5、增加操作的实现
增加操作就是通过在layout-form.html页面下填好数据传到doAction响应页面,然后在doAction响应页面调用mysqli来完成数据库的插入
(1)、在layout-form.html页面下填好数据传到doAction响应页面核心代码
1 <div class="panel panel-default"> 2 <div class="panel-heading">新增学生</div> 3 <div class="panel-body"> 4 <form action="doAction.php?act=add" method="get" class="form-horizontal" role="form"> 5 <div class="form-group"> 6 <label class="col-sm-2 control-label">姓名</label> 7 <div class="col-sm-5"> 8 <input type="text" name="username" class="form-control" placeholder="姓名"> 9 </div> 10 <div class="col-sm-5"> 11 <p class="form-control-static text-danger">姓名不能为空</p> 12 </div> 13 </div>
(2)、在doAction响应页面调用mysqli来完成数据库的插入
1 <?php 2 header("content-type:text/html;charset=utf-8"); 3 require_once '../config/config.php'; 4 require_once '../functions/common.func.php'; 5 require_once '../functions/mysql.func.php'; 6 $link = connect3(); 7 $table = "student"; 8 $id = isset($_GET["id"])?$_GET["id"]:""; 9 if($id==""){ 10 //这里是插入学生,本来应该是判断action为add的 11 $username = $_GET["username"]; 12 $age = $_GET["age"]; 13 $sex = $_GET["sex"]; 14 $data = compact('username','age','sex'); 15 $res = insert($link, $data, $table); 16 if($res){ 17 alertMes("插入数据成功", "layout-index.php"); 18 }else{ 19 alertMes("插入失败", "layout-index.php"); 20 } 21 }else{ 22 delete($link, $table,"id = ".$id); 23 }
1、第10到第20行就是插入数据的代码
2、这里是为了图方便这样写,本来应该是判断act是add的情况下,把这段代码放在if那里面去的
6、分页操作的实现
分页操作是通过在数据库中查到总条数,然后知道有多少页,每一页的信息查询就是通过mysql的limit关键词来实现的,然后把查到的数据放到对应的页里面去就好了
(1)、取数据及判断分页的核心代码:
1 <?php 2 require_once '../functions/mysql.func.php'; 3 require_once '../config/config.php'; 4 header("content-type:text/html;charset=utf-8"); 5 $link = connect3(); 6 $page = $_GET['page']?$_GET['page']:1; 7 $pageSize = 5; 8 $offSet = ($page-1)*5; 9 $table = "student"; 10 $totalRows = getTotalRows($link, $table); 11 $sumPage = ceil($totalRows/$pageSize); 12 $query = "select * from student limit {$offSet},{$pageSize}"; 13 $rows = fetchAll($link, $query); 14 ?>
(2)、选择页面的代码
1 <nav> 2 <ul class="pagination pull-right"> 3 <?php 4 for($i = 1;$i<=$sumPage;$i++){ 5 echo "<li><a href='layout-index.php?page={$i}'>$i</a></li>"; 6 } 7 8 ?> 9 </ul> 10 </nav>
7、前端框架用的bootstrap
四、完整代码
完整代码会放在github上面,直接下载就可以用
链接如下:
fry404006308/PHP_StudentManage: PHP_StudentManage
https://github.com/fry404006308/PHP_StudentManage