thinkphp5项目--个人博客(四)

冷暖自知 提交于 2021-02-16 10:52:19

thinkphp5项目--个人博客(四)

项目地址

fry404006308/personalBlog: personalBlog
https://github.com/fry404006308/personalBlog

 

 一、表单数据显示---文件、图片、选择列表

就是把数据库的数据显示到如上的edit表单上面来

 

代码

 1                         <div class="form-group">
 2                             <label for="group_id" class="col-sm-2 control-label no-padding-right">缩略图</label>
 3                             <div class="col-sm-6">
 4                                  <input  id="pic" placeholder="" name="pic" style="display:inline;"  type="file">
 5                                  {if condition="$data['pic'] neq '' "}
 6                                      <img src="__IMG__{$data.pic}" height="50px" alt="">
 7                                  {else /}
 8                                      <span>暂无缩略图</span>
 9                                  {/if}
10                             </div>
11                         </div> 
12 
13                         
14                         <div class="form-group">
15                             <label for="group_id" class="col-sm-2 control-label no-padding-right">所属栏目</label>
16                             <div class="col-sm-6">
17                                 <select class="form-control" name="cateid"  required="" id="cateid">
18                                     <option value="">请选择栏目</option>
19                                     {volist name="cateres" id="value"}
20                                     <option {if condition="$value['id'] eq $data['cateid']"} selected="selected" {/if} value="{$value.id}">{$value.catename}</option>
21                                     {/volist}
22                                 </select>
23                             </div>
24                             <p class="help-block col-sm-4 red">* 必填</p>
25                         </div> 
26                         
27     
28                         <div class="form-group">
29                             <label for="group_id" class="col-sm-2 control-label no-padding-right">是否推荐</label>
30                             <div class="col-sm-6">
31                                 <label>
32                                     <input {if condition="$data['state'] eq 1"} checked="checked" {/if} class="checkbox-slider colored-darkorange"  name="state" id="state" value="{$data.state}" type="checkbox">
33                                     <!-- checked="checked" -->
34                                     <span class="text"></span>
35                                 </label>
36                             </div>
37                         </div>

 

 

二、用户登录

模型做数据(数据库来的数据)处理,控制器做逻辑处理

 

模型

 1 <?php
 2 namespace app\admin\model;
 3 
 4 use think\Model;
 5 use think\Db;
 6 class Login extends Model
 7 {
 8     //模型是处理数据的
 9     public function login($data){
10         $user=DB::name('admin')->where('username','=',$data['username'])->find();
11         //如果用户存在我们就进行处理,否则不进行处理
12         if($user){
13             //密码正确和密码错误两种情况
14             if($user['password']==md5($data['password'])){
15                 return 1;//信息正确
16             }else{
17                 return 0;//密码错误
18             }
19 
20         }else{
21             return -1;//用户不存在
22         }
23 
24     }
25 }

 

控制器

 1 <?php
 2 namespace app\admin\controller;
 3 
 4 use think\Controller;
 5 use app\admin\model\Login as LoginModel;
 6 
 7 class Login extends controller
 8 {
 9     public function index()
10     {
11         if(request()->isPost()){
12             $admin=new LoginModel();
13             $data=input('post.');
14             if($admin->login($data)==-1){
15                 $this->error('用户不存在');
16             }elseif($admin->login($data)==0){
17                 $this->error('用户密码错误');
18             }elseif($admin->login($data)==1){
19                 $this->success('成功登陆','index/index');
20             }
21         }
22         return view('login');
23     }
24     
25 
26 }

 

 

三、session操作

在登录成功的模型(model/Login.php)中添加session

 1 <?php
 2 namespace app\admin\model;
 3 
 4 use think\Model;
 5 use think\Db;
 6 use think\Session;
 7 use think\Request;
 8 class Login extends Model
 9 {
10     //模型是处理数据的
11     public function login($data){
12         $user=DB::name('admin')->where('username','=',$data['username'])->find();
13         //如果用户存在我们就进行处理,否则不进行处理
14         if($user){
15             //密码正确和密码错误两种情况
16             if($user['password']==md5($data['password'])){
17                 //写入session
18                 Session::set('username',$user['username']);
19                 Session::set('id',$user['id']);
20                 return 1;//信息正确
21             }else{
22                 return 0;//密码错误
23             }
24 
25         }else{
26             return -1;//用户不存在
27         }
28 
29     }
30 }

删除session,退出登录的时候删除session

1     public function logout(){
2         // 清除session(当前作用域)
3         session(null);
4         return $this->success('退出成功!!','login/index');
5     }

照着thinkphp的操作手册,session还是比较好弄的

thinkphp手册session参照位置

助手函数
系统也提供了助手函数session 完成相同的功能,例如:
// 初始化session session([ 'prefix' => 'module', 'type' => '', 'auto_start' => true, ]); // 赋值(当前作用域) session('name', 'thinkphp'); // 赋值think作用域 session('name', 'thinkphp', 'think'); // 判断(当前作用域)是否赋值 session('?name'); // 取值(当前作用域) session('name'); // 取值think作用域 session('name', '', 'think'); // 删除(当前作用域) session('name', null); // 清除session(当前作用域) session(null); // 清除think作用域 session(null, 'think');

部分对应的视图,修改密码那部分和session没有关系

 1                             <!--Login Area Dropdown-->
 2                             <ul class="pull-right dropdown-menu dropdown-arrow dropdown-login-area">
 3                                 <li class="username"><a>David Stevenson</a></li>
 4                                 <li class="dropdown-footer">
 5                                     <a href="{:url('admin/logout')}">
 6                                             退出登录
 7                                         </a>
 8                                 </li>
 9                                 <li class="dropdown-footer">
10                                     <a href="{:url('admin/edit',array('id'=>$Request.session.id))}">
11                                             修改密码
12                                         </a>
13                                 </li>
14                             </ul>
15                             <!--/Login Area Dropdown-->

 

 

四、验证码

 截图

 

 

thinkphp手册参考 

1 验证码显示
2 <div>{:captcha_img()}</div>
3 或者
4 <div><img src="{:captcha_src()}" alt="captcha" /></div>

 

 1 验证码配置
 2 然后在应用配置文件中添加验证码的配置参数
 3 'captcha' => [
 4 // 验证码字符集合
 5 'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',
 6 // 验证码字体大小(px)
 7 'fontSize' => 25,
 8 // 是否画混淆曲线
 9 'useCurve' => true,
10 // 验证码图片高度
11 'imageH' => 30,
12 // 验证码图片宽度
13 'imageW' => 100,
14 // 验证码位数
15 'length' => 5,
16 // 验证成功后是否重置
17 'reset' => true
18 ],
19 并且确保开启了URL路由。

 

配置文件

 1     //验证码配置
 2     'captcha' => [
 3         // 验证码字符集合
 4         'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',
 5         // 验证码字体大小(px)
 6         'fontSize' => 20,
 7         // 是否画混淆曲线
 8         'useCurve' => true,
 9         // 验证码图片高度
10         'imageH' => 40,
11         // 验证码图片宽度
12         'imageW' => 130,
13         // 验证码位数
14         'length' => 3,
15         // 验证成功后是否重置
16         'reset' => true
17     ],

 

视图

1                 <div class="loginbox-textbox">
2                     <input class="form-control" placeholder="CAPTCHA" name="code" style="width:90px; float:left; cursor:pointer;" type="text">
3                     <img style="float:left;" src="{:captcha_src()}" alt="captcha" onclick="this.src='{:captcha_src()}?'+Math.random(); " /> 
4                 </div>

 

模型

模型中不能写页面跳转,比如$this->error('验证码错误');

1         //验证验证码
2         $captcha = new \think\captcha\Captcha();
3         if (!$captcha->check($data['code'])) {
4             return 4; 
5         }

 

控制器

1             $admin=new LoginModel();
2             $data=input('post.');
3             $num=$admin->login($data);
4             if($num==4){
5                 $this->error('验证码错误');
6             }

 

 

五、权限验证

 

没有登录的用户必须登录了才能在网站上面进行操作

1 <?php
 2 namespace app\admin\controller;
 3 
 4 use think\Controller;
 5 class Base extends Controller
 6 { 7 //这个类里面的其它方法在执行之前必须先执行这个方法 8 public function _initialize(){ 9 if(!session('username')){ 10 return $this->error('请先登录系统!!','login/index'); 11  } 12  } 13 }
这个类里面的其它方法在执行之前必须先执行这个方法:function _initialize()

 

让其他的所有控制器都继承这个类就可以实现需要的功能了

1 use app\admin\controller\Base;
2 
3 class Article extends Base

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!