# 創建新聞條目
現在你已經知道如何通過 CodeIgniter 從數據庫中讀取數據了,但是你還沒有 向數據庫中寫入數據。在這一節,你將繼續完善前文中創建的 News 控制器和模型, 添加上這一功能。
## 創建一個表單
為了向數據庫中寫入數據,你需要先創建一個表單用來填寫要存儲的信息,這意味著 你的表單里需要包含兩項:一項代表標題,另一項代表內容。你可以在模型中通過代碼 從標題中提取出 slug 。在文件 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() 函數 以及 validation_errors() 函數。
第一個函數是由?[表單輔助函數](http://codeigniter.org.cn/user_guide/helpers/form_helper.html)?提供的,用于生成 form 元素,并添加一些額外的功能,如添加一個隱藏的?[CSRF 保護字段](http://codeigniter.org.cn/user_guide/libraries/security.html)?, 第二個函數用于顯示表單驗證的錯誤信息。
回到你的 News 控制器,你將要在這里做兩件事:檢查表單是否被提交,以及提交的數據是否能通過驗證規則。 你可以使用?[表單驗證類](http://codeigniter.org.cn/user_guide/libraries/form_validation.html)?來做到這一點。
~~~
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 字段是必填的。
CodeIgniter 有一個強大的表單驗證類,像上面示例中那樣。你可以在?[這里](http://codeigniter.org.cn/user_guide/libraries/form_validation.html)?閱讀更多。
接下來,你可以看到一個判斷條件檢查表單驗證是否成功通過,如果沒有通過,將顯示出表單, 如果通過了驗證,則會調用模型。然后,加載視圖顯示出成功信息。新建一個視圖文件 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 輔助函數](http://codeigniter.org.cn/user_guide/helpers/url_helper.html)?提供,用于將字符串 中的所有空格替換成連接符(-),并將所有字符轉換為小寫。 這樣其實就生成了一個 slug ,可以很好的用于創建 URI 。
然后我們繼續準備將要被插入到數據庫中的記錄,我們將其賦值給 $data 數組, 數組中的每一項都對應之前創建的數據庫表中的一列,這里你應該看到又出現了一個新方法, 來自?[輸入類](http://codeigniter.org.cn/user_guide/libraries/input.html)?的 post() 方法,這個方法可以對數據進行過濾, 防止其他人的惡意攻擊。輸入類默認已經加載了。最后,將 $data 數組插入到我們的數據庫中。
## 路由
在你開始向 CodeIgniter 程序中添加新聞條目之前,你需要到 config/routes.php 文件中去添加一條新的路由規則,確保你的文件中包含了下面的代碼。這樣可以讓 CodeIgniter 知道 'create' 將作為一個方法被調用,而不是一個新聞條目的 slug 。
~~~
$route['news/create'] = 'news/create';
$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';
~~~
現在在你的瀏覽器中輸入你安裝好的 CodeIgniter 的本地開發地址,然后在 URL 后面添加上 index.php/news/create 。恭喜你,你剛剛完成了你的第一個 CodeIgniter 程序!添加些新聞來看看這些你創造的頁面吧!
- 歡迎使用 CodeIgniter
- 安裝說明
- 下載 CodeIgniter
- 安裝說明
- 從老版本升級
- 疑難解答
- CodeIgniter 概覽
- CodeIgniter 將從這里開始
- CodeIgniter 是什么?
- 支持特性
- 應用程序流程圖
- 模型-視圖-控制器
- 設計與架構目標
- 教程 - 內容提要
- 加載靜態內容
- 讀取新聞條目
- 創建新聞條目
- 結束語
- 常規主題
- CodeIgniter URL
- 控制器
- 保留名稱
- 視圖
- 模型
- 輔助函數
- 使用 CodeIgniter 類庫
- 創建類庫
- 使用 CodeIgniter 驅動器
- 創建驅動器
- 創建核心系統類
- 創建附屬類
- 鉤子 - 擴展框架核心
- 自動加載資源
- 公共函數
- 兼容性函數
- URI 路由
- 錯誤處理
- 網頁緩存
- 程序分析
- 以 CLI 方式運行
- 管理你的應用程序
- 處理多環境
- 在視圖文件中使用 PHP 替代語法
- 安全
- PHP 開發規范
- 類庫參考
- 基準測試類
- 緩存驅動器
- 日歷類
- 購物車類
- 配置類
- Email 類
- 加密類
- 加密類(新版)
- 文件上傳類
- 表單驗證類
- FTP 類
- 圖像處理類
- 輸入類
- Javascript 類
- 語言類
- 加載器類
- 遷移類
- 輸出類
- 分頁類
- 模板解析類
- 安全類
- Session 類
- HTML 表格類
- 引用通告類
- 排版類
- 單元測試類
- URI 類
- 用戶代理類
- XML-RPC 與 XML-RPC 服務器類
- Zip 編碼類
- 數據庫參考
- 數據庫快速入門: 示例代碼
- 數據庫配置
- 連接你的數據庫
- 查詢
- 生成查詢結果
- 查詢輔助函數
- 查詢構造器類
- 事務
- 數據庫元數據
- 自定義函數調用
- 數據庫緩存類
- 數據庫工廠類
- 數據庫工具類
- 數據庫驅動器參考
- 輔助函數參考
- 數組輔助函數
- 驗證碼輔助函數
- Cookie 輔助函數
- 日期輔助函數
- 目錄輔助函數
- 下載輔助函數
- 郵件輔助函數
- 文件輔助函數
- 表單輔助函數
- HTML 輔助函數
- 語言輔助函數
- Inflector 輔助函數
- 數字輔助函數
- 路徑輔助函數
- 安全輔助函數
- 表情輔助函數
- 字符串輔助函數
- 文本輔助函數
- 排版輔助函數
- URL 輔助函數
- XML 輔助函數
- 向 CodeIgniter 貢獻你的力量