这一节的主要内容是 在之前内容的基础上向数据库中写入数据。
创建一个表单
为了向数据库中写入数据,你需要先创建一个表单用来填写要存储的信息,这意味着 你的表单里需要包含两项:一项代表标题,另一项代表内容。你可以在模型中通过代码 从标题中提取出 内容。在文件 application/views/news/create.php 中创建一个新视图。
<h2><?php echo $title; ?></h2>
<?php echo validation_errors(); ?>
<?php echo form_open('news/create'); ?>
<label for="title">Title</label>
<input type="input" name="title" /><br />
<label for="text">Text</label>
<textarea name="text"></textarea><br />
<input type="submit" name="submit" value="Create news item" />
</form>
form_open() 函数是由表单辅助函数提供的,用于生成 form 元素,并添加一些额外的功能,如添加一个隐藏的
CSRF保护字段,validation_errors() 函数用于显示表单验证的错误信息。
剩下的代码是标标准准的表单,<input>标签中的name属性代表传输内容的标题。
回到News 控制器,将要在这里做两件事:检查表单是否被提交,以及提交的数据是否能通过验证规则。ci框架有表单验证类来帮助你实现这些功能。
public function create()
{
$this->load->helper('form');
$this->load->library('form_validation');
$data['title'] = 'Create a news item';
$this->form_validation->set_rules('title', 'Title', 'required');
$this->form_validation->set_rules('text', 'Text', 'required');
if ($this->form_validation->run() === FALSE)
{
$this->load->view('templates/header', $data);
$this->load->view('news/create');
$this->load->view('templates/footer');
}
else
{
$this->news_model->set_news();
$this->load->view('news/success');
}
}
前几行代码加载了 表单辅助函数 和 表单验证类。然后,设置了表单验证规则,set_rules() 方法有三个参数:表单中字段的名称,错误信息中使用的名称,以及验证规则。在这个例子中, 规则为 title 和 text 字段是必填的。
在这里,表单验证类不多说,大家只需要记住在这里,这样用即可,完全掌握表单验证类以后再详谈。
下面的几行,是一个if语句检查表单验证是否成功通过,如果没有通过,将显示出表单, 如果通过了验证,则会调用模型。然后,加载视图显示出成功信息。新建一个视图文件 application/views/news/success.php 并写上成功的信息。
模型
写一个函数将数据保存到数据库中。打开之前创建的模型文件,添加以下代码:
public function set_news()
{
$this->load->helper('url');
$slug = url_title($this->input->post('title'), 'dash', TRUE);
$data = array(
'title' => $this->input->post('title'),
'slug' => $slug,
'text' => $this->input->post('text')
);
return $this->db->insert('news', $data);
}
上面的代码中,有一个新方法 url_title() ,这个方法由URL辅助函数 提供,用于将字符串中的所有空格替换成连接符(-),并将所有字符转换为小写。 这样其实就生成了一个 slug ,可以很好的用于创建 URI 。换句话讲,就是给数据库一个唯一的主键,方便查找。
然后我们继续准备将要被插入到数据库中的记录,我们将其赋值给 $data 数组, 数组中的每一项都对应之前创建的数据库表中的一列,这里你应该看到又出现了一个新方法, 来自输入类的 post() 方法,这个方法可以对数据进行过滤, 防止其他人的恶意攻击。输入类默认已经加载了。最后,将 $data 数组插入到我们的数据库中。
经过了三篇博客的讲解,ci框架自带的教程终于更完了。最后一篇,时间仓促,有多地方更新不够详细,有以后有时间会做详细更改的。