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

项目地址

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

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

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

代码

                         <div class="form-group">
<label for="group_id" class="col-sm-2 control-label no-padding-right">缩略图</label>
<div class="col-sm-6">
<input id="pic" placeholder="" name="pic" style="display:inline;" type="file">
{if condition="$data['pic'] neq '' "}
<img src="__IMG__{$data.pic}" height="50px" alt="">
{else /}
<span>暂无缩略图</span>
{/if}
</div>
</div> <div class="form-group">
<label for="group_id" class="col-sm-2 control-label no-padding-right">所属栏目</label>
<div class="col-sm-6">
<select class="form-control" name="cateid" required="" id="cateid">
<option value="">请选择栏目</option>
{volist name="cateres" id="value"}
<option {if condition="$value['id'] eq $data['cateid']"} selected="selected" {/if} value="{$value.id}">{$value.catename}</option>
{/volist}
</select>
</div>
<p class="help-block col-sm-4 red">* 必填</p>
</div> <div class="form-group">
<label for="group_id" class="col-sm-2 control-label no-padding-right">是否推荐</label>
<div class="col-sm-6">
<label>
<input {if condition="$data['state'] eq 1"} checked="checked" {/if} class="checkbox-slider colored-darkorange" name="state" id="state" value="{$data.state}" type="checkbox">
<!-- checked="checked" -->
<span class="text"></span>
</label>
</div>
</div>

二、用户登录

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

模型

 <?php
namespace app\admin\model; use think\Model;
use think\Db;
class Login extends Model
{
//模型是处理数据的
public function login($data){
$user=DB::name('admin')->where('username','=',$data['username'])->find();
//如果用户存在我们就进行处理,否则不进行处理
if($user){
//密码正确和密码错误两种情况
if($user['password']==md5($data['password'])){
return 1;//信息正确
}else{
return 0;//密码错误
} }else{
return -1;//用户不存在
} }
}

控制器

 <?php
namespace app\admin\controller; use think\Controller;
use app\admin\model\Login as LoginModel; class Login extends controller
{
public function index()
{
if(request()->isPost()){
$admin=new LoginModel();
$data=input('post.');
if($admin->login($data)==-1){
$this->error('用户不存在');
}elseif($admin->login($data)==0){
$this->error('用户密码错误');
}elseif($admin->login($data)==1){
$this->success('成功登陆','index/index');
}
}
return view('login');
} }

三、session操作

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

 <?php
namespace app\admin\model; use think\Model;
use think\Db;
use think\Session;
use think\Request;
class Login extends Model
{
//模型是处理数据的
public function login($data){
$user=DB::name('admin')->where('username','=',$data['username'])->find();
//如果用户存在我们就进行处理,否则不进行处理
if($user){
//密码正确和密码错误两种情况
if($user['password']==md5($data['password'])){
//写入session
18 Session::set('username',$user['username']);
19 Session::set('id',$user['id']);
return 1;//信息正确
}else{
return 0;//密码错误
} }else{
return -1;//用户不存在
} }
}

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

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

照着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没有关系

                             <!--Login Area Dropdown-->
<ul class="pull-right dropdown-menu dropdown-arrow dropdown-login-area">
<li class="username"><a>David Stevenson</a></li>
<li class="dropdown-footer">
<a href="{:url('admin/logout')}">
退出登录
</a>
</li>
<li class="dropdown-footer">
<a href="{:url('admin/edit',array('id'=>$Request.session.id))}">
修改密码
</a>
</li>
</ul>
<!--/Login Area Dropdown-->

四、验证码

截图

thinkphp手册参考

 验证码显示
<div>{:captcha_img()}</div>
或者
<div><img src="{:captcha_src()}" alt="captcha" /></div>
 验证码配置
然后在应用配置文件中添加验证码的配置参数
'captcha' => [
// 验证码字符集合
'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',
// 验证码字体大小(px)
'fontSize' => 25,
// 是否画混淆曲线
'useCurve' => true,
// 验证码图片高度
'imageH' => 30,
// 验证码图片宽度
'imageW' => 100,
// 验证码位数
'length' => 5,
// 验证成功后是否重置
'reset' => true
],
并且确保开启了URL路由。

配置文件

     //验证码配置
'captcha' => [
// 验证码字符集合
'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',
// 验证码字体大小(px)
'fontSize' => 20,
// 是否画混淆曲线
'useCurve' => true,
// 验证码图片高度
'imageH' => 40,
// 验证码图片宽度
'imageW' => 130,
// 验证码位数
'length' => 3,
// 验证成功后是否重置
'reset' => true
],

视图

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

模型

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

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

控制器

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

五、权限验证

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

 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

thinkphp5项目--个人博客(四)的更多相关文章

  1. thinkphp5项目--个人博客(七)

    thinkphp5项目--个人博客(七) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...

  2. thinkphp5项目--个人博客(五)

    thinkphp5项目--个人博客(五) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...

  3. thinkphp5项目--个人博客(三)

    thinkphp5项目--个人博客(三) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...

  4. thinkphp5项目--个人博客(一)

    thinkphp5项目--个人博客(一) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...

  5. thinkphp5项目--个人博客(二)

    thinkphp5项目--个人博客(二) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...

  6. thinkphp5项目--个人博客(八)

    thinkphp5项目--个人博客(八) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...

  7. thinkphp5项目--个人博客(六)

    thinkphp5项目--个人博客(六) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...

  8. 学习SpringBoot,整合全网各种优秀资源,SpringBoot基础,中间件,优质项目,博客资源等,仅供个人学习SpringBoot使用

    学习SpringBoot,整合全网各种优秀资源,SpringBoot基础,中间件,优质项目,博客资源等,仅供个人学习SpringBoot使用 一.SpringBoot系列教程 二.SpringBoot ...

  9. 2015-2016-2 《Java程序设计》项目小组博客

    2015-2016-2 <Java程序设计>项目小组博客 1451 完+美 java项目 守望先疯 JavaGroup 07_10_20_22 FromBottomToTop L.G.Su ...

随机推荐

  1. C++异常注意事项

    C++里面catch对于类型转换,限制比参数传递时候要多: 不可以进行标准算术转换和类的自定义转换:在函数参数匹配的过程中,可以进行很多的类型转换.但是在异常匹配的过程中,转换的规则要严厉. 标准算术 ...

  2. QMutex“A mutex must be unlocked in the same thread that locked it”解决(在run里创建对象是不二法宝)

    多线程时出现如下警告信息: A mutex must be unlocked in the same thread that locked it: 原因可能有二: 1.创建QMutex不在当前线程: ...

  3. hiho 1564 - 简单dfs + 宏的危害!!!

    题目链接 H公司有 N 台服务器,编号1~N,组成了一个树形结构.其中中央服务器处于根节点,终端服务器处于叶子节点. 中央服务器会向终端服务器发送消息.一条消息会通过中间节点,到达所有的终端服务器.消 ...

  4. angular踩坑记录

    ng-repeat和ng-click同时使用的时候,注意不能直接在ng-click当中写代码,必须在当前$scope中绑定一个事件,转为调用该事件.否则会出现意想不到的情况.具体原因点击这里. 使用自 ...

  5. Java使用HttpURLConnection上传文件(转)

    从普通Web页面上传文件很简单,只需要在form标签叫上enctype="multipart/form-data"即可,剩余工作便都交给浏览器去完成数据收集并发送Http请求.但是 ...

  6. 当relative遇上z-index,阻断事件捕获

    今天在调试前端页面的时候,发现addflowrank这个元素的click事件不能触发了.下图是它的元素结构. 用开发者工具试图定位这个元素,看看它到底怎么了.发现:无论我怎么用光标定位这个元素都定位不 ...

  7. NOIp2018模拟赛三十二

    继续挂成傻逼 成绩:100+0+10(90)=110 A全场一眼题,C没取模挂八十分,然后没特判特殊情况又挂十分 A:[agc009b]tournament(太简单,咕了) B:[ATC2142]Bu ...

  8. HDU Integer's Power(容斥原理)

    题意 求[l,r]的最大指数和(1<=l,r<=10^18) 最大指数和(如64=8^2=4^3=2^6,所以64的最大指数和是6) 题解 很明显我们可以先求出[1,n]的最大指数和,然后 ...

  9. [CTSC2016]单调上升路径

    题目:UOJ#201. 题目大意:给定n个点(n是偶数)的完全图,现在要你给每条边确定一个权值(互不相等),使得最长的单调上升路径最短.现在要你输出边的权值. 一条路径被称为单调上升的,如果沿着它走时 ...

  10. 入门python:《Python编程快速上手让繁琐工作自动化》中英文PDF+代码

    入门推荐学习<python编程快速上手>前6章是python的基础知识,通俗易懂地讲解基础,初学者容易犯错的地方,都会指出来.从第三章开始,每章都有一个实践项目,用来巩固前面所学的知识. ...