本文实例形式展示了ThinkPHP中的create方法与自动令牌验证的实现方法,具体步骤如下:
一、数据表结构
user表结构如下:
id username password
二、view模板部分
\aoli\Home\Tpl\default\User\create.html页面如下:
<form action="__URL__/addit" method="post"> <input type="text" name="id" /> <input type="text" name="username" /> <input type="password" name="password" /> <input type="submit" name="sub" value="提交" /> </form>
三、action部分:
\aoli\Home\Lib\Action.php页面如下:
<?php class UserAction extends Action { function create(){ $this->display(); } function addit(){ //向表user中添加表单内容 $user=M('user'); $user->create(); $user->add(); //判断是否存在令牌验证 if(!$user->autoCheckToken($_POST)){ dump('no'); }else{ dump('yes'); } } ?>
1、在对表单提交过来的数据进行操作之前,我们往往需要手动创建需要的数据,例如上面提交的表单数据:
//实例化User模型 $user=M('user'); //获取表单的POST数据 $data['username']=$_POST['username'] $data['password']=$_POST['password'] //写入到数据库 $user->data($data)->add();
附:使用data方法创建的数据对象不会进行自动验证和过滤操作,需要自行处理,如果只是想简单创建一个数据对象,并且不需要完成一些额外的功能的话,可以使用data方法简单的创建数据对象。
2、ThinkPHP可以帮助我们快速地创建数据对象,最典型的应用就是自动根据表单数据创建数据对象。create方法创建的数据对象是保存在内存中的,并没有实际的写入到数据库中。
//实例化user模型 $user=M('user'); //根据表单提交的POST数据创建数据对象,并保存在内存中,可以通过dump($user)查看 $user=create(); //把创建的数据对象写入数据库中 $user->add();
3、create方法支持从其它方式创建数据对象,如,从其它的数据对象或者数组等。
$data['name']='ThinkPHP'; $data['eamil']='ThinkPHP@gmail.com'; $user->create($data); 甚至还可以支持从对象创建新的数据对象,如从user数据对象创建新的member数据对象 $user=M('user'); $user->find(1); $member=M('member'); $member->create($user);
4、create方法在创建数据对象的同时,还完成了一些很有意义的工作,包括令牌验证、数据自动验证、字段类型查找,数据自动完成等。
因些,我们熟悉的令牌验证、自动验证和自动完成功能,其实都必须通过create方法才能生效。
5、令牌验证:
功能:可以有效防止表单的远程提交等安全防护。
config.php中添加如下配置:
'TOKEN_ON' => true, //是否开启令牌验证 'TOKEN_NAME' => 'token',// 令牌验证的表单隐藏字段名称 'TOKEN_TYPE' => 'md5',//令牌验证哈希规则
自动令牌会向当前SESSION会话当中放上一个md5加密的字符串。并将这个字符串以隐藏域的形式插入到表单的form之前。这个字符串出现在两个地方,一个是在SESSION当中,另一个就是在表单当中。当你提交表单后,服务器第一件事就是对比这个SESSION信息,如果正确的话,准许表单提交,否则不允许提交。
查看create.html的的源代码会看到在表单form的结束标志之前会多了一个自动生成的隐藏域
<input type="hidden" name="token" value="eef419c3d14c9c93caa7627eedaba4a5" />
(1)、如果希望自己控制隐藏域的位置,可以手动在表单页面添加 {__TOKEN__} 标识,系统会在输出模板的时候自动替换。
(2)、如果在开启表单令牌验证的情况下,个别表单不需要使用令牌验证
功能,可以在表单页面添加 {__NOTOKEN__} ,则系统会忽略当前表单的令牌验证。
(3)、如果页面中存在多个表单,建议添加 {__TOKEN__} 标识,并确保只有一个表单需要令牌验证。
(4)、如果使用create方法创建数据对象的话,会同时自动进行表单验证,如果没有使用该方法的话,则需要手动调用模型的autoCheckToken方法进行表单验证。
if (!$User->autoCheckToken($_POST)){ // 令牌验证错误 }
希望本文所示实例对大家的ThinkPHP程序设计有所帮助。

thinkphp是国产框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了关于使用think-queue来实现普通队列和延迟队列的相关内容,think-queue是thinkphp官方提供的一个消息队列服务,下面一起来看一下,希望对大家有帮助。

thinkphp基于的mvc分别是指:1、m是model的缩写,表示模型,用于数据处理;2、v是view的缩写,表示视图,由View类和模板文件组成;3、c是controller的缩写,表示控制器,用于逻辑处理。mvc设计模式是一种编程思想,是一种将应用程序的逻辑层和表现层进行分离的方法。

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了使用jwt认证的问题,下面一起来看一下,希望对大家有帮助。

thinkphp扩展有:1、think-migration,是一种数据库迁移工具;2、think-orm,是一种ORM类库扩展;3、think-oracle,是一种Oracle驱动扩展;4、think-mongo,一种MongoDb扩展;5、think-soar,一种SQL语句优化扩展;6、porter,一种数据库管理工具;7、tp-jwt-auth,一个jwt身份验证扩展包。

本篇文章给大家带来了关于ThinkPHP的相关知识,其中主要整理了使用think-queue实现redis消息队列的相关问题,下面一起来看一下,希望对大家有帮助。

thinkphp查询库是否存在的方法:1、打开相应的tp文件;2、通过“ $isTable=db()->query('SHOW TABLES LIKE '."'".$data['table_name']."'");if($isTable){...}else{...}”方式验证表是否存在即可。

在thinkphp3.2中,可以利用define关闭调试模式,该标签用于变量和常量的定义,将入口文件中定义调试模式设为FALSE即可,语法为“define('APP_DEBUG', false);”;开启调试模式将参数值设置为true即可。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器