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表示激活了

核心代码如下:

 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

 

转载于:https://www.cnblogs.com/Renyi-Fan/p/8553223.html

  • 10
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值