ThinkPHP框架-3

十九、修改操作

(手册–模型–更新)(CURD create update read delete)

1、更新一条数据

在这里插入图片描述
在这里插入图片描述
使用示例
先查询再更新和直接更新 (save)方法

$goods=\app\admin\model\Goods::find(146);
        $goods->goods_price='123.00';
        $goods->goods_number=131;
        $res=$goods->allowField(true)->save();
        dump($res);die;

2、批量更新数据

在这里插入图片描述
以上用法通常比较少用,更多的批量更新,是使用where条件,一次更新多条数据的指定字段值。(多条数据的同一个字段,改成同一个值)

\app\admin\model\Goods::where('id','>',141)->update(['goods_price'=>'10','goods_number'=>100]);

3、静态方法更新(推荐)

在这里插入图片描述
示例:直接调用update方法,第三个参数true表示过滤非数据表字段

\app\admin\model\Goods::update(['goods_price'=>'123.00','goods_number'=>321,'id'=>33],[],true);

4、自动识别

在这里插入图片描述

5、示例

在这里插入图片描述

二十、案例:后台商品修改功能

表单展示Goods控制器edit方法(整合模板)
表单提交Goods控制器update方法
思路:
1、在表单展示控制器方法中,查询原始的数据
2、在表单页面,展示原始数据
3、确认表单完整性,完善name属性和提交地址等信息,主键id隐藏域
4、在表单提交的控制器方法中,接收数据
5、参数检测(表单验证)
6、将数据修改到数据表
7、页面跳转

1、页面展示

1、修改Goods控制器edit方法,查询原始商品数据
在这里插入图片描述
2、表单提交
在这里插入图片描述

在这里插入图片描述
3、ueditor富文本编辑器整合
同create页面

二十一、删除操作

(手册–模型–删除、手册–模型–软删除)

1、删除操作

1、先查询,再调用模型的delete方法删除

$user=User::get(1);
$user->delete();

2、先调用where方法,再调用Query类的delete方法删除

User::where('id',1)->delete();

3、静态调用destroy方法删除(推荐)

User::destroy(1);
User::destroy('1,2,3');
User::destroy([1,2,3]);
User::destroy(['status'=>1]);

delete方法使用示例

a、先查询再删除
b、使用where条件,调用Query类的delete方法删除
c、静态调用destroy方法进行删除
删除效果:将指定数据从数据表直接删除,返回值都是受影响的记录数
在这里插入图片描述

2、trait

(手册–架构—Traits引入)
在这里插入图片描述
1、初识trait

trait A{
	public function getName(){
		return 'This is trait';
	}
}

trait的定义,和类非常相似,只需要将关键字class换成trait即可。
2、trait的使用
定义trait之后,在一个类中进行使用

class B{
	use A;
}
$b=new B();
echo $b->getName();//This is trait
<?php

trait A
{
    public function getName()
    {
        return 'A-getName';
    }

    public function getAge()
    {
        return 'A-getAge';
    }
}

class C
{
    public function getName()
    {
        return 'C-getName';
    }

    public function getAge()
    {
        return 'C-getAge';
    }

    public function getSex()
    {
        return 'C-getSex';
    }
}

class B extends C
{
    //使用trait
    use A;

    public function getAge()
    {
        return 'B-getAge';
    }

    public function getSex()
    {
        return 'B-getSex';
    }
}

$b = new B();
echo $b->getSex();//B-getSex
echo $b->getName();//A-getName
echo $b->getAge();//B-getAge

注:有同名方法,当前类方法会覆盖trait的方法,trait的方法会覆盖继承类的方法。
TP中的trait:
父类控制器Controller中使用了jump这个trait,提供了页面跳转相关方法。
模型的SoftDelete这个trait,需要在自定义模型中,手动使用,提供的是软删除相关功能。

3、软删除

物理(硬)删除:真删除,从数据表直接删除记录。
逻辑(软)删除:假删除(本质是修改操作),只是让数据在页面不显示,数据表中仍然保留。
原理:在数据表添加一个字段控制数据在页面的展示。点击删除操作时,修改对应字段的值。
软删除:(手册–模型–软删除)
在这里插入图片描述

二十二、案例完成后台删除操作

1、设置模型的软删除

在这里插入图片描述

2、软删除功能实现

在这里插入图片描述

3、增删改查操作总结

<?php

namespace app\admin\controller;

use think\Controller;
use think\Request;

class curd extends Controller
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        $list=\app\admin\model\Goods::order('id desc')->select();
        return view('index',['list'=>$list]);
    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        return view();
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        //接收数据
        $params=input();
        //参数检测
        $rule=[
            ['goods_name|商品名称'=>'require'],
            ['goods_price|商品价格'=>'require|float|gt:0']
        ];
        $msg=[
            'goods_name.require'=>'商品名称不能为空',
            'goods_price.float'=>'商品价格格式不正确'
        ];
        //调用控制器的validate方法
        $validate=$this->validate($rule,$msg,$params);
        if($validate!==true){
            $this->error($validate);//验证失败,$validate 就是一个字符串错误信息
        }
        //添加数据到数据表 第二个参数true表示过滤非数据表字段
        \app\admin\model\Goods::create($params,true);
        $this->success('添加成功','admin/goods/index');

    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        //查询数据
        $goods=\app\admin\model\Goods::find($id);
        return view('read',['goods'=>$goods]);
    }

    /**
     * 显示编辑资源表单页.
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function edit($id)
    {
        //查询数据
        $goods=\app\admin\model\Goods::find($id);
        return view('edit',['goods'=>$goods]);
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        //接收数据
        $params=input();
        //参数检测
        $rule=[
            ['goods_name|商品名称'=>'require'],
            ['goods_price|商品价格'=>'require|float|gt:0']
        ];
        $msg=[
            'goods_name.require'=>'商品名称不能为空',
            'goods_price.float'=>'商品价格格式错误'
        ];
        $validate=$this->validate($rule,$msg,$params);
        if($validate!==true){
            $this->error($validate);
        }
        //修改数据
        \app\admin\model\Goods::update($params,['id'=>$id],true);
        //页面跳转
        $this->success('修改成功','index');
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        //删除数据
        \app\admin\model\Goods::destroy($id);
        //页面跳转
        $this->success('删除成功','index');
    }
}

4、id参数检测

在这里插入图片描述

二十三、登录登出权限控制

1、封装密码加密函数

注意:后台管理员表tpshop_manager中初始的管理员密码
密码要自己加密一个初始密码,更新到数据表
使用自定义的密码加密函数:
在这里插入图片描述

2、模板中使用请求参数

(手册–模板–请求参数)在这里插入图片描述
示例:{$Request.url}获取当前页面的url地址
在这里插入图片描述
在这里插入图片描述

3、TP中的cookie和session

(手册–杂项–cookie,手册–杂项–session)
TP框架提供了think\Cookie类和think\Session类分别操作cookie和session
也可以使用是助手函数cookie()和session();

session函数使用语法:

//赋值(当前作用域)
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函数基本操作

session('name','thinkphp');//设置
session('name');//读取
session('name',null);//删除单个session
session(null);//删除所有session

session函数点 语法

//数组用法 点语法
session('user',['username'=>'hua','age'=>30]);
//使用点语法 直接操作数组中的一个键值对
session('user.email','hua@qq.com');
dump(session('user'));
//直接取数组中的一个键值对
dump(session('user.email'));
//删除数组中的一个值
session('user.email',null);
dump(session('user.email'));

cookie函数使用语法:

//初始化
cookie(['prefix'=>'think_','expire'=>3600]);

4、完成后台的登录功能

需要创建Manager模型:
命令行方式:php think make:model admin/Manager
思路:
1、表单展示
2、表单中name属性值、提交地址
3、提交的控制器方法中,接收数据
4、查询用户表 验证用户名和密码
5、用户名和密码正确,设置登录标识到session跳转到后台首页
6、用户名或密码错误,报错,返回登录页

路径:Login控制器login方法
1、确认form表单完整性,完善name和提交地址
在这里插入图片描述
2、登录控制器

在这里插入图片描述
在这里插入图片描述
3、登出方法
在这里插入图片描述

3、登录检测
在这里插入图片描述
在这里插入图片描述
注:相同命名空间下的类,相互访问 时,可以不用携带命名空间。

二十四、验证码技术

1、使用验证码的步骤

1、生成验证码图片,展示在页面上
2、点击图片刷新验证码功能
3、提交表单后验证码的校验

2、TP中的验证码显示

(手册–杂项–验证码)
在这里插入图片描述

3、验证码的校验

修改Login控制器方法login:表单提交后先进行验证码校验,再查询数据表
在这里插入图片描述

4、验证码标识

当项目中有多个功能都需要使用验证码(比如登录页、找回密码页等)
以登录页为例:可修改代码如下:
验证码标识:字符串’login’
1、验证码显示
修改view/login/login.html验证码图片标签src属性给catpcha_src函数传参数’login’
在这里插入图片描述
2、控制器校验
在这里插入图片描述
总结:
1、修改操作以及后台商品修改功能(save方法、savaAll方法、静态update方法)
2、删除操作(delete方法、destroy方法)与软删除功能、trait
3、cookie和session操作(助手函数)
4、登录模块功能(登录、退出、登录检测)
5、验证码(captcha_src() captcha_img() captcha_check())

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP 2.x版本中存在远程代码执行(RCE)漏洞。该漏洞可以通过构造恶意的请求来执行任意的PHP代码。具体来说,漏洞出现在ThinkPHP框架中的路由处理函数中,使用了不安全的preg_replace函数,并且使用了/e模式进行正则表达式匹配。攻击者可以通过在请求中注入恶意的代码来执行任意的PHP代码。这个漏洞在ThinkPHP框架的Dispatcher类中的102行被触发。\[2\]\[3\] 为了修复这个漏洞,建议升级到最新版本的ThinkPHP框架,或者手动修复代码中的漏洞。具体修复方法包括使用更安全的正则表达式替代preg_replace函数,并且避免使用/e模式进行正则表达式匹配。此外,还应该对用户输入进行严格的过滤和验证,以防止恶意代码的注入。 #### 引用[.reference_title] - *1* [【漏洞复现】[ThinkPHP]2-Rce](https://blog.csdn.net/Mr_atopos/article/details/124907676)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [ThinkPHP2-RCE漏洞复现](https://blog.csdn.net/qq_51459600/article/details/125179451)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值