基于PHP使用thinkphp开发的教学管理系统

一、登录部分

(1)在输入域名时,首页判断用户是否进行过登录


在Base控制器中初始化两个方法,根据是否获取到用户的id进行判断,并首先进行执行:

class Base extends Controller
{
    protected function _initialize()
    {
        parent::_initialize();
        define('USER_ID', Session::get('user_id'));
    }

    protected function isLogin()
    {
        if (empty(USER_ID)) {
            $this->error('用户未登录,无权访问', url('user/login'));
        }
    }

    protected function alreadyLogin()
    {
        if (!empty(USER_ID)) {
            $this->error('用户已经登录,请勿重复登录', url('index/index'));
        }
    }
}

(2)登录场景

使用到thinkphp提供的验证码功能,并进行校验,通过ajax的方式进行用户信息的校验和提交


调用User的控制器中调用checkLogin的方法,获取并校验:

//验证登录
    public function checkLogin(Request $request)
    {
        //初始返回参数
        $status = 0;
        $result = '';
        $data = $request->param();

        $rule = [
            'name|用户名' => 'require',
            'password|密码' => 'require',
            'verify|验证码' => 'require|captcha',
        ];
        $msg = [
            'name' => ['require'=>'用户名不能为空,请检查'],
            'password' => ['require'=>'密码不能为空,请检查'],
            'verify' => [
                    'require' => '验证码不能为空,请检查!',
                    'captcha' => '验证码错误,请检查!',
                ],
        ];
        $result = $this->validate($data, $rule,$msg);
        if ($result === true) {
            $map = [
                'name' =>$data['name'],
                'password' =>md5($data['password']),
            ];
            $user = UserModel::get($map);
            if ($user === null) {
                $status = 0;
                $result = '没有找到该用户';
            } else {
                $status = 1;
                $result = '验证通过,点击【确定】进入';
                Session::set('user_id',$user->id);
                Session::set('user_info', $user->getData());
                $user->setInc('login_count');
            }
        }
        return ['status'=>$status,'message'=>$result,'data'=>$data];
    }

验证码的其他配置参考:https://www.kancloud.cn/manual/thinkphp5/154295

二、主页面及主要功能

这里主要是使用到了thinkphp模板中的内置标签,包括不同角色查看不同的内容,超级管理员可以查看到所有的管理员,并可以对他们的内容进行修改,而普通的管理员只可以对自己的信息进行修改。


主页面显示的信息:

<tr>
	<th width="30%">服务器计算机名</th>
	<td><span id="lbServerName">{$Reque
</tr>
<tr>
	<td>服务器IP地址</td>
	<td>{$Request.ip}</td>
</tr>
<tr>
	<td>服务器域名</td>
	<td>{$Request.domain}</td>
</tr>
<tr>
	<td>当前PHP版本</td>
	<td>{$Think.const.PHP_VERSION}</td>
</tr>
<tr>
	<td>服务器版本 </td>
	<td>{$Think.const.PHP_OS}</td>
</tr>
<tr>
	<td>当前请求URL</td>
	<td>{$Request.url.true}</td>
</tr>
<tr>
	<td>当前Session数量 </td>
	<td>{:count($_SESSION)}</td>
</tr>
<tr>
	<td>当前SessionID </td>
	<td>{:session_id()}</td>
</tr>

三、对管理员的操作

对管理员的操作主要包括超级管理员对管理员状态的修改,可以对管理员登录系统进行控制,添加新的管理员;删除管理员;和批量恢复删除的管理员;


(1)显示管理员列表及权限控制

//显示管理员界面
    public function adminList()
    {
        $this->assign('title', '管理员列表');
        $this->assign('keywords', '教学管理系统');
        $this->assign('dsc', '教学案例');

        $this->view->count = UserModel::count();

        $userName = Session::get('user_info.name');
        if ($userName == 'admin') {
            $list = UserModel::all();
        } else {
            $list=UserModel::all(['name'=>$userName]);
        }

        $this->assign('list', $list);

        return $this->fetch('admin_List');
    }

对权限的控制:

{eq name="$Think.session.user_info.name" value="admin"}
{if condition="$vo.status eq '已启用'"}
<a style="text-decoration:none" onClick="admin_stop(this,{$vo.id})" href="javascript:;" title="停用">
    <i class="Hui-iconfont"></i>
</a>
{else /}
<a style="text-decoration:none" onClick="admin_start(this,{$vo.id})" href="javascript:;" title="启用">
    <i class="Hui-iconfont"></i>
</a>
{/if}
{/eq}

(2)添加管理员

//添加管理员提交
    public function addUser(Request $request)
    {
        $data = $request->param();
        $status = 1;
        $message = '添加成功';

        $rule = [
            'name|用户名' => "require|min:3|max:10",
            'password|密码' => "require|min:3|max:10",
            'email|邮箱' => 'require|email'
        ];

        $result = $this -> validate($data, $rule);

        if ($result === true) {
            $user= UserModel::create($request->param());
            if ($user === null) {
                $status = 0;
                $message = '添加失败~~';
            }
        }else{
            $status = 0;
            $message = '添加失败~~';
        }

        return ['status'=>$status, 'message'=>$message];
    }

(3)批量恢复管理员与删除管理员

主要是在设计数据库的时候,增加一个is_delete的字段,当选择删除时,修改字段值为1,并记录修改删除的时间

同理,批量的恢复了逻辑就是把is_delete字段值为1的重新变为0,并且把删除时间字段置空。这其实也就是软删除的操作。

//删除用户
public function deleteUser(Request $request)
{
    $user_id = $request->param('id');
    UserModel::update(['is_delete' => 1], ['id' => $user_id]);
    UserModel::destroy($user_id);
}
//恢复删除内容
public function unDelete()
{
    UserModel::update(['delete_time'=>null],['is_delete'=>1]);
} 

四、对班级、教师、学生的操作

有了之前对管理员的操作基础、后面的内容其实已经可以根据自己的逻辑来逐步实现。

(1)班级列表


(2)添加教师


(3)学生列表


对于列表中显示数据,会用到分页的功能,拿学生列表的显示来说明:

在页面中使用:

<div class="container">
    <div class="row">
        <div class="col-md-4"></div>
        <div class="col-md-4">{$studentList->render()}</div></div>
    <div class="col-md-4"></div>
</div>

在控制器中使用模型中自带的分页方法进行分页操作:

 $studentList = StudentModel::paginate(8);

五、总结

    这是我第一个使用thinkphp制作的小项目,其中存在诸多问题,比如首先要说道的安全性的问题,在后续的内容中我会采用到AES对一些重要的数据进行加密,另外,没有进行路由配置,都是直接通过模块-》控制器-》方法进行操作,这也是需要改进的地方,还有分页的操作,模型自带的分页操作感觉不够灵活,后续会更新采用layui进行分页的方法。

猜你喜欢

转载自blog.csdn.net/dhywjx/article/details/80712939