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静态类
Nov 25 PHP
PHP 年龄计算函数(精确到天)
Jun 07 PHP
PHP实现的MongoDB数据库操作类分享
May 12 PHP
对PHP语言认识上需要避免的10大误区
Jun 12 PHP
php计算两个日期时间差(返回年、月、日)
Jun 19 PHP
php简单获取复选框值的方法
May 11 PHP
php入门教程之Zend Studio设置与开发实例
Sep 09 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 PHP
php实现微信公众号企业转账功能
Oct 01 PHP
Laravel框架路由管理简单示例
May 07 PHP
解决php扩展安装不生效问题
Oct 25 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
Apr 13 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
基于mysql的bbs设计(一)
2006/10/09 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
2014/06/30 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
javascript中字体浮动效果的简单实例演示
2015/11/18 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
jquery判断iPhone、Android设备类型
2016/09/14 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
2020/08/12 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
[57:36]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第三场 2月1日
2021/03/11 DOTA
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
PyQt5实现拖放功能
2018/04/25 Python
python随机数分布random测试
2018/08/27 Python
pyqt5 实现在别的窗口弹出进度条
2019/06/18 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
凯撒娱乐:Caesars Entertainment
2018/02/23 全球购物
办公室文秘自我评价
2013/09/21 职场文书
关爱女孩行动实施方案
2014/03/13 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript