CodeIgniterのデータベースクラス

CodeIgniterにはデータベースクラスという非常に便利で、高速なクラスライブラリがあります。

データベースの自動接続

CodeIgniterでサイトを構築したいというからにはやはりデータベースを駆使したサイト作りをしたいという人が多いと思います。ほとんどのページでデータベースを利用するには、データベースの自動接続を設定しておくと便利です。自動接続を有効にするには、『application/config』フォルダの『autoload.php』ファイルの55行目を次のように変更します。
『$autoload[‘libraries’] = array();』→『$autoload[‘libraries’] = array(‘database’);』

データベースの手動接続

データベース接続が必要なページが少ない場合、自動接続は、無駄なデータベース接続が発生することになります。そのような場合は、手動接続を利用します。データベース接続が必要なメソッド内に下記のコードを追加します。

$this->load->database();

別のデータベースに接続したい場合は、第1引数にグループ名を指定します。

$this->load->database(‘グループ名’);

入力フォームの作成

前回、フォームの送信でPOST送信の方法を説明しましたが、今回はPOSTしたデータをデータベースに登録してみたいと思います。以前『Dreamweaverで簡単PHP』のコーナーで作成したデータに入力してみたいと思います。

今日もDreamweaverでコードを作成します。ファイル→新規でPHPファイルを新規作成します。フォームを作成して中に、テーブルを挿入したら、『aplication/views』フォルダに『dvd_insert_view.php』ファイル名で保存します。フォームの作成がわからない人は、『Dreamweaverで簡単PHPサイト作成3』を参照してください。ビューファイルとコントローラファイル名は同じでも構いませんが、Dreamweaverのタブに同じ名前が並ぶとわかりづらくなりますので、ビューファイルには_viewを付加することにします。

デザイン画面で日付のテキストフィールドをクリックして、プロパティのテキストフィールド名を『date』に変更します。初期値の項目に今日の日付が自動的に入力されるようにPHPコードを入力します。『<?=date(‘Y/m/d’);?>』と入力します。それ以外の『タイトル』のテキストフィールド名を『title』、『内容』のフィールド名を『content』に変更します。

新規入力が成功したときに表示するページも先に作っておきます。『aplication/views』フォルダ内に『dvd_insert_ok_view』の名前でファイルを作成して『データが新規入力されました』と一言入力しておきます。

入力コントローラの作成

次にコントローラを作成します。『aplication/controllers』フォルダに『dvd_insert.php』ファイルを新規作成します。新規作成したファイルに以下のコードを入力します。

class Dvd_insert extends CI_controller{
function __construct()
{
parent::__construct();
$this->load->database();
}
function index()
{
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->insert('dvd',$data);
$this->load->view('dvd_insert_ok_view');
}else{
$this->load->view('dvd_insert_view');
}
}
}

それではブラウザで確認してみましょう。『http://localhost/CodeIgniter/dvd_insert』と入力します。表示された入力フォームにデータを入力してみます。

入力成功のページ『dvd_insert_ok_view』が表示されたらOKです。

実際にデータが登録されているかどうか確認してみましょう。

コードの解説

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

class Dvd_insert extends CI_controlles

クラスはファイル名と同じで頭文字を大文字にします。これは基本です。

function __construct()

これより下にコンストラクタ(自動呼び出しメソッド)を指定します。

parent:: __construct();

コンストラクタを指定する前に必ず、入力してください。子クラスのコンストラクタは親クラスのコンストラクタを上書きしますので、親クラスを継承するために必ず必要です。

$this->load->database();

デフォルトのデータベースを呼び出します。自動接続設定している場合は不要です。

function index()

これより下にデフォルトメソッドを記入します。

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

post送信されたtitleがnull値でなかったら、{ }内のコードを実行します。

$data=array( ‘date’=>$this->input->post(‘date’,true), ‘title’=>$this->input->post(‘title’,true), ‘content’=>$this->input->post(‘content’,true));

配列$dataにpost送信されたデータを代入します。trueは前回説明したXSSフィルタリングです。自動設定されている場合は不要です。

$this->db->insert(‘dvd’,$data);

Active Recordクラスのデータ挿入です。配列またはオブジェクトのどちらかでメソッドにデータを渡します。今回は、配列$dataの値をテーブル『dvd』に渡します。

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

入力成功時表示用のビューファイル(‘dvd_insert_ok_view’)を表示します。

}else{

post(‘title’)がnull値なら、以下のコードを実行します。

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

入力用のビューファイル(‘dvd_insert_view’)を表示します。

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

タグ

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

カテゴリー: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

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でデータ検索

前回の訂正とお詫び

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で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

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でjQuery Mobileを簡単に使う方法

DreamweaverCS5.5を使うと、CodeIgniterで簡単にjQuery Mobileが使えるようになります。今日はその方法を記載したいと思います。

Dreamweaverのようこそ画面の新規作成の一番下にある『詳細設定』をクリックします。

新規ドキュメントダイアログが表示されたら、『サンプルから作成』→『モバイルスターター』→『jQuery Mobile(ローカル)』と選択して、『作成』ボタンをクリックします。

下記のようなコードが作成されます。

ローカルの『application/views』フォルダに新規でスマートフォン用のフォルダ『sp』を作成します。『ファイル』→『別名で保存』をクリックし、作成した『sp』フォルダに『index.php』名で保存します。

依存ファイルのコピーダイアログが表示されますので、『コピー』ボタンをクリックします。

新規に作成された依存ファイルの入ったフォルダ『jquery-mobile』を選択し、リモートサーバー(レンタルサーバー)にフォルダごとアップします。

次に、『application/contorollers』フォルダに『test.php』名でファイルを作成し、以下のコードを作成します。

<?php
class Test extends CI_controller{
function index()
{
$this->load->view('sp/index');
}
}

それでは、例のごとく、Device Centralで確認してみたいと思います。

実機でも試してみましたが、きちんとjQuery Mobileが動いていました。

本日は以上です。

タグ

CodeIgniterでPEARを使う

CodeIgniterで使い慣れたPEARを使えないか調べてみました。CodeIgniterの『フック機能』を使って、PEARを使えるようになったので、その方法を記載したいと思います。

PEARのダウンロード

以下のPEARの公式サイトへ行き、PEARをダウンロードします。

http://pear.php.net/package/PEAR/download

2011/08月の最新版は1.9.4です。ダウンロードしたPEAR-1.9.4を解凍すると、中に『PEAR-1.9.4』フォルダがあります。このフォルダ名を小文字の『pear』に変更します。そしてこのフォルダをいったん、ローカルの『system』フォルダにフォルダごとドラッグしてコピーします。

次に、必要なパッケージを検索してダウンロードし、『pear』フォルダの中に入れます。とりあえず使い慣れたMailパッケージをインストールしてみます。先程のダウンロードページからSeach forの中に『mail』と入力して、検索します。ダウンロードしたいパッケージをクリックします。

『Download』のタブをクリックし、下の『Download』の1.2.0と書かれた文字(バージョンにより数字は変わります)をクリックしてダウンロードします。

ダウンロードした『Mail-1.2.0』を解凍し、中にある『Mail-1.2.0』フォルダを『Mail』に変更します。先程と同じように、今度は、先程ドラッグ&コピーした『pear』フォルダの中に『Mail』フォルダごとドラッグ&コピーします。一通り必要なパッケージをコピーし終わったら、リモートサーバー(レンタルサーバー)に『pear』フォルダごとアップします。

次に『application/config』フォルダの『config.php』ファイルを開き、94行目の『config[‘enabele_hooks’]=FALSE;』のFALSEをTRUEに変更します。これで『フック』機能が使えるようになります。

次に、『application/config』フォルダの『hooks.php』ファイルを開き、下記のコードを追加します。

$hook['pre_controller'][]=array(
'class'=>'Pear_hook',
'function'=>'index',
'filename'=>'pear_hook.php',
'filepath'=>'hooks'
);

上記のコードで配列を多次元配列にしているのは、複数のスクリプトを同じフックポイントで使えるようにするためです。他にもコントローラが呼び込まれる直前に使いたいフックを追加する可能性があるので、多次元配列にしています。

最後に、『application/hooks』フォルダに『pear_hooks.php』ファイルを作成し、下記のコードを入力します。

 if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Pear_hook
{
function index(){
ini_set('include_path',ini_get('include_path').PATH_SEPARATOR.BASEPATH.'pear/');
}
}

それでは、実際に動くのか検証してみます。『applicatio/controllers』フォルダに『pear_mail_sample.php』ファイルを作成し、下記のコードを入力します。

class Pear_mail_sample extends CI_controller{

function index()
{
require_once('Mail/Mail.php');

$subject=mb_encode_mimeheader('テスト','ISO-2022-JP');
$recipients='nakada@i.softbank.jp';
$headers=array(
'From'=>'nakada@gmail.com',
'To'=>'winroad@gmail.com',
'Subject'=>$subject,
'Sender'=>'nakada@gmail.com'
);
$body='これはCodeIgniterからのPearによるテストメールです';

//メールを送信する
$mail=Mail::factory('sendmail');
$result=$mail->send($recipients,$headers,$body);
}
}

きちんとメールが送信されてきました。これでCodeIgniterでPEARが使えるようになりました。CodeIgniterで使い慣れたPEARが使えるとかなり便利になります。

本日は以上です。

タグ

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

カテゴリー:CodedIgniter

CodeIgniterでセッションデータをデータベースに保存する

会員専用サイトや社内専用サイト等をCodeIgniterで作成しようと思っている人は、セキュリティの面からもセッションデータをデータベースに保存する必要があります。ユーザのクッキーの中に保管されるセッションデータの配列にはセッションIDが含まれていますが、セッションIDを検証するには、データベースに保存されているセッションデータが必要だからです。

セッションデータがデータベースで利用可能なとき、正しい形式のセッションがユーザのクッキーの中にあった場合は、データベースのクエリでそれを照合します。 セッションIDが不一致の場合は、セッションが破棄されます。 セッションIDは更新されることがなく、新しいセッションが作成されるときに生成されます。(CodeIgniterユーザガイド日本語版のサイトより)

それでは、まず最初にphpMySQLでセッション保存用のデータベーステーブルを作成します。phpMyAdminにアクセスし、データベース名をクリックしたら、新しいテーブルを作成する画面が表示されますので、名前を『ci_sessions』、フィールド数を『5』と入力して、『実行する』ボタンをクリックします。

フィールド名を『session_id』『ip_address』『user_agent』『last_activity』『user_data』で下記のように作成します。

SQLで作成するには、下記のように作成してください。phpMySQLで『SQL』タブをクリックし、中のテキストフィールドに下記のコードをコピー&ペーストして『実行する』ボタンをクリックしてください。

CREATE TABLE `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(50) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text DEFAULT '' NOT NULL,
PRIMARY KEY (session_id)
);

次に、『application/config』フォルダの『config.php』ファイルの251行目『config[‘sess_use_database’]=FALSE;』のFALSEをTRUEに変更します。

それでは、実際にデータベースにセッションデータが保存されるかどうか確認してみましょう。前回、『CodeIgniterでセッション管理』で作成したコントローラ『counter.php』のURIをブラウザに入力してみます。

データベースにどのように保存されているか確認してみます。ブラウザをもうひとつ開いてその違いも見てみました。 『user_data』にカウンターの回数も表示されています。

とても簡単です。また『セッションクラスには、有効期限切れのセッションをクリアする組み込みガベージコレクションがありますので、独自のクリア処理を書く必要はありません。(CodeIgniterユーザーガイド日本語版サイトより)』とありますので、とても便利です。

今日は、ここまでにします。

タグ

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

カテゴリー:CodedIgniter

CodeIgniterのカレンダークラス

CodeIgniterのカレンダークラスを使うと簡単に動的なカレンダーを生成することができます。

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

たったこれだけで簡単に、カレンダークラスを呼び出すことができます。呼び出したカレンダーオブジェクトは、『$this->calendar->generate();』で使用することができます。

それでは実際に作成してみましょう。『application/controllers』フォルダに『calendar_sample.php』ファイルを作成して以下のコードを入力します。

class Calendar_sample extends CI_controller{
 function index()
 {
	$this->load->library('calendar');
	echo $this->calendar->generate();

 }
}

実際にブラウザで確認してみましょう。カレンダーは表示されましたが、その上にエラー表示があります。どうやら『タイムゾーン』が指定されていないので、PHPの方で、勝手に『Asia/Tokyo』に設定しましたよ。と言う意味でしょうか。自動的に設定してくれるのならエラー表示しなくてもいいようなものですが、そんなことを言っても仕方がないので、サーバーのpnp.iniファイルを少々いじります。

同じような症状の出た方は、レンタルサーバーのphp.iniファイルに『date.timezone=Asia/Tokyo』の1行を追加して下さい。それでエラー表示がなくなるはずです。

本題に戻って、このカレンダーは今月を表示してはいますが、これだけでは物足りないです。やはり月を移動するリンクは必要なので、先程のコードを書き換えます。

class Calendar_sample extends CI_controller{
 function index()
 {
	$data = array (
               'show_next_prev'  => TRUE,
               'next_prev_url'   => 'http://ci.builwing.co.jp/calendar_sample/index/'
             );

	$this->load->library('calendar', $data);
	echo $this->calendar->generate($this->uri->segment(3), $this->uri->segment(4));
 }
}

ブラウザで確認してみます。月を移動するリンクが表示され、左側をクリックすれば、前月へ、右側をクリックすれば、翌月へ移動するようになりました。

コードの解説

‘show_next_prev’=>TRUE

前/次の月に移動できるURLを表示するかどうかの機能

‘nex_prev_url’=>’移動するURL’

移動する月のリンクを利用する場合の基準パス

$this->load->library(‘calendar’,$data)

先程は説明しませんでしたが、『$this->load->library();』メソッドは、第二引数に設定項目を配列として、渡すことができます。つまりこれは、上記2つの設定項目を含んだカレンダークラスの呼び出しです。

$this->uri->segment(3)

これは、CodeIgniterのURIクラスで、URIの3つめのセグメントを取り出しています。つまり年の数字を取り出します。

$this->uri->segement(4)

同じく、URIの4つめのセグメント、つまり月の数字を取り出します。

これで、左の矢印リンクをクリックすれば、前月『http://ci.builwing.co.jp/index/2011/07』へ移動し、右の矢印リンクをクリックすれば、翌月『http://ci.builwing.co.jp/index/2011/09』へ移動します。

尚、本日はURIクラスの解説はほとんどしていませんが、そのうちにURIクラスの解説も行いたいと思います。

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

タグ

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

カテゴリー:CodedIgniter

このページの先頭へ