CodeIgniterでレコードの更新

今日は、CodeIgniterでレコードの更新をしてみたいと思います。まず、ビューファイルを作成します。『application/views』フォルダに『dvd_update_view.php』の名前でファイルを作成します。今回もDreamweaverで作成します。

フォームタブをクリックして、フォームをクリックすると、赤いフォームの枠が作成されます。

フォームの赤い枠の中をクリックし、一般タブのテーブルアイコンをクリックします。テーブルダイアログで3行2列のテーブルを指定して、『OK』ボタンをクリックします。

フォームタブのテキストフィールドとテキストエリアをそれぞれクリックして、指定の箇所に挿入します。

編集用メソッドの作成

それでは、いったん保存して、今度はコントローラを作成します。『aplication/controllers』フォルダに『dvd_update.php』ファイルを作成します。まず編集用のメソッドを作成します。アクセスした際に編集するレコードのIDを受け取り、それを元にレコードをデータベースから取り出してビューに渡すための処理をします。

function edit($id=null)
{
$query=$this->db->get_where('dvd',array('id'=>$id));
$data['row']=$query->row();
$this->load->view(dvd_update_view,$data);
}

CodeIgniterでは、$GETのパラメータは$_GETなどでは取り出すことができません。そのため、このようにコントローラの引数にパラメータを渡すことで、URLに付加されたパラメータを受け取ることができるようになります。

kenji様のご指摘がありましたので、修正させていただきます。2.0以降では、$this->input->get()で取り出すことができるみたいです。

ビューファイルの修正

それでは、先程のビューファイルを少し修正します。日付のテキストフィールドをクリックし、プロパティの初期値を『<?=$row->date?>』と入力します。同じように、タイトルの初期値を『<?=$row->Title?>』、内容を『<?=$row->Content?>』と入力します。

ついでに、もう1行増やして、送信ボタンも作成します。

次に、非表示フィールドを追加し、プロパティの名前を『id』に変更し、値に『<?=$row->ID?>』と入力します。

コード画面で『form』の中の『action=””』の箇所を『action=”../update”』に変更します。

ブラウザで確認してみましょう。『http://localhost/dvd_update/edit/1』と入力してみます。

更新用メソッドの作成

次に、送信されたフォームを元に、指定のIDのレコードを更新します。POSTアクセスされているかどうかをチェックし、処理を行います。

function update()
{
if($this->input->post('title')!=null){
$data=array(
'date'=>$this->input->post('date',true),
'Title'=>$this->input->post('title',true),
'Content'=>$this->input->post('content',true));
$this->db->where('ID',$this->input->post('id',true));
$this->db->update('dvd',$data);
}
}

さらにコンストラクタに次の1行も追加してください。これは、データ更新後に表示するページへ移動するためのURLヘルパーを利用するのに必要です。

$this->load->helper(‘url’);

そして、アップデート後に移動先を指定するための、『redirect』のURLヘルパーの1行を追加します。

redirect(base_url().’dvd_list’);

それでは実際にデータが更新されるかどうか確認してみましょう。内容に『ジャン・レノ』の文字を追加します。

データが更新されています。

本日はここまでにします。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

トラックバック

コメント

  1. Kenji より:

    > CodeIgniterでは、$GETのパラメータは$_GETなどでは取り出すことができません

    2.0 以降は、そんなことはありませんよ。
    デフォルトで $this->input->get() が使えます。

    • nakada より:

      kenji様へ
      ご指摘ありがとうございます。CodeIgniterは、自分自身も勉強中ですので、間違いを指摘いただくと助かります。
      今後ともご指摘、ご指導お願いします。

  2. Kenji より:

    CodeIgniter 2.0のチュートリアルがあまりないので、このブログの記事には注目しています。

    なお、XSSフィルタリングについては
    http://d.hatena.ne.jp/Kenji_s/20110709/1310163972
    に解説を書きました。ご参考まで。


コメントをどうぞ

このページの先頭へ