• 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

  • 相关阅读:
    mysql MHA报错 Can't exec "mysqlbinlog": No such file or directory at /usr/local/share/perl5/MHA/BinlogManager.pm line 99.
    树莓派搭建私人服务器
    动手写简单的嵌入式操作系统一
    java 返回json数据
    C语言中内存分配
    IntelliJ IDEA14.0.3+Maven+SpringMVC+Spring+Hibernate光速构建Java权限管理系统(三)
    linux设备驱动归纳总结
    阿里云centos6.5下搭建javaWeb运行环境
    JAVAWEB项目如何实现验证码
    Linux驱动开发:USB驱动之usb_skel分析
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/8553223.html
Copyright © 2020-2023  润新知