6.10 创建数据
匿名 · 更新于 2013/12/25
在进行数据操作之前,我们往往需要手动创建需要的数据,例如对于提交的表单数据:
很简单的例子:
// 获取表单的POST数据$data['name'] = $_POST['name'];$data['email'] = $_POST['email'];// 更多的表单数据值获取//……
很简单的例子:
// 实例化User模型$User = M('User');// 根据表单提交的POST数据创建数据对象$User->create();// 把创建的数据对象写入数据库$User->add();
$data['name'] = 'ThinkPHP';$data['email'] = 'ThinkPHP@gmail.com';$User->create($data);
// 从User数据对象创建新的Member数据对象$User = M("User");$User->find(1);$Member = M("Member");$Member->create($User);
2
而事实上,create方法所做的工作远非这么简单,在创建数据对象的同时,完成了一系列的工作,我们来看下create方法的工作流程就能明白:
因此,我们熟悉的令牌验证、自动验证和自动完成(我们会在后面看到相关的用法)功能,其实都必须通过create方法才能生效。Create方法创建的数据对象是保存在内存中,并没有实际写入到数据库中,直到使用add或者save方法才会真正写入数据库。
因此在没有调用add或者save方法之前,我们都可以改变create方法创建的数据对象,例如:
使用如下:
| 步骤 | 说明 | 返回 |
|---|---|---|
| 1 | 获取数据源(默认是POST数组) | |
| 2 | 验证数据源合法性(非数组或者对象会过滤) | 失败则返回false |
| 3 | 检查字段映射 | |
| 4 | 判断提交状态(新增或者编辑 根据主键自动判断) | |
| 5 | 数据自动验证 | 失败则返回false |
| 6 | 表单令牌验证 | 失败则返回false |
| 7 | 表单数据赋值(过滤非法字段和字符串处理) | |
| 8 | 数据自动完成 | |
| 9 | 生成数据对象(保存在内存) |
因此在没有调用add或者save方法之前,我们都可以改变create方法创建的数据对象,例如:
$User = M('User');$User->create(); //创建User数据对象$User->status = 1; // 设置默认的用户状态$User->create_time = time(); // 设置用户的创建时间$User->add(); // 把用户对象写入数据库
使用如下:
// 实例化User模型$User = M('User');// 创建数据后写入到数据库$data['name'] = 'ThinkPHP';$data['email'] = 'ThinkPHP@gmail.com';$User->data($data)->add();
2
安全提示:
create方法如果没有传值,默认取$_POST数据,如果用户提交的变量内容,含有可执行的html代码,请进行手工过滤。
create方法如果没有传值,默认取$_POST数据,如果用户提交的变量内容,含有可执行的html代码,请进行手工过滤。
$_POST['title'] = "<script>alert(1);</script>";
$_POST['title'] = htmlspecialchars($_POST['title']);M('User')->create();
$data['title'] = $this->_post('title', 'htmlspecialchars');M('User')->create($data);
