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

2019-08-08  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读