CodeIgniterでセッション管理

CodeIgniterは独自のセッション機能を持っており、PHPのセッション機能とは実装が異なります。また、PHPのセッションにはない機能も持っています。まず、最大の特徴は、デフォルトではデータをすべてクッキーに保存する点です。PHPのセッションがセッションIDのみをクッキーに保存するのに対し、CodeIgniterのセッションは、すべてのデータをクッキーに保存します。

※セッションとは、アクセス数の単位の一つで、Webサイトを訪れたユーザがサイト内で行う一連の行動をまとめて1セッションといいます。このセッションを、アクセス中のユーザの識別や行動の捕捉をするために固有の識別情報を付与し、ユーザがアクセスしたりログインした際に発行したり、一定時間アクセスが無かったりログアウトすると破棄したりする識別情報のことをセッションIDといい、そのセッション全般を管理することをセッション管理といいます。
※クッキーとは、Webサイトの提供者が、Webブラウザを通じて訪問者のコンピュータに一時的にデータを書き込んで保存させるしくみのことをいいます。考え方によっては、あなたのパソコンに勝手にWeb情報を保存する仕組みともいえます。しかし、Webサイトの提供者は、ユーザに関する情報や最後にサイトを訪れた日時、そのサイトの訪問回数などを記録しておくことで、きめの細かいサービスを提供することができるのです。

CodeIgneiterのセッションクラスは、各ユーザーのセッション情報を『シリアライズ』という方法で、テキストデータに変換し(オプションで暗号化して)、クッキーに保存します。また、セキュリティ強化のため、データベースに保存することも可能です。CodeIgniterのセッションが自動的に保存するデータには以下の4つがあります。

session_id

ユーザーを識別するためのユーザーIDでデフォルトでは、5分ごとに変更されます。

ip_address

ユーザーのIPアドレス

user_agent

ユーザーのWebブラウザ情報の最初の50文字

last_activity

ユーザーが最後にアクセスした日時ですが、この値は負荷軽減のため、5分以上経過した場合にのみ更新されます。

設定ファイルの変更

セッションクラスを使う前に、設定ファイル『config.php』の『$confit[‘encryption_key’]』に値を設定しておきます。この値は、暗号化クラスで使われる暗号化のための鍵ですが、クッキーに保存したセッションデータが改竄されていないかを検証するためにも必要です。半角記号英数字で32文字のランダムな文字列を指定しておきましょう。

『application/config/config.php』ファイルの227行目にランダムな32文字を入力します。

セッションクラスの読み込み

セッションクラスを使うには、まず、セッションクラスを読み込む必要があります。

$this->load->library(‘session’);

セッションを使いたい全てのページでこの処理を行う必要がありますので、ほとんどのページでセッションを使うサイト(会員サイト等)の場合は、自動読み込みにした方がいいでしょう。自動読み込みをセットするには、『application/config』フォルダ内の『config.php』ファイルを開き、55行目のarray()の中に、自動読み込みのライブラリ名を入力します。

$autoload[‘libraries’]=array(‘session’);

セッションデータの保存

セッションデータを保存するには、以下のメソッドを使います。

$this->session->set_userdata(‘項目名’,値);

自動的に保存される『session_id』『ip_address』『user_agent』『last_activity』を、項目名としてユーザーが使うことはできません。また、『flash_』で始まる項目名も予約されているので、使うことはできません。それ以外の項目名は、配列のキーに使える文字列なら自由に指定することができます。
又、連想配列を渡し、一度に複数の項目を保存することもできます。

$session[‘data1’]=$data1;
$session[‘data2’]=$data2;
$this->session->set_userdata($session); 

セッションデータの取得

セッションに保存したデータを取得するには、以下のメソッドを使用します。

$this->session->userdate(‘項目名’);

セッションデータの削除

セッションに保存したデータを削除するには、以下のメソッドを使用します。

$this->session->unset_userdata(‘項目名’);

尚、全てのセッションをクリアする場合は、最後に次のメソッドを呼び出してください。フラッシュデータも破棄されます。

$this->session->sess_destory();

セッションを利用したカウンタプログラム

CodeIgniterのセッションを利用した簡単なカウンターを作成してみます。『application/controllers』フォルダに『counter.php』ファイルを作成し、以下のコードを入力します。カウンタだけでなく、『session_id』『ip_address』『user_agent』『last_activity』が自動的に保存されているかどうかの確認のため、カウンタの下に表示してみました。

class Counter extends CI_Controller{
function index()
{
$this->load->library('session');

if(! $this->session->userdata('count')){
$this->session->set_userdata('count',1);
}else{
$count=$this->session->userdata('count');
$count++;
$this->session->set_userdata('count',$count);
}
echo 'アクセス回数は'.$this->session->userdata('count').'です<br>';
echo 'セッションID:'.$this->session->userdata('session_id').'<br>';
echo 'IPアドレス:'.$this->session->userdata('ip_address').'<br>';
echo 'ユーザーエージェント:'.$this->session->userdata('user_agent').'<br>';
echo '最終アクセス:'.$this->session->userdata('last_activity');
}
}

ブラウザで確認してみます。更新ボタンを押すたびに数字が1ずつ増えていくのがわかります。カウンタの下に、自動的に保存された『session_id』『ip_address』『user_agent』『last_activity』が表示されています。

ブラウザのクッキーを確認してみました。クッキー名に『ci_session』名で保存されています。

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

タグ

2011年7月29日 | コメント/トラックバック(0) |

カテゴリー:CodedIgniter

CodeIgniterでEmail送信

CodeIgniterのEmailクラスを利用すると、とても簡単にメールを送信することができます。CodeIgniterでEmail送信をしてみたいと思います。

ファイルを新規作成して、以下のコードを入力し、『application/controllers』フォルダに『testmail.php』で保存します。

class Testmail extends CI_Controller{
function index()
{
$this->load->library('email');

$this->email->from('nakada@winroad.info','WinRoad徒然草');
$this->email->to('sousinsaki@gmail.com');
$this->email->subject('Emailの送信テスト');
$this->email->message('Emailクラスからの送信テストです');

$this->email->send();

echo $this->email->print_debugger();
}
}

ブラウザから『http://ci.winroad.jp/testmai』と入力してみると、直ちにメールが送信され、メール送信の状況が確認できます。

では、実際に届いたメールを確認してみましょう。私のGmailに送ってみました。docomo携帯にも送ってみましたが、文字化けもしていませんでした。

それでは、簡単なメール送信用のプログラムを作成してみましょう。いつものようにDreamweaverで、フォームを作成し、その中に4行2列のテーブルを作成、テキストフィールドとテキストエリアを作成します。テキストフィールドは宛先に『mailto』、件名に『subject』、テキストエリアの内容に『body』と名称をつけます。一番下にボタンを挿入します。『application/views』フォルダに『testmail_view.php』の名前で保存します。

次に先程のコントローラを若干修正します。

class Testmail extends CI_Controller{
function index()
{
$this->load->view('testmail_view');
}
function send_mail()
{
$this->load->library('email');

if($this->input->post('mailto')!=null){
$mailto=$this->input->post('mailto');
$subject=$this->input->post('subject');
$body=$this->input->post('body');
$this->email->from('nakada@winroad.info','WinRoad徒然草');
$this->email->to($mailto);
$this->email->subject($subject);
$this->email->message($body);

$this->email->send();

echo $this->email->print_debugger();
}else{
$this->load->view('testmail_view');
}
}
}

次に、『testmail_view.php』も修正します。formの『action=””』を『action=”../testmail/send_mail”』と変更します。

コードを直接いじった方が早いので、上記のように書きましたが、DreamWeaverのデザインモードからも変更できます。タグセレクタの『form』をクリックし、プロパティのアクションに、『../testmail/send_mail』と入力しても同じです。

それでは、実際にブラウザで確認してみます。『http://ci.builwing.info/testmail』と入力してみます。メールの送信画面が表示されますので、宛先、件名、内容を入力して『送信』ボタンをクリックすれば、メールが送信されます。

受信したメールを確認してみました。

コードの解説

コントローラ『testmai.php』の解説をします。

$this->load->view(‘testmail_view’);

以前にもやってますので、解説の必要はないと思いますが、『testmail_view.php』のビューファイルを表示するためのコードです。

$this->load->library(‘email’);

これが今回の主役、Emailクラスを呼び出すコードです。

if($this->input->post(‘mailto’)!=null){

これもほとんど説明の必要はないと思いますが、POST送信された『mailto』がnull値でなければ、以下のプログラムを実行します。

$mailto=$this->input->post(‘mailto’);

POST送信された『mailto』の値を変数$mailtoに代入します。以下の2行も同様ですので、説明をカットします。

$this->email->from(‘送信メールアドレス’,’送信者名’);

送信メールアドレスと送信者の名前を設定します。

$this->email->to(‘受取人のメールアドレス’);

受取人のメールアドレスをセットします(複数可)。複数指定するときは、カンマ区切りで指定するか、配列で指定します。

$this->email->cc(‘CCのメールアドレス’);

今回のプログラムでは使用しませんでしたが、CCのメールアドレスを指定することができます。複数指定は『to』と同じです。

$this->email->bcc(’BCCのメールアドレス’);

『cc』と同様、BCCのメールアドレスを指定することができます。

$this->email->subject(‘件名’);

メールの件名をセットします。

$this->email->message(’本文’);

メールの本文をセットします。

$this->email->send();

メール送信のメソッドです。条件判断ができるように送信が成功したか失敗したかの基づいてブール値のTRUEかFALSEが帰ります。

if( ! $this->email->send())
{
//エラー時のプログラム
}

$this->email->print_debugger();

全てのサーバーメッセージ、メールヘッダ、メールメッセージを文字列として返します。デバックに役立ちます。

以上で本日は終了にします。尚、実際問題としてメールソフトとして使用するには、住所録のデータベースを作成し、その住所録からメールアドレスを引っ張ってくるようにするのが普通だと思います。がんばって作成してみてください。

タグ

2011年7月25日 | コメント/トラックバック(0) |

カテゴリー:CodedIgniter

XOOPSの初期画面

前回、『Xoops Cubeをレンタルサーバーにインストールする』で、XOOPSのインストール方法を紹介しましたので、今回はインストールしたXOOPSの初期画面を見てみたいと思います。ブラウザにXOOPSをインストールしたアドレス『http://winroad.xxxx.jp』を入力します。登録したユーザー名とパスワードを入力してログインします。パスワードを忘れた場合は、下のパスワード紛失をクリックすると、登録時に使用したメールアドレス宛にパスワードを記載されたメールが自動配信されるはずです。試しに、パスワード紛失をクリックして、メールアドレスを入力してみます。

以下のようなメールがインストール時に登録したメールアドレスに送信されてきました。指定されたアドレスをクリックすると新しいパスワードが発行されます。

アカウント情報

それでは、元に戻って、ユーザー名とパスワードでログインしてみます。左側にユーザーメニューとメインメニューが表示されています。ユーザーメニューのアカウント情報をクリックしてみます。

登録直後では、ここの内容はほとんど空欄ですので、『アカウントの編集』をクリックします。

プロフィールの編集

アカウントの編集をクリックするか、アカウント情報で右上にあるプロフィールの編集をクリックすると、プロフィールの編集画面になります。ここでは、公開するアカウント情報を入力します。ここに入力した情報は、ニュースモジュールのように不特定多数のゲストに公開される可能性があるので注意してください。また、ここではパスワードの変更やコメント形式やイベント通知など、システムに関する設定も可能です。

とりあえず、『このメールアドレスを公開する』のチェックは外しておいた方がいいでしょう。

イベント通知機能

イベント通知機能をクリックすると、選択可能なイベント一覧が表示されます。XOOPSには、自分が投稿した記事へのコメントなど、システム内に何かユーザーと関係のあるイベントが発生したときに、自動的にパーソナルメッセージや、一般の電子メールで通知する『イベント通知機能』があります。初期状態では何も登録されていません。

受信箱

受信箱をクリックするとプライベートメッセージの一覧が表示されます。もちろんインストールしたばかりの状態では何もありません。

管理者メニュー

管理者メニューをクリックすると、管理者専用のメニュー画面が表示されます。ここでXOOPSの基本的な機能を設定します。管理者以外の人がログインした場合は表示されません。元に戻るには、右上にある『ホームページ』をクリックします。

本日はここまでです。

タグ

2011年7月23日 | コメント/トラックバック(0) |

カテゴリー:Xoops

MyNETSをレンタルサーバーにインストールする

前回Xoops Cubeのインストールを紹介しましたが、今回は、MyNETSのインストール方法を紹介します。Xoopsはインストールしてから実際に運用するまで、細かい設定が必要ですが、このMyNETSはインストールさえすれば、ほぼデフォルトでSNSサイトとして利用することができます。尚、Hiroron LabosでワンステップでMyNETSをインストールできるプログラムを配布していますので、今回は、それを利用してインストールしたいと思います。以下のサイトにアクセスして、中ほどのダウンロードをクリックします。尚、インストールする前にレンタルサーバーのデータベース(MySQL)は、事前に作成しておいてください。文字コードはUTF-8です。

この投稿の続きを読む »

タグ

2011年7月20日 | コメント/トラックバック(0) |

カテゴリー:未分類

Xoops cubeをレンタルサーバーにインストールする

以前、BuddyPressでSNSサイトの構築をしてみましたが、本格的にSNSサイトを構築したいと思ったら、やはり定評のあるXoopsがいいのかなと思いました。なので、今回は、Xoopsのインストール方法を解説してみたいと思います。

尚、最新のXoops  Cube Legacy 2.20をインストールするには、PHPのバージョンが5.0以上、MySQLのバージョンが4.4以上になっていますので、先にご自身のレンタルサーバの状況を確認してください。又、データベースも必要ですので、先に作成しておいてください。文字コードは『UTF-8 』を選択してください。尚、Xoops  Cube Legacy 2.20は、まだ日本語版が出ていないみたいなので、私は今回、一つ前のバージョン2.1.8aをインストールすることにします。

それでは、Xoops Cube日本サイト(http://xoopscube.jp/)へ行き、今すぐダウンロードをクリックします。

バージョン2.1.8aのダウンロードという文字をクリックします。

ダウンロードしたファイルを解凍し、解凍したファイルの中の『http』フォルダの中身をサーバーのルートフォルダにFTPソフトを使ってアップロードします。アップロード方法がわからない人は、『WordPressでマルチサイト機能を利用する』で詳しく書いていますので、参考にしてください。下の図はFFFTPによるアップロードです。ルートフォルダしかインストールできないみたいなので、レンタルサーバで新しく独自ドメイン(winroad.xxxx.jp)を作成して、そこにアップロードします。独自ドメイン作成時に自動生成されている『index.html』ファイルと『default_page.png』ファイルは先に削除しておきます。

アップロードが終わったら、ブラウザでアップロードしたURLにアクセスします。『http://winroad.xxxx.jp』と入力します。インストールウイザードが開いたら、言語が『japanese』になっているのを確認して『次へ』ボタンをクリックします。

『はじめに』以下の説明に目を通して、『次へ』ボタン押してください。

『ファイルのアクセス権のチェック』で、問題がなければ、『次へ』ボタンをクリックします。もし、フォルダかファイルの先頭に赤い信号がついていたら、パーミッションを書き込み可能に変更してください。

先程作成したデータベースの情報を入力して、矢印ボタンをクリックします。

『設定内容の確認』画面で、きちんと確認してください。インストールの失敗の原因はほとんどここにありますので、もし間違っていたら、『戻る』ボタンで設定を変更してください。

その次のページで全ての項目に緑印がついていればOKですので、『次へ』ボタンをクリックします。

『パス・URLのチェック』もOKなら『次へ』をクリックします。

『データベース設定の確認』で間違いなければ、『次へ』をクリックします。

『データベースチェック』がOKならXoopsがテーブルを自動生成しますので、『次へ』をクリックします。

データベーステーブルが作成されたら、サイト管理者の設定をしますので、『次へ』をクリックします。

次の画面で、サイト管理者の設定をします。 XOOPS Cubeのインストールが完了したら、この管理者ユーザ名でログインし、XOOPS Cubeをセットアップします。 ユーザ名とパスワードは、忘れないようにしてください。 また、「管理者ユーザー名」「パスワード」とも、半角英数字とし、スペースを含めないようにしてください。 フォームのすべてに入力が済んだら「次へ」をクリックします。

『データの生成』がうまくいったら、『次へ』をクリックします。

『インストール第1ステップ完了』と表示されたら、『次へ』をクリックします。

先程登録した『ユーザー名』と『パスワード』でログインします。

『以下のモジュールが導入されていません』と表示されますので、そのまま『インストール』をクリックします。

『インストール完了』の下にインストールフォルダを削除するようにアラームが出ていますので、FFFTPで『install』フォルダごと削除します。

Xoops Cubeのトップページが表示されたらインストールは完了です。

使い方を覚えたらそのうち、ご紹介したいと思います。本日は以上です。

タグ

2011年7月19日 | コメント/トラックバック(0) |

カテゴリー:Xoops

WordPressとTwitterを連携させる

WordPressとTwitterを連携させるのに比較的扱いやすいのが『Tweetable』だと思います。今日は、『Tweetable』の導入と設定方法を紹介したいと思います。

『プラグイン』→『新規追加』をクリックし、キーワードに『Tweetable』と入力して、『プラグインの検索』ボタンをクリックします。『Tweetable』が表示されたら、『いますぐインストール』をクリックします。現在のバージョンは1.2.0です。インストールが完了したら、プラグインを有効化をクリックします。

マルチサイト機能を利用している方は、プラグインのインストールはネットワーク管理者で行ってください。インストール後にネットワークで有効化をクリックするのを忘れないでください。又、Tweetableの設定は、各サイトのダッシュボードから行ってください。

左のナビゲーションの一番下に、『Twitter』が表示されていると思いますので、『Twitter』メニューの中の『install』をクリックします。メニューの右側に『Tweetable Setup』の画面が表示されたら、Callback URLと書かれた箇所の『http://』以下をコピーして、『Register Application』ボタンをクリックします。

ツイッターのログイン画面が出ますので、ログインします。尚、『Twitter』に登録していない方は、先に登録してください。

『Registser an Application』の画面で、下の図のように入力してください。入力が終わったら、『保存する』ボタンをクリックします。

『Application name』にサイトタイトルを入力、『Description』にサイトの説明を入力します。『Application Website』には、Twitterと連携させるサイトのURLを入力します。『Application Type』は『Brower』を選択します。Callback URLには、先程コピーした『Tweetable』のCallback URLをペースとします。『Default Access type』は『Read,Write & Direct Message』か、『Read &Write』を選択します。画像認証の文字を入力します。文字が読めない場合は、2つの単語を更新をクリックすると単語が新しくなります。それでも読みづらい場合は『単語を聞いてください』をクリックすると単語の発音が聞けるはずです。最後に『保存する』ボタンを押します。

登録が成功すれば、アプリケーションの詳細画面で、『シューマー・キー』と『コンユーマー・シークレット』が表示されます。この二つをWordPressの『Tweetable』の設定画面に入力します。

まず、WordPressの設定画面に戻り、右下にある『Continue』ボタンをクリックします。『Tweetable SetupがStep2になっているのを確認し、『Consumer Key』の箇所に、Twitterのシューマー・キーを入力し、『Consumer Secret』の箇所に、Twitterのコンシューマー・シークレットをコピー&ペーストしたら、『Save and Continue』ボタンをクリックします。

次の『Step3』では、Twitter Usernameの箇所にTwitterのアカウントを入力して『Save and Continue』ボタンをクリックします。

次の『Step4』では、Twitterとの接続許可を確認します。『Sing in with Twiter』ボタンをクリックします。

するとTwitterの認証画面になりますので、『アプリを認証』ボタンをクリックします。

WordPressの『Tweetable Setup』画面に戻りますので、『finish』ボタンを押せば、WordPressからTwitterへの連携ができる状態になります。

タグ

2011年7月15日 | コメント/トラックバック(4) |

カテゴリー:WordPress

携帯電話からWordPressに投稿する

今日は、携帯電話からWordPressに記事を投稿する方法を紹介します。

Ktai Entryをインストールする

以前『WordPressでSNSを構築する』で作成した、『WinRoad広場』で利用できるようにしてみたいと思います。『Ktai Entry』というプラグインをインストールします。下記のサイトにアクセスします。

http://wppluginsj.sourceforge.jp/ktai_entry

サイトの真ん中あたりにあるダウンロードの箇所の安定版をクリックし、ファイルをダウンロードします。ダウンロードしたファイルを解凍し、FTPソフトを使って、レンタルサーバー内の『wp-content/plugin』フォルダにアップします。

ここで少し裏技を使ってアップしてみたいと思います。解凍したフォルダ『Ktai_entry』を再度、圧縮ソフトでZip形式で圧縮します。WordPressのダッシュボードを開きます。プラグインの新規追加をクリックし、アップロードをクリックします。圧縮した『ktai_entry.zip』を指定し、『いますぐインストール』ボタンをクリックします。

ネットワークで有効化をクリックします。

これで、FTPソフトを使わなくてもプラグインをインストールすることができます。

投稿受信用メールを設定する

利用してるレンタルサーバで、メールアドレスを新しく作成して下さい。次に、ネットワーク管理者のダッシュボードで、サイト→サイトを開き、『Ktai Entry』を利用するサイトの『編集』をクリックします。

サイトの編集画面で『設定』タブをクリックします。

真ん中あたりにある『Mailserver Url』、『Mailserver Login』、『Mailserver Pass』、『Mailserver Port』を新規に作成したメールアドレスの状況に合わせて変更します。

投稿ユーザーを新規に追加する

『WinRoad広場』のダッシュボードから『ユーザー』→『新規追加』をクリックします。『ユーザー名』、『携帯メールアドレス』を入力し、権限グループを『投稿者』に変更、『新規ユーザーを追加』をクリックします。

『Ktai Entry』のオプション設定

ダッシュボードの『設定』に新しく作成された『メール投稿』をクリックします。『投稿受付メールアドレス』に先ほど作成したメールアドレスを入力します。『投稿に挿入する画像サイズ』を『中サイズ』にチェックを入れた後、『変更を保存』ボタンをクリックします。

これで携帯からWordPressへ投稿することができるようになります。

iphone版WordPressアプリをインストールする

WordPressの公式アプリケーションを利用すれば、iphone用の管理画面から『投稿』や『固定ページ』を新規追加したり、記事を編集したりすることもできます。iphoneをお持ちの方は、無料ですのでぜひインストールしてみて下さい。

まず、App StoreからWordPressの公式アプリ(無料)をインストールします。アプリを起動し、『インストール型WordPressブログを追加』をクリックします。サイトのURLとユーザー名、パスワードを入力します。右上の保存をクリックします。『ログインできませんでした。』と表示されたら、WordPressのダッシュボードに戻り、設定の投稿設定をクリックします。下のほうにある『XML-RPC』にチェックを入れ『変更を保存する』ボタンをクリックして下さい。

再度iPoneで接続すれば、登録されているサイトの一覧が表示されます。試しにiphoneから『WinRoad広場』に投稿してみました。携帯からだと画像サイズは調整できませんが、iphoneからだと好きなサイズに変更できます。投稿結果を下に表示します。ちなみに写真は、『海老名サービスエリア』のザボンラーメンのとんこつ坦々麺です。私はかなりはまっています。

iphoneでWordPressの投稿管理や、ブログチェックができるとかなり便利です。ぜひ使ってみてください。

タグ

2011年7月14日 | コメント/トラックバック(2) |

カテゴリー:WordPress

CodeIgniterでデータ検索

前回の訂正とお詫び

kenji様のご指摘がありましたので、前回の『CodeIgniterでレコード更新』の間違い箇所を訂正いたします。私が参考にしている書籍が、2.0以前のものでしたので、皆様に誤った情報を公開したことを反省しております。『CodeIgniterではGETのパラメータは$_GETでは、取り出せません』の箇所は誤りで、2.0以降では、デフォルトで $this->input->get() が使えるみたいです。kenji様、ご指摘ありがとうございました。

本日は、CodeIgniterでデータ検索について勉強してみたいと思います。前回の『CodeIgniterでレコードの更新』では、データのID番号を指定して、データ更新をしましたが、実際問題としてデータのID番号を指定してのデータ更新は、現実的ではありませんので、データ検索をして、そのデータ検索の結果からデータ更新するのが一般的だと思います。よって、本日は、目的のデータを曖昧検索で探し出す方法を紹介したいと思います。

ビューファイルの作成

まず、検索のための、ビューファイルを作成します。『aplication/views』フォルダに『dvd_search_view.php』ファイルを作成します。例のごとく、Dreamweaverで作成します。『フォーム』タブのフォームで赤いフォーム枠を作成したら、その中に3行2列のテーブルを作成します。検索文字の箇所にテキストフィールドを挿入します。この辺の手順は何度もやっていますので、今回は省略します。テキストフィールド名は『search』にします。

モデルの作成

ビューファイルをいったん保存したら、今回は、モデルを作成します。データベースにアクセスする処理が多くなってくると、コントローラだけでデータベースアクセスのための処理を書いていくのは、あまりいい方法ではありません。CodeIgniterはコントローラでほとんどの処理はできますが、やはり、データベースアクセスの処理は、コントローラから引き離し、極力簡単に利用できるようにしておいた方がいいと思います。『aplicatison/models』フォルダに『dvd_model.php』ファイルを作成します。

class Dvd_model extends CI_Model{
function __construct()
{
parent:: __construct();
$this->load->database();
}

ここまでは、ほとんど説明の必要はないと思います。コントローラと同じくクラス名の頭文字は大文字にします。まず最初にモデルクラスを継承するコンストラクタを記述します。初期化処理を記述する場合は、『parent:: __construct();』の直下に記述します。

次に検索用のメソッドを記述します。

function search($str)

{
$sql="SELECT * FROM dvd WHERE title like ? OR content like ?";
$query=$this->db->query($sql,array("%{$str}%","%{$str}%"));
return $query->result_array();
}

今回は『$this->db->query()』メソッドを利用します。手順としては、dvdテーブルの中から『title』または、『content』フィールドの中に検索文字列の一部が含まれているレコードを選択し、配列に代入します。第2引数に配列を渡すと、それぞれの?の箇所に配列の要素が指定されます。つまり、検索文字に『test』の文字が送信されると、$sqlは以下のように変化します。

SELECT * FROM dvd WHERE title like %test% OR content like %test%

クエリーに記述される要素を必要に応じて変更させるような場合には、このように『?』を使って記述し、配列で値を埋め込むクエリーを生成させる方法があります。


コントローラの作成

それでは、次にコントローラを作成します。『aplication/controllers』フォルダに『dvd_search.php』ファイルを作成します。

class Dvd_search extends CI_controller{

function index()
{
$this->load->view('dvd_search_view');
}
if($this->input->post('search')!=null){
$search=$this->input->post('search');
$this->load->model('Dvd_model');
$data['records']=$this->Dvd_model->search($search);
$this->load->view('dvd_list_view',$data);
}else{
$this->load->view('dvd_search_view');
}
}
}

まず最初に、検索用のビュー『dvd_search_view』を呼び出します。POST送信の有無を確認し、POST送信されたら、変数$searchに検索の値を代入します。次にモデルを呼び出し、配列に検索の結果を代入します。以前に作っていた、『dvd_list_view』を呼び出し、表示します。

ビューファイルの修正

ビューファイル『dvd_search_view』のフォーム内の『action=””』の箇所を修正します。送信ボタンがクリックされたら、『dvd_search.php』コントローラの『search』メソッドが実行されるように、『action=”dvd_search/search”』と変更します。

ブラウザで確認

それでは、実際にブラウザで確認してみましょう。『http://localhost/CodeIgniter/dvd_search』を開きます。検索文字に『愛』と入力して、送信ボタンをクリックします。

検索結果が表示されました。

本日は以上です。

タグ

2011年7月13日 | コメント/トラックバック(0) |

カテゴリー:CodedIgniter

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’);

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

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

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

タグ

2011年7月7日 | コメント/トラックバック(3) |

カテゴリー:CodedIgniter

CodeIgniterでテーブルの一覧を表示する

前回、CodeIgniterのデータベースクラスを利用して、レコードの追加の方法を紹介しましたが、今回はそのレコードの表示方法を紹介したいと思います。今回もCodeIgniterのデータベースクラスを使います。

ビューファイルの作成

まず最初にレコードを表示するビューを作成します。『aplication/views』フォルダに『dvd_list_view.php』ファイルを作成します。今回もDreamweaverで作成します。ファイルを作成したら、デザイン画面で『一般』タブの『テーブル』をクリックし、2行4列のテーブルを作成します。

見出しをID、日付、タイトル、内容と入力して、いったん保存します。

コントローラの作成

次にコントローラを作成します。『aplication/cotrollers』フォルダに『dvd_list.php』ファイルを作成して、次のようなコードを入力します。

class Dvd_list extends CI_controller{
function __construct()
{
parent:: __construct();
$this->load->database();
}
function index()
{
$data['records']=$this->db->get('dvd')->result_array();
$this->load->view('dvd_list_view',$data);
}
}

次に先ほど作成したビューファイルを少し修正します。コードを入力します。
テーブルの2行目<tr>から</tr>を<?php foreach ($record as $row): ?>と<?php endforeach;?>で挟みます。これは、<tr>から</tr>までをレコードの数だけ繰り返すための繰り返し構文です。
各<td>と</td>の間には、繰り返すデータを指定します。

<?php foreach ($records as $row): ?>
<tr>
<td><?=$row['ID']?></td>
<td><?=$row['date']?></td>
<td><?=$row['Title']?></td>
<td><?=$row['Content']?></td>
</tr>
<?php endforeach; ?>

それではブラウザで確認してみましょう。テーブル(dvd)の一覧が表示されました。

コードの説明

コントローラ『dvd_list.php』の解説をします。

class Dvd_list extends CI_controller{

これまもう解説の必要はないと思いますが、クラス名は必ずファイル名と同じで、頭文字は大文字です。

function __construct()
{
parent:: __construct();
$this->load->database();
}

これも前回説明しています。コンストラクタの記入の前に必ず、親クラスの継承のための『parent:: __construct()』は忘れないようにしてください。また、データベースを自動設定してある場合はこの箇所は記載不要です。

$data[‘records’]=$this->db->get(‘dvd’)->result_array();

『db』オブジェクトは、CI_DBというクラスのインスタンスが納められているメンバー変数です。databeseライブラリが読み込まれていると、モデルのインスタンス内に自動的に用意されています。次の『get』メソッドはget(第1引数、第2引数、第3引数)という使い方をします。第1引数は、テーブル名、第2引数は、LIMIT値、第3引数は、OFFSET値を指定します。第2引数と第3引数は省略可能です。次の『result_array()』は、『get』で呼び出されたレコードを配列の形にして返します。

$this->load->view(‘dvd_list_view’,$data);

最後は、ビューファイル(‘dvd_list_view’)を呼び出すためのコードです。

本日は以上です。

タグ

2011年7月4日 | コメント/トラックバック(0) |

カテゴリー:CodedIgniter

このページの先頭へ