CodeIgniter

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')を表示します。

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

-CodeIgniter
-

Copyright© WinRoad徒然草 , 2018 All Rights Reserved Powered by AFFINGER5.