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 相关文章推荐
php中文件上传的安全问题
Oct 09 PHP
php与php MySQL 之间的关系
Jul 17 PHP
PHP 日期加减的类,很不错
Oct 10 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
Jul 05 PHP
浅析php中三个等号(===)和两个等号(==)的区别
Aug 06 PHP
php文件上传的简单实例
Oct 19 PHP
使用PHP备份MYSQL数据的多种方法
Jan 15 PHP
php操作xml入门之xml标签的属性分析
Jan 23 PHP
php单例模式示例分享
Feb 12 PHP
PHP获取当前文件的父目录方法汇总
Jul 21 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 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
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
JQuery datepicker 使用方法
2011/05/20 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
详解网站中图片日常使用以及优化手法
2017/01/09 Javascript
完美的js图片轮换效果
2017/02/05 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
简洁的十分钟Python入门教程
2015/04/03 Python
python递归查询菜单并转换成json实例
2017/03/27 Python
Python模拟登陆实现代码
2017/06/14 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
利用python修改json文件的value方法
2018/12/31 Python
Python中if有多个条件处理方法
2020/02/26 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
Python读写操作csv和excle文件代码实例
2020/03/16 Python
python db类用法说明
2020/07/07 Python
Pycharm github配置实现过程图解
2020/10/13 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
UNIX文件名称有什么规定
2013/03/25 面试题
Unix里面如何在后台运行程序
2016/10/14 面试题
《要下雨了》教学反思
2014/02/17 职场文书
机关出纳岗位职责
2014/04/03 职场文书
幼儿园评语大全
2014/04/17 职场文书
庆七一宣传标语
2014/10/08 职场文书
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL
Python标准库pathlib操作目录和文件
2021/11/20 Python