验证器类:$validate=new \think\Validate($rule,$message,$field);  注意:开启表单令牌后需要验证它哦

独立验证:

//独立验证
$rule=[
'name' => 'require|max:25',
'email' => 'email'
]
$msg=[
'name.require' => '名称必须',
'name.max' => '名称最多不能超过25个字符',
'email' => '邮箱格式错误',
];
$field = [
'name' => '名称',
'email' => '邮箱',
];
$validate = new Validate($rule,$msg,$field);
$data = [
'name' => 'thinkphp',
'email' => 'thinkphp@qq.com'
];
if (!$validate->check($data)) {
dump($validate->getError());
}

make、rule、extend、setTypeMsg、message、scene、hasscene、batcch、check、getError

验证器:定义在模块下的validate文件夹内;

注意:Call to undefined function mb_strlen() :开启:extension=php_mbstring.dll; 还不行就就看看这extension_dir = "ext";还不行就绝对路径

前台页面

<form action="{:url('addFormData')}" method="post">
<input type="text" name="name" value="thinkphp">
<input type="text" name="email" value="thinkphp@qq.com">
<input type="text" name="zip" value="888888">
<input type="text" name="age" value="20">
<input type="text" name="status" value="2">
{:token('__token__', 'sha1')}
<input type="submit" value="提交">
</form>

控制器:

<?php
namespace app\index\controller;
use think\Controller;
class Test extends Controller{ public function index()
{ return $this->fetch('index@/Test/index');
} public function addFormData(\think\Request $request)
{ $name=$request->post('name');
$email=$request->post('email');
$zip=$request->post('zip');
$age=$request->post('age');
$status=$request->post('status');
$token=$request->post('__token__'); $data = [
'name'=>$name,
'email'=>$email,
'zip'=>$zip,
'age'=>$age,
'status'=>$status,
'__token__'=>$token
]; $validate = \think\Loader::validate('test');//or $validate = validate('test');
//实例化后还可以动态添加规则 他将合并到Test验证rule属性里
$validate->rule([
'zip' => '/^\d{6}$/',
'status'=> 'number|between:0,2'
]);
//实例化后还可以动态添加错误信息 他将合并到Test验证$message属性里
$validate->message([
'zip'=>'邮编格式不正确',
'status.between'=>'状态超出取值范围',
'status.number'=>'状态数据类型错误',
]);
     //实例化后可以动态添加自定义的验证字段描述
$validate->addField([
'zip'=>'邮编',
'status'=>'状态',
]); if(!$validate->check($data)){
dump($validate->getError());
}
}
}

验证器:

<?php
namespace app\index\validate; use think\Validate; class Test extends Validate
{
//定义验证规则 |和数组都可以
protected $rule = [
'name' => 'require|max:25',
'email' => 'email',
'age' => ['number','between'=>'1,120'],
'__token__'=>'token'
]; //定义错误信息
protected $message = [
'name.require' => '名称必须',
'name.max' => '名称最多不能超过25个字符',
'age.number' => '年龄必须是数字',
'age.between' => '年龄只能在1-120之间',
'email' => '邮箱格式错误',
];
//定义验证字段描述
protected $field=[
'name' => '名称',
'age' => '年龄',
'email' => '邮箱',
]; //定义场景(后面根数组是重新定义规则)
protected $scene = [
'edit' => ['name','email','age'=>'require|number|between:1,120'],
]; /**
* 自定义动态添加验证字段描述
*/
public function addField($name,$field='')
{
if (is_array($name)) {
$this->field = array_merge($this->field, $name);
} else {
$this->field[$name] = $field;
}
return $this;
} }

THINKPHP 防止重复提交表单 自己动手制作表单令牌token

function.php

//创建TOKEN
function creatToken() {
$code = chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)) . chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)) . chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE));
session('TOKEN', authcode($code));
} //判断TOKEN
function checkToken($token) {
if ($token == session('TOKEN')) {
session('TOKEN', NULL);
return TRUE;
} else {
return FALSE;
}
} /* 加密TOKEN */
function authcode($str) {
$key = "ANDIAMON";
$str = substr(md5($str), 8, 10);
return md5($key . $str);
}

html form

<form action="{:U()}" method="post"  class="form-horizontal">
<input type="hidden" name="TOKEN" value="{:session('TOKEN')}">
...
</form>

1.在页面展示前调用creatToken()方法生成token。

2.在相应控制器POST请求中 使用 checkToken() 进行判断是否重复提交。

if(IS_POST){

            //防止重复提交 如果重复提交跳转至相关页面
if (!checkToken($_POST['TOKEN'])) {
$this->redirect('index/index');
return;
} //下面相关业务代码
}else{ //创建token
creatToken();
$this->display();
}

thinkphp验证器的更多相关文章

  1. ThinkPHP验证器验证规则编码要点

    首先验证器要继承框架的think\Validate类. 1.验证规则是一个父类的rule属性,是一个数组. 2.数组的键名是验证字段标识,值是验证规则.多个验证规则要用|分隔,不能有空格,否则可能会验 ...

  2. m_Orchestrate learning system---十三、thinkphp的验证器支持多语言么

    m_Orchestrate learning system---十三.thinkphp的验证器支持多语言么 一.总结 一句话总结:支持,不仅验证器支持,其它的插件应该都支持 不仅thinkphp支持多 ...

  3. 9、 Struts2验证(声明式验证、自定义验证器)

    1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...

  4. linux上使用google身份验证器(简版)

    系统:centos6.6 下载google身份验证包google-authenticator-master(其实只是一个.zip文件,在windwos下解压,然后传进linux) #cd /data/ ...

  5. vue-validator(vue验证器)

    官方文档:http://vuejs.github.io/vue-validator/zh-cn/index.html github项目地址:https://github.com/vuejs/vue-v ...

  6. 原生JS 表单提交验证器

    转载:http://www.cnblogs.com/sicd/p/4613628.html 一.前言 最近在开发一个新项目,需要做登陆等一系列的表单提交页面.在经过“缜密”的讨论后,我们决定 不用外部 ...

  7. yii框架中验证器声明一组内置验证器可以使用短名称引用

    1.内置验证器的短名称分别有: boolean: yii\validators\BooleanValidator captcha: yii\captcha\CaptchaValidator compa ...

  8. 通过Google身份验证器加强Linux帐户安全

    下载Google的身份验证模块: # wget https://google-authenticator.googlecode.com/files/libpam-google-authenticato ...

  9. 谷歌身份验证器加强Linux帐户安全

    下载 Google的身份验证模块 # wget https://google-authenticator.googlecode.com/files/libpam-google-authenticato ...

随机推荐

  1. python-元类的几种单例模式

    单例介绍: 单例即单个的实例,指的是同一个类实例化多次的结果都是指向同一个对象,用于节省内存空间 如果我们从配置文件中读取配置信息来进行实例化,在配置相同的情况下,就没必要重复产生对象浪费内存了. # ...

  2. 锤子科技"临死前"被"接盘" ,内部人士爆料已改签今日头条母公司

    就在昨天,据据锤子科技内部人士透露,部分锤子科技员工在昨天已经接到了相关的临时通知,要求改签劳动合同至今日头条的母公司——字节跳动.至于这是锤子科技真正再度复活还是借尸还魂都不重要,重要的是,作为忠实 ...

  3. XmlDocument.Load(url) 本地和http远程

    XmlDocument.Load(url) 的使用 远程: string path = @"http://localhost:8080/Source/XMLConfig.xml"; ...

  4. 三.linux磁盘与文件系统

    第一层 机械硬盘 和 固态硬盘 结构 接口 机械硬盘stat.sas 固态pci-e .nvme也叫m2 硬盘的选择 磁盘内部组成 计算硬盘的大小 命令 fdisk  -l 显示下面信息 大小=扇区大 ...

  5. 【linux】环境变量配置

    假设要添加环境变量 JAVA_HOME 1.先用自己的个人账号 vim /etc/profile 在文件末尾添加 export JAVA_HOME=/usr/java/jdk1..0_144 2. s ...

  6. WinHex数据恢复笔记(一)

    WinHex数据恢复功能强大,可以从硬件簇上扇区进行数据扫描恢复.首先对winhex的各个功能介绍.之后对实例记录一个Word文档删除后进行恢复. 1.WinHex数据恢复软件的编辑区输入与其他普通文 ...

  7. bzoj 3566

    非常好也是比较难的题 首先,不难看出这是一道树形的概率dp 那么我们就要考虑转移 我们发现,一个点能充上电的概率是这个点本身通电的概率+这个点的子节点给他传过来电的概率+这个点的父节点给他传过来电的概 ...

  8. Sequence Number

    1570: Sequence Number 时间限制: 1 Sec  内存限制: 1280 MB 题目描述 In Linear algebra, we have learned the definit ...

  9. 一道面试题 vuex缺点?

    最近去面试的时候,面试官有一道题是让我阐述用vuex的优缺点,优点倒还好说,这个缺点还真没有认识到,有道友可以帮忙解惑嘛? 2 回答 慕标5265247 这种问题一般都有通用回答套路.一件挺好的东西, ...

  10. idea导入java项目

    https://blog.csdn.net/m0_37106742/article/details/70154244 ( 主要 )https://blog.csdn.net/u012099869/ar ...