thinkPHP5实现数据库添加内容的方法


Posted in PHP onOctober 25, 2017

本文实例讲述了thinkPHP5实现数据库添加内容的方法。分享给大家供大家参考,具体如下:

面对一个新框架安装好了一般不知道要干啥。那就先做一个写入功能先。

先做好准备工作先,首先要连接上数据库。

配置文件在application下的database.php里

return [
  // 数据库类型
  'type'      => 'mysql',
  // 服务器地址
  'hostname'    => '127.0.0.1',
  // 数据库名
  'database'    => 'shoptest',
  // 用户名
  'username'    => 'root',
  // 密码
  'password'    => '',
  // 端口
  'hostport'    => '3306',
  // 连接dsn
  'dsn'       => '',
  // 数据库连接参数
  'params'     => [],
  // 数据库编码默认采用utf8
  'charset'     => 'utf8',
  // 数据库表前缀
  'prefix'     => '',
  // 数据库调试模式
  'debug'      => true,
  // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
  'deploy'     => 0,
  // 数据库读写是否分离 主从式有效
  'rw_separate'   => false,
  // 读写分离后 主服务器数量
  'master_num'   => 1,
  // 指定从服务器序号
  'slave_no'    => '',
  // 是否严格检查字段是否存在
  'fields_strict'  => true,
  // 数据集返回类型
  'resultset_type' => 'array',
  // 自动写入时间戳字段
  'auto_timestamp' => false,
  // 时间字段取出后的默认时间格式
  'datetime_format' => 'Y-m-d H:i:s',
  // 是否需要进行SQL性能分析
  'sql_explain'   => false,
];

设置好之后先放着,先建立一个控制器

默认下载的集合中,application文件夹里有一个index的文件夹。

里面是用来存放控制器,类和模板的文件夹,名字可以修改。

如果用过3.2的就很好理解了,就是相当于原来的home文件。

在这个文件夹里先创建三个文件夹

thinkPHP5实现数据库添加内容的方法

然后再controller文件夹里新建一个index.php的文件(其实默认就有一个)。

在class类里写入这样的代码

public function indexs()
{
    return '我打开控制器了';
}

在网址栏输入 服务器名/index/index/indexs

可以看见一行文字。

加下来先引入模板。

先添加use think\View;引入模板库。

$view = new View;
return $view->fetch('模板名');

那么模板放在哪里。controller文件夹有一个view文件夹

如果你直接把模板文件拖进去的话会报错。

thinkPHP5实现数据库添加内容的方法

看报错路径的后半部分。/application/index\view\index\adda.html

application/index/view这个都能找到

接下来又是一个文件夹的名字和文件名字。

这个文件夹对应着的是控制器的名字,也就是说要建立一个对应的文件夹。再把模板拖进去即可调用。当然,一个完整的框架不会只有这一个方法。其他的细节以后在研究。

表单提交的常用的两个写法,input('post.xxx')指的是获取post值。

//调用Db类
use think\Db;
$data = ['title' => input('post.title'), 'content' => input('post.title')];
Db::table('blogmsg')->insert($data);
//建立model的写法
$mod = new \app\index\model\Blogmsg;
$mod->title = input('post.title');
$mod->content = input('post.content');
$mod->save();
echo $mod->id;

相对而言,个人比较喜欢这样的写法。使用Request来完成添加。(对以后使用laravel有好处)

//引入Request。
use think\Request;
public function add(Request $req){
  //如果添加的内容需要处理,先单独取出然后赋值进去($req->post('title')可以获取其中的值)
  $a = rtrim($req->post('title'),' ');
  $req->post(['title'=>$a]);
  //准备添加
  $mod = new \app\index\model\Blogmsg;
  //allowField可以选择只添加哪些字段。
  $mod->allowField(['title','content'])->save($req->post());
  //获取返回的主键
  echo $mod->id;
}

说道添加数据,那么肯定需要自动验证了。

这次的自动验证可以单独的写一个文件。在index文件夹内创建一个Validate文件夹,内部创建一个和Model文件夹内相同名字的php文件。方便使用。

样本

namespace app\index\validate;
use think\Validate;
class Blogmsg extends Validate
{
  //写规则
  protected $rule = [
    'title' => 'require|max:25',
    'content' => 'require|max:255',
  ];
  //写报错返回信息
  protected $message = [
    'title.require' => '必须填写',
    'title.max' => '不能超过25个字符',
    'content.require' => '必须填写',
    'content.max' => '不能超过255个字符',
  ];
  protected $scene = [
    'add' => ['title','content'],
    'edit' => ['title','content'],
  ];
}

然后控制器部分的改动

$a = $mod->validate(true)->allowField(['title','content'])->save($req->post());
if(false === $a){
  // 验证失败 输出错误信息
  dump($mod->getError());
  die;
}

最后做一个防止重复提交以及远程提交的表单令牌功能:在模板中的form表单里加入{:token()},然后再验证的规则里做一下修改,验证规则加一个token。如下:

'title' => 'require|max:25|token',

至此,文章添加部分告一段落。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
动易数据转成dedecms的php程序
Apr 07 PHP
jQuery EasyUI API 中文文档 - DateBox日期框
Oct 15 PHP
PHP rawurlencode与urlencode函数的深入分析
Jun 08 PHP
php防注入及开发安全详细解析
Aug 09 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
php数字每三位加逗号的功能函数
Oct 22 PHP
php文档工具PHP Documentor安装与使用方法
Jan 25 PHP
PHP中STDCLASS用法实例分析
Nov 11 PHP
php获取excel文件数据
Apr 21 PHP
laravel 获取当前url的别名方法
Oct 11 PHP
laravel 多图上传及图片的存储例子
Oct 14 PHP
thinkPHP5分页功能实现方法分析
Oct 25 #PHP
thinkPHP框架中执行原生SQL语句的方法
Oct 25 #PHP
php调用云片网接口发送短信的实现方法
Oct 25 #PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
Oct 25 #PHP
Laravel学习教程之request validation的编写
Oct 25 #PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
Oct 24 #PHP
Yii2.0实现生成二维码功能实例
Oct 24 #PHP
You might like
为PHP初学者的8点有效建议
2010/11/20 PHP
php下使用iconv需要注意的问题
2010/11/20 PHP
判断PHP数组是否为空的代码
2011/09/08 PHP
PHP生成树的方法
2015/07/28 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
js控制table合并具体实现
2014/02/20 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
2016/06/16 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
2019/06/19 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
介绍Python中几个常用的类方法
2015/04/08 Python
python队列queue模块详解
2018/04/27 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
python使用tomorrow实现多线程的例子
2019/07/20 Python
使用coverage统计python web项目代码覆盖率的方法详解
2019/08/05 Python
python中return的返回和执行实例
2019/12/24 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
python 偷懒技巧——使用 keyboard 录制键盘事件
2020/09/21 Python
python3爬虫GIL修改多线程实例讲解
2020/11/24 Python
CSS3与动画有关的属性transition、animation、transform对比(史上最全版)
2017/08/18 HTML / CSS
周仰杰(JIMMY CHOO)法国官方网站:闻名世界的鞋子品牌
2019/09/27 全球购物
创业计划书——互联网商机
2014/01/12 职场文书
班组长岗位职责
2014/03/03 职场文书
寒假家长评语大全
2014/04/16 职场文书
护士实习自荐信
2015/03/06 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书
java中如何截取字符串最后一位
2022/07/07 Java/Android