php軽量フレームワークcodeigniter入門~ブログ作成編2~

codeigniter入門:ブログ作成編1に続いて、CRUDの残りのupdateとdeleteである、編集と削除ができるようにしていきます。

前回の続きからということで…

編集できるようにする

まずはコントローラーを作成します。
前回のformと大枠は同じです。
・applicaiton/controllers/blog.php

…省略…
function update(){
 $this->form_validation->set_rules('title', 'タイトル', 'required');
 if($this->form_validation->run() == FALSE){
  $this->load->view('blog_update');
 }else{ 
  $this->load->view('success');
 }
}
…省略…

・applicaiton/views/blog_update.php
前回のblog_form.phpを名前を変えてアップロードします。

記事のデータをフォームに表示

一つ一つの記事のデータをデータベースから取り出せるようにmodelに追加します。
・application/models/blog_model.php

…省略…
function get_blog($id){
 $this->db->where('id', $id);
 $query = $this->db->get('blog_data');
 return $query->row_array();
}
…省略…

上記のActiveRecordで書いたプログラムをsql文でいうと

"SELECT * FROM blog_data where id = $id"

こんな感じで、記事の番号(id)を渡すことでidが等しい記事を取り出せるようになります。

コントローラー部分で個別記事のデータを取り出して、ビューに渡すようにします。
・applicaiton/controllers/blog.php

…省略…
function update($id){
 $this->form_validation->set_rules('title', 'タイトル', 'required');
 if($this->form_validation->run() == FALSE){
  $data['blog'] = $this->Blog_model->get_blog($id);
  $this->load->view('blog_update' ,$data);
 }else{ 
  $this->load->view('success');
 }
}
…省略…

URLにidを埋め込むことでblog記事のidをcontrollerで受け取ってます。

www.wwwwww.com/コントローラー名/メソッド名/引数
例:www.wwwwww.com/blog/update/1

そのidを使って個別記事を取り出し、viewに渡します。
・applicaiton/views/blog_update.php
のinputのvalueとtextareaの部分にデータを表示させます。

…省略…
<h5>タイトル</h5><input type="text" name="title"
 value="<?php echo $blog['title'];?>" size="30" />
<h5>文章</h5>
<textarea cols="30" name="description" rows="7">
<?php echo $blog['description']; ?></textarea>
…省略…

データをupdateする

まだ、前回のデータが表示されるだけで、まだ編集されていません。
・application/models/blog_model.php
に編集させるメソッドを作ります。
insert_entryの部分と重複する部分があるので一つにまとめます。

…省略…
function insert_entry(){
 $this->data_post();
 $this->db->insert('blog_data', $this);
}
function update_entry($id){
 $this->data_post();
 $this->db->where('id',$id);
 $this->db->update('blog_data',$this);
}
function data_post(){
 $this->title = $_POST['title'];
 $this->description = $_POST['description'];
}
…省略…

一つにまとめるためにメソッドでdata_post部分を作って$this->data_post();を実行させます。
あとはActiveRecordのupdate(‘テーブル名’,$this)でデータを書き換えます。

・applicaiton/controllers/blog.php

…省略…
function update($id){
 $this->form_validation->set_rules('title', 'タイトル', 'required');
 if($this->form_validation->run() == FALSE){
  $data['blog'] = $this->Blog_model->get_blog($id);
  $this->load->view('blog_update' ,$data);
 }else{ 
  $this->Blog_model->update_entry($id);
  $this->load->view('success');
 }
}
…省略…

これでコントローラーのデータを書きかえれるようになりました。
最後にformからのデータのとび先を書き換えて完了です。
・applicaiton/views/blog_update.php

…省略…
<?php echo form_open('blog/update/'.$blog['id'].''); ?>
…省略…

※編集するリンクをblogのトップページに表示させます。
・application/views/blog.php

…省略…
<td><a href="blog/update/<?php echo $blog['id']; ?>">編集</a></td>
…省略…

これで編集できるようになりました。

データを削除する

データを削除する方法を解説していきます。
まずは、modelで削除するメソッドを作ります。
・application/models/blog_model.php

…省略…
function delete_entry($id){
 $this->db->where('id', $id);
 $this->db->delete('blog_data');
}
…省略…

ここでもブログ記事番号を渡して、その記事のみを削除します。

あとは、これをcontrollerで実行できるようにします。
・applicaiton/controllers/blog.php

…省略…
function delete($id){
 $this->Blog_model->delete_entry($id);
 $this->load->view('success');
}
…省略…

最後に削除のリンクをトップページに載せれば完了です。
・application/views/blog.php

…省略…
<td><a href="blog/delete/<?php echo $blog['id']; ?>">削除</a></td>
…省略…

コメントする