本篇有部分內容承接上篇[ Day 6 ] CodeIgniter第二個手作:新聞列表 (2):從資料庫取出資料。,有疑問可以回頭看一下唷!
先來回想一下當時建立資料的欄位有哪些?id、title、slug、text
因為id是自動長出來的,所以id不需要填。slug在user guide的做法是以標題自動產生,且中間用"dash"串起來,所以~基於想像力的呈現,畫面上會有兩個欄位——「標題」及「內文」。
(正常來說,網站的規劃不應該是這樣的唷!這是照著user guide走的,求功能學會,不求網站規劃學習唷!)
把畫面想像出來後,在view底下的news中建立create.php,把預想的畫面以代碼呈現:
<h2>建立新聞項目</h2>
<?php echo validation_errors(); ?>
<?php echo form_open('news/create') ?>
<label for="title">標題</label>
<input type="input" name="title" /><br />
<label for="text">內文</label>
<textarea name="text"></textarea><br />
<input type="submit" name="submit" value="建立新聞項目" />
</form>
有了建立表單後,還需要建立一個顯示輸入完成的頁面success.php,想要多花俏就多花俏,文章考量視覺因素,從簡處理:
OK!
打開名為news控制器(衍用上篇),加上create()建立新聞的部分,代碼如下:
public function create()
{
$this->load->helper('form');
$this->load->library('form_validation');
$data['title'] = 'Create a news item';
$this->form_validation->set_rules('title', '標題', 'required');
$this->form_validation->set_rules('text', '內文', 'required');
if ($this->form_validation->run() === FALSE)
{
$this->load->view('temp/header', $data);
$this->load->view('news/create');
$this->load->view('temp/footer');
}
else
{
$this->news_model->set_news();
$this->load->view('news/success');
}
}
有沒有看到很眼熟的東西?沒錯是helper輔助函數!
名為form的輔助函數,可以幫你產生表單元素,表單的元素有很多種(input、textarea⋯⋯等等等),基本都不難,此處也不超出html的理解範圍,所以這部分就不深入再說明了,詳細請看傳送門Form 輔助函數
表單驗證的部分容我在這裡簡述一下,陣列的三個欄位分別是field、label、rules並不難理解,因為講起來內容龐大,後續有機會研究後再出一篇筆記給大家!
再來~判斷很簡單,當表單驗證失敗時,維持原本畫面,成功時,跳到剛才突然想要花俏的成功頁。
這樣子我們就做完了嗎?沒有感覺哪裡怪怪的嗎!?萬事俱備只欠東風,少了建立檔案的「動作」,承上篇的model檔案,把代碼加入:
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);
}
簡單介紹一下,$slug的部分是將標題以"-"串起來,再把全部資料放入陣列後~丟進資料庫新增。
官方提供的這個範例,因為資料庫編碼的關係,並沒有辦法輸入中文~有這方面困擾的同學,在建立資料庫時,略微修改一下就可以了!
先自我感動鐵人滿週(拍手),來推薦和本篇完全毫無相關的系列資安文給大家,這算工商時間嗎?拍謝,我沒收費唷!因為最近參加資安的Conf,深刻體會:資安的教育不、能、等!
所以請容我私心推薦我愛的這系列:資安x系統x絕對領域!
若能成功的撐完第二週,會再推薦好東西給大家der <3 互惠學習!
大大您好,想請教說~
我目前的程式碼都正常,也可以load出資料庫的內容,
但是卻無法insert create裡的表單資料到資料庫裡面,
請問是什麼原因呢>_<?
我的ci檔案在這裏
https://mega.nz/#!VlkEmACS!Gi9Nn588Vfp2sojYmeiB33xGKBcr27LOY278JpuOjMQ
好了好了,是我的設定有問題,感恩。