zoukankan      html  css  js  c++  java
  • thinkphp5项目--个人博客(四)

    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 appadminmodel;
     3 
     4 use thinkModel;
     5 use thinkDb;
     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 appadmincontroller;
     3 
     4 use thinkController;
     5 use appadminmodelLogin 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 appadminmodel;
     3 
     4 use thinkModel;
     5 use thinkDb;
     6 use thinkSession;
     7 use thinkRequest;
     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="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 	hinkcaptchaCaptcha();
    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 appadmincontroller;
     3 
     4 use thinkController;
     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 appadmincontrollerBase;
    2 
    3 class Article extends Base
  • 相关阅读:
    JZ初中OJ 2266. 古代人的难题
    JZ初中OJ 1341. [南海2009初中] water
    JZ初中OJ 1340. [南海2009初中] jumpcow
    JZ初中OJ 2000. [2015.8.6普及组模拟赛] Leo搭积木
    JZ初中OJ 1999.[2015.8.6普及组模拟赛] Wexley接苹果
    Unity Android平台下插件/SDK开发通用流程
    UNITY接入支付宝(未测试可行)
    Unity接入支付宝(免写安卓代码,使用JAR方式)
    Unity之多态
    unity与android交互(1)与(2)网友的整理
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/8794338.html
Copyright © 2011-2022 走看看