PHP -- 案例 -- 学生管理系统
2019-08-08 本文已影响0人
潘肚饿兵哥哥
/*$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
<?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
//修改学生信息的跳转页面
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