美文网首页
PHP -- 案例 -- 学生管理系统

PHP -- 案例 -- 学生管理系统

作者: 潘肚饿兵哥哥 | 来源:发表于2019-08-08 20:31 被阅读0次

    \color{rgba(254, 67, 101, .8)}{在之前的基础上添加分页和修改页面}

    \color{rgba(254, 67, 101, .8)}{学生信息列表}

    /*$student = json_encode($student);//把数组转成json格式的字符串  */  
    $filename = 'class.txt';
    
    $class = [];
    if(file_exists($filename)){
        //file_exists — 检查文件或目录是否存在
        //处理这个文件之前要先检查文件是否存在
        //有这个文件才执行,没有就不执行了
        
    $class = file($filename);
        foreach($class as $k=>$v){
            $class[$k] = json_decode($v, true);
        }
    }
    
    
    //分页显示
    /* 
       $num = 3;
       第 1 页: $offset = 0 
       第 2 页: $offset = 3 $num等于几这里就是几
       第 2 页: $offset = $num
       第 2 页: $offset = 1*$num
       
       这里分页重点就是$now_page的变化
    */
    
    $num = 3;//每页显示数量
    
    $count = count($class);//获取学生信息总的数量
    $total_page = ceil($count/$num);//ceil — 进一法取整,取整数 +1
    //一共需要显示总的页数  
    //这里除出来可能是小数,intval整型不能用在这里
    //因为整型会取消小数,就会少显示一个学生信息
    // 7/3 = 2.333 intval取整 = 2  ceil取整 = 3
    
    
    //获取当前页  
    $now_page = isset($_GET['page'])?$_GET['page']:1;
    //如果写1就写死了,数据就不会变了
    //但是不写1的话,第一次点进来地址栏是不显示page的,就获取不到page
    //所以需要用三目运算符,如果没有page取值就取1,有的话就优先获取page的值
    //$_GET['page']获取浏览器搜索栏的当前页(地址栏page后面的值)
    //不是只有form表单才能用$_GET
    
    
    
    //这个if判定点到最后一页之后,再点就停在最后一页
    if($now_page < $total_page){//当前页小于总页数,就可以继续下一页
        $next_page = $now_page + 1;//下一页
    }else{
        $next_page = $total_page;//如果是最后一页,怎么点都停在这一页
    }
    
    //这个if判定点到第一页之后,再点就停在第一页
    if($now_page > 1){
        $prev_page = $now_page-1;//上一页 = 当前页 - 1
    }else{
        $prev_page = 1;//如果是第一页,怎么点都停在这一页
    }
    
    
    
    $offset = ($now_page - 1)*$num;
    $list = array_slice($class, $offset, $num);
    //array_slice — 从数组中取出一段
    //取出来的在页面显示,
    //第一个参数是要截取的数组
    //第二个参数是从几开始
    //第三个参数是截几个(每页显示几个)
    ?>
        
        
        
        
            
    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <title>学生列表</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title></title>
    </head>
    <body>
        <table width="500" border="1" align="center">
            <caption><a href="add_student.php">添加学生</a></caption>
            <tr>
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
                <th>操作</th>
            </tr>
            
            <?php
                foreach($list as $v){
                    echo "<tr align='center'><td>{$v['name']}</td><td>{$v['sex']}</td><td>{$v['age']}</td><td><a href='update_student.php?name={$v['name']}'>修改</a>|<a href=''>删除</a></td></tr>";
                    //要做修改功能的话还要新建一个页面
                    //同时要修改哪一个学生的信息,也要把名字传过去
                    //这个名字会在地址栏显示出来,这样就知道要修改的是哪一个了
                }   
            ?>
            
            
            <tr>
                <td colspan="4" align="right"><!-- 分页栏 -->
                    <?php echo $now_page;?>/<?php echo $total_page;?><!-- 显示共有多少页,当前在第几页 -->
                    <a href="?page=<?php echo $prev_page;?>">上一页</a>
                    <a href="?page=<?php echo $next_page;?>">下一页</a>
                </td>
            </tr>
            
        </table>
    </body>
    </html>
    
    image.png

    \color{rgba(254, 67, 101, .8)}{添加学生信息页面}

    <?php
        if(!empty($_POST)){//如果下面的post不为空,就操作
            /* print_r($_POST);//此时接收到的数据是一个列表 */
            $student = $_POST;//将获取到的值赋给$student
            $student = json_encode($student);//将接收到的值(数组)转换成字符串
            $num = file_put_contents('class.txt', $student."\n", FILE_APPEND);//将转换好的字符串保存
            if($num > 0){//验证$num是否收到数据,大于0就成功,否则失败
                die("<script>alert('添加成功'); location.href='student_list.php';</script>");//成功就输出并且跳转到显示页面
            }else{
                die("<script>alert('添加失败');location.href='add_student.php';</script>");//失败也输出信息但是停在此页面
            }
        }
    ?>
    
    
    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <title>添加学生</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title></title>
    </head>
    <body>
        <h3>添加学生</h3>
        <form action="" method='post'>
            <p>姓名: <input type="text" name="name"></p>
            <p>性别: <input type="radio" name="sex" value="男" checked/>男 <input type="radio" name="sex" value="女" />女</p>
            <p>年龄: <input type="text" name="age"></p>
            <p><button>提交</button></p>
        </form>
    </body>
    </html>
    
    image.png

    \color{rgba(254, 67, 101, .8)}{修改学生信息页面}

    //修改学生信息的跳转页面
    
    
    
    
        function find_student($class, $name){
            $result = [];
            foreach($class as $key=>$student){
                //这里要加key是因为要知道需要修改的学生在数据库的位置
                //所以需要拿到这个学生信息在数组的索引
                if($student['name'] == $name){
                    $result = array_merge($student, ['number' => $key]);
                    //array_merge — 合并一个或多个数组
                    //给学生加一个学号(就是数组的索引)
                    break;
                }
            }
            if(empty($result)){
                $ret = '查无此人';
            }else{
                $ret = $result;
            }
            return $ret;
        }
        //在这里是要修改的学生信息
        $name = $_GET['name'];
        
        
        //班级信息:
        $class = [];
        $filename = 'class.txt';
        if(file_exists($filename)){
            $class = file($filename);
            foreach($class as $k=>$v){
                $class[$k] = json_decode($v, true);
            }
        }
        // print_r($class); 
        $info = find_student($class, $name);
        // print_r($info);
        if(!empty($_POST)){//如果接收到的数据不为空,就是如果接收到了数据做以下操作
            $data = $_POST;
        }
    ?>
    
    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title></title>
    </head>
    <body>
        <h3>修改学生信息</h3>
        <form action="" method='post'>
            
            <p>姓名: <input type="text" name="name" value=<?php echo $info['name'];?>></p>
            <!-- 将获取到的数组中的name(要修改的人名)显示在输入框中 -->
            
            
            <p>性别: <input type="radio" name="sex" value="男" <?php echo$info['sex']=='男'?'checked':'';?>/>男 <input type="radio" name="sex" value="女" <?php echo$info['sex']=='女'?'checked':'';?>/>女</p>
            <!-- 如果获取到的性别是男,就在男选项输出checked -->
            <!-- 如果获取到的性别是女,就在女选项输出checked -->
            
            
            <p>年龄: <input type="text" name="age" value=<?php echo $info['age']; ?>></p>
            <!-- 将获取到的数组中的age(要修改的人年龄)显示在输入框中 -->
            
            <input type="hidden" name="number" value="<?php echo $info['number'];?>" />
            <!-- 将要修改学生信息的索引(学号)传过来并隐藏(页面看不到,但是源码里是有的)-->
            <!-- 这样的话,提交的时候这个值是有的,但是它不会影响布局 -->
            
            <p><button>提交</button></p>
        </form>
    </body>
    </html>
    
    image.png

    相关文章

      网友评论

          本文标题:PHP -- 案例 -- 学生管理系统

          本文链接:https://www.haomeiwen.com/subject/lzxzdctx.html