thinkphp5第35课:表单令牌

表单令牌的作用:避免表单的重复提交。当然还有另外一个原因,使用表单令牌可以防止黑客绕过表单,伪造数据进行提交。

首先,在前端页面的表单中,添加:<input type="hidden" name="__token__" value="{$Request.token}" />

比如下面的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="__PUBLIC__/static/bootstrap-4.3.1-dist/css/bootstrap.css">
    <script src="__PUBLIC__/static/jquery-1.11.3.min.js"></script>
    <script src="__PUBLIC__/static/bootstrap-4.3.1-dist/js/bootstrap.js"></script>
</head>
<body>
<div class="container">
    <h2>添加学生</h2>
    <form id="form1" action="{:url('do_add')}" method="post">
        <input type="hidden"  name="__token__" value="{$Request.token}" >
        <div class="form-group">
            <label for="no">学号:</label>
            <input type="text" class="form-control" id="no" name="no" placeholder="输入学号">
        </div>
        <div class="form-group">
            <label for="name">姓名:</label>
            <input type="text" class="form-control" id="name" name="name" placeholder="输入姓名">
        </div>
        <div class="form-group">
            <label>性别:</label>
            <input type="radio" name="sex" value="男" checked>男
            <input type="radio" name="sex" value="女">女
        </div>
        <div class="form-group">
            <label for="age">年龄:</label>
            <input type="text" class="form-control" id="age" name="age" placeholder="输入年龄">
        </div>
        <button type="submit" class="btn btn-primary btn-block">提交</button>
    </form>
</div>

</body>
</html>

在上面的代码中,有一行代码就是:

<input type="hidden"  name="__token__" value="{$Request.token}" >

在验证器中,必须添加这样的验证规则:

protected $rule = [
    '__token__'  =>  'require|token',
];
protected $message = [
    '__token__.require' => '非法提交',
    '__token__.token'   => '请不要重复提交表单'
];

比如下面的验证器

<?php
namespace app\index\validate;
use think\Validate;

//学生验证器
class Student extends Validate
{
    //验证规则
    protected $rule = [
        'no' => 'require|integer',
        'name' => 'require',
        'sex' => 'require',
        'age' => 'integer',
        '__token__' => 'require|token',
    ];

    //错误信息
    protected $message = [
        'no.require' => '学号必须',
        'no.integer' => '学号必须是数字',
        'name' => '姓名必须',
        'sex' => '性别必须',
        'age' => '年龄必须是数字',
        '__token__.require' => '非法提交',
        '__token__.token'   => '请不要重复提交表单'
        
    ];

}

最后在保存数据时,记得使用验证器

 public function do_add()
    {
        $data = input('post.');
        //实例化模型对象
        $stu = new Student();
        try{
            $ret = $stu->allowField(true)->validate(true)->save($data); //保存数据,返回影响的行数
            if(false === $ret){
                $this->error($stu->getError());
            }else{
                $this->success('添加成功',url('index'),'',1);
            }

        }catch (Exception $ex){
            $this->error('保存失败,' . $ex->getMessage());
        }
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李 书 明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值