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

最新文章

  1. linux 做gw(nat)详细配置
  2. 【C语言入门教程】5.1 函数说明 与 返回值
  3. PHP单引号和双引号的区别
  4. POJ 3254 压缩状态DP
  5. JavaScript之面向对象学九(原型式继承和寄生式继承)
  6. SecureCRT文件传输模式
  7. spring-线程池(2)
  8. Spring+SpringMVC+MyBatis深入学习及搭建(八)——MyBatis查询缓存
  9. API Gateway性能比较:NGINX vs. ZUUL vs.Cloud Gateway vs. Linkerd[译]
  10. CentOS下配置SFTP操作日志
  11. 004.MySQL双主+Keepalived高可用
  12. ES6语法的数组查询
  13. 洛谷 P4427 求和
  14. vuex、redux、mobx 对比
  15. 在EBS里新建一个OU的步骤
  16. [作业] Python入门基础--三级菜单
  17. 006-ant design -结合echart-地址map市
  18. paxos协议(1)-朴素paxos
  19. vue2.0中子组件通过v-modal改变父组件中的值
  20. 使用vmware虚拟机安装linux

热门文章

  1. ASP.NET-AJAX.FORM提交附件失败
  2. Linux下基于多线程的echo
  3. 排序(3)---------冒泡排序(C语言实现)
  4. MongoDB数据模型和索引学习总结
  5. Android解决ScrollView视图导致其底部的布局栏被推到上边的问题
  6. 一些.NET 项目中经常使用的类库
  7. xBIM 基础03 基本模型操作
  8. 深入C#类的方法
  9. Codeforces 982 B. Bus of Characters(模拟一个栈)
  10. 3dsMax插件开发环境配置