入门php学习 -- 学生信息系统

这一系列的博客,是为了理顺我在学php上的思路;感觉自己一直在写,但是却不知道写的是什么,一直跟着别人的思路在走,想要有自己的想法以及写代码的能力;为此,我决定将之前自己敲过的代码,整理一下,通过博客的形式来理顺自己的思路。

效果图如下,要实现的点有两个:1、点击查看详细信息  可以查看可以查看具体人员的详细信息

2、每页四条记录,实现效果是可以正常翻页   

这个项目主要就是实现这两个方面的功能

实现步骤:

1、首先要有数据,还有数据的展示,暂时还没有跟数据库相连,所有数据只能通过前台来传,新建一个list.php页面

//以二维数组保存学生信息
$info=array(
    array('name'=>'王大壮','birth'=>'1996-08-07','subject'=>'PHP','snum'=>'0150427001'),
    array('name'=>'郭大印','birth'=>'1990-08-07','subject'=>'C#','snum'=>'0150427002'),
    array('name'=>'贾小娇','birth'=>'1992-07-29','subject'=>'PHP','snum'=>'0150427003'),
    array('name'=>'王小六','birth'=>'1995-05-04','subject'=>'C++','snum'=>'0150427004'),
    array('name'=>'宫大麟','birth'=>'1996-02-28','subject'=>'C++','snum'=>'0150427005'),
    array('name'=>'郭小斌','birth'=>'1986-11-22','subject'=>'PHP','snum'=>'0150427006'),
);

以此二维数组的方式来添加数据,以下面的方式来显示数据;同时在点击查看详情那里,需要带上链接的地址,以传递的参数

<div>&gt;&gt;学生管理&gt;&gt;0427编程班&gt;&gt;学生信息列表</div>
<table>
    <tr><td>学号</td><td>姓名</td><td>出生日期</td><td>详情</td></tr>
    <!-- 循环遍历将数据取出-->
    <?php for($i=0,$len=count($info);$i<$len;++$i){ ?>
        <tr>
            <td><?php echo $info[$i]['snum'] ?></td>
            <td><?php echo $info[$i]['name'] ?></td>
            <td><?php echo $info[$i]['birth'] ?></td>
            <td><a href="./detail.php?id=<?php echo $i;?>&page=<?php echo $page;?>">点击查看详情</a></td>
        </tr>
    <?php } ?>
</table>

2、数据展示好了之后,应该做的是分页功能;页面的分页功能卸载 list.php页面中,单独的展示写在一个单独的函数里面,将其放在function.php中

//分页 ,这个是分页的功能,还需要有前台页面的支持
//总条数 每页显示数 当前页 总页面
$total_num = count($info);
$perpage = 4; //每页显示4条
//先判断当前页是否存在,不存在就取1
$page = isset($_GET['page'])? (int)$_GET['page'] :1;
//获取总页面,但是要注意,不一定是整数,所以要取整数 ceil函数可以实现
$total_page = ceil($total_num / $perpage );
//还要判断当前页是否小于1 或者是大于总页数  否则会有报错
$page = max($page,1);
$page = min($page,$total_page);
//分页需要遍历数据,需要知道每一页开始的索引值 第一页是 0123 第二页是 4567
$start_index=$perpage*($page-1);
$end_index = $perpage*$page -1 ;
//防止结果超过最大记录数,因为索引是从0开始的,所以最小值应该是总数-1
$end_index = min($end_index,$total_num-1);

function.php 中显示的showPage的功能函数,这个函数需要在list.php中调用,才会显示

function showPage($page,$total_page){
    //拼接"首页"链接
    $html = '<a href="?page=1">【首页】</a>';
    //拼接“上一页”链接
    $pre_page = $page - 1<= 0 ? $page :($page -1);
    $html.='<a href="?page='.$pre_page.'">【上一页】</a>';
    //拼接“下一页”链接 注意判断
    $next_page = $page + 1> $total_page ? $page :($page + 1);
    $html.='<a href="?page='.$next_page.'">【下一页】</a>';
    //拼接“尾页”链接
    $html.='<a href="?page='.$total_page.'">【尾页】</a>';
    //返回拼接后的分页链接
    return $html;
}

调用代码如下:

<!-- 将分页页面展示出来 -->
<div><?php echo  showPage($page,$total_page);?></div>

问题来了,项目做到这,页面显示出来,但是问题是,我的代码控制每页只显示4条数据,为什么这是全部显示呢?我的猜测是在遍历数据的时候没有进行分页,定位到那段代码再去看看

在创建分页的时候,会为每一条数据创建索引,所以在遍历数据的时候,需要根据数据的索引值来遍历,也就是图中红框的内容需要修改

成功后的页面是这样的:

3、分页做好之后,就是点击查看详情 了;几个重点:(1)你需要知道每个人的信息,并获取 (2)将其展示出来,创建一个个性标签

修改源数据页面,将数据单独拿出来作为一个文件,以return 返回数据,通过数组来获取数据

//以二维数组保存学生信息
return array(
    'info' => array(
        array('name'=>'王大壮','birth'=>'1996-08-07','subject'=>'PHP','snum'=>'0150427001'),
        array('name'=>'郭大印','birth'=>'1990-08-07','subject'=>'C#','snum'=>'0150427002'),
        array('name'=>'贾小娇','birth'=>'1992-07-29','subject'=>'PHP','snum'=>'0150427003'),
        array('name'=>'王小六','birth'=>'1995-05-04','subject'=>'C++','snum'=>'0150427004'),
        array('name'=>'宫大麟','birth'=>'1996-02-28','subject'=>'C++','snum'=>'0150427005'),
        array('name'=>'郭小斌','birth'=>'1986-11-22','subject'=>'PHP','snum'=>'0150427006'),
    )
);
详细数据页面的显示包含 姓名 学号 生日 年龄 星座还有个性标签

首先需要他们有一个容器可以显示出来,我的页面文件都是包含在php里面啦,这个是放在detail.php中,对于年龄的计算,星座的计算,通过两个函数来实现,这两个函数放在function.php页面中,个性标签的设置,可以放在当前页面中;另外还有部分数据处理,也放在了当前页面,当前页面是指 detail.php

年龄以及星座的功能函数

//年龄处理
function getAge($stu_by,$stu_bm,$stu_bd){
    //获取当前日期  ynj 分别是年月日的代号
    $cur_y = date('Y');
    $cur_m = date('n');
    $cur_d = date('j');
    //年龄计算
    $age = $cur_y - $stu_by ;
    //判断有没有过生日
    if($cur_m < $stu_bm || $cur_m == $stu_bm && $cur_d < $stu_bd){
        $age--;
    }
 return $age;
}

function getConst($stu_bm,$stu_bd){
 if ($stu_bd<10){
     $stu_bd = '0'.$stu_bd;  //补0好计算,或者使用其他方法也可以
 }
    //将月与日拼接
    $date = "$stu_bm.$stu_bd";
    //定义保存星座图片名称的变量
    $lev = '';
    if($date >=1.21 && $date <= 2.19){
        $const = '水瓶座';
        $lev = 1;
    }elseif($date >=2.20 && $date <= 3.20){
        $const = '双鱼座';
        $lev = 2;
    }elseif($date >=3.21 && $date <= 4.20){
        $const = '白羊座';
        $lev = 3;
    }elseif($date >=4.21 && $date <= 5.21){
        $const = '金牛座';
        $lev = 4;
    }elseif($date >=5.22 && $date <= 6.21){
        $const = '双子座';
        $lev = 5;
    }elseif($date >=6.22 && $date <= 7.22){
        $const = '巨蟹座';
        $lev = 6;
    }elseif($date >=7.23 && $date <= 8.23){
        $const = '狮子座';
        $lev = 7;
    }elseif($date >=8.24 && $date <= 9.23){
        $const = '处女座';
        $lev = 8;
    }elseif($date >=9.24 && $date <= 10.23){
        $const = '天秤座';
        $lev = 9;
    }elseif($date >=10.24 && $date <= 11.22){
        $const = '天蝎座';
        $lev = 10;
    }elseif($date >=11.23 && $date <= 12.21){
        $const = '射手座';
        $lev = 11;
    }else{
        $const = '魔羯座';
        $lev = 12;
    }
    return array($const,$lev);
}

detail.php页面的调用

//调用自定义的函数,获取年龄
$age = getAge($stu_by,$stu_bm,$stu_bd);
//获取学生星座,和星座代号
list($const,$lev) = getConst($stu_bm,$stu_bd);

到此,这个功能已经完成大半,还有一个个性标签,首先得定义,之后是调用

//定义学生个性标签
$label = '勇敢,低调,直率,执着,善良,乐活族,手机控,90后';
//分割学生个性标签
$labels = explode(',',$label);

同样下面的显示界面也需要修改,需要将其显示出来

<tr><td>星座:</td><td><?php echo $const;?>
        <img src="./images/<?php echo $lev.'.png';?>">
    </td>
</tr>
<tr>
    <td>个性标签:</td>
    <td><?php
        foreach($labels as $v){
            //定义数组保存标签块展示颜色
            $class_name = array('blue','red','yellow','green');
            $index = array_rand($class_name);  //为每一个标签带有一个不一样的颜色
            echo '<span class="'.$class_name[$index].'">'.$v.'</span>';
        }
        ?>
    </td>
</tr>

最后的效果就是,但是这样的图片并不美观

你们可以根据自己的需要添加css ,使它变得更漂亮一下,我会在下一篇博客上附上本篇的完整代码,感谢正在努力的自己。

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值