thinkphp5项目--个人博客(四)
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项目--个人博客(四)的更多相关文章
- thinkphp5项目--个人博客(七)
thinkphp5项目--个人博客(七) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...
- thinkphp5项目--个人博客(五)
thinkphp5项目--个人博客(五) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...
- thinkphp5项目--个人博客(三)
thinkphp5项目--个人博客(三) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...
- thinkphp5项目--个人博客(一)
thinkphp5项目--个人博客(一) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...
- thinkphp5项目--个人博客(二)
thinkphp5项目--个人博客(二) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...
- thinkphp5项目--个人博客(八)
thinkphp5项目--个人博客(八) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...
- thinkphp5项目--个人博客(六)
thinkphp5项目--个人博客(六) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...
- 学习SpringBoot,整合全网各种优秀资源,SpringBoot基础,中间件,优质项目,博客资源等,仅供个人学习SpringBoot使用
学习SpringBoot,整合全网各种优秀资源,SpringBoot基础,中间件,优质项目,博客资源等,仅供个人学习SpringBoot使用 一.SpringBoot系列教程 二.SpringBoot ...
- 2015-2016-2 《Java程序设计》项目小组博客
2015-2016-2 <Java程序设计>项目小组博客 1451 完+美 java项目 守望先疯 JavaGroup 07_10_20_22 FromBottomToTop L.G.Su ...
随机推荐
- Nutch命令大全
Nutch采用了一种命令的方式进行工作,其命令可以是对局域网方式的单一命令也可以是对整个Web进行爬取的分步命令.主要的命令如下: 1. Crawl Crawl是"org.apache.nu ...
- Javascript 实现锚点(Anchor)间平滑跳转
(function($){ $.fn.scroller = function(options){ var defaultVal = { duration: }; var obj = $.extend( ...
- angular-HTTP
AngularJS $http 是一个用于读取web服务器上数据的服务. $http.get(url) 是用于读取服务器数据的函数. <div ng-app="myApp" ...
- SQL SERVER-in,between,like
and 1 LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式 ( 可以使用正则表达式) select * from [User] where UserName like '%r' -- 以 ...
- 更换oracle 集群网卡(Changing a Network Interface)
更换oracle 集群网卡(Changing a Network Interface) 假设换网卡前后 网卡名.ip,网关,子网掩码都不变的话,集群层面不许要做额外的操作. 一下操作为更换网卡后 ...
- php扩展之 pdo_mysql.so
总结:新搭编译安装的 nginx+php+mysql环境,执行之前开发的项目遇到了没有安装pdo的问题 1.进入到php5的源代码包里面,ext以下.找到pdo_mysql目录 首先运行:/usr/l ...
- NOIP2017提高组模拟赛 8(总结)
NOIP2017提高组模拟赛 8(总结) 第一题 路径 在二维坐标平面里有N个整数点,Bessie要访问这N个点.刚开始Bessie在点(0,0)处. 每一步,Bessie可以走到上.下.左.右四个点 ...
- linux怎么开启telnet服务
1>编辑telent的配置文件/etc/xinetd.d/telnet 如下: (设置disable = no,也就是开启telnet服务) service telnet { disable = ...
- [Swift]数组(Array)最强解析
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- C# 实现ADSL自动断网和拨号(适用于拨号用户)
using System;using System.Runtime.InteropServices; public struct RASCONN{ public int dwSize; p ...