D-Framework 機能

DBアクセスクラス

DBにアクセスするためのPDOラッパークラスを提供しています

  • CONFIG設定
    define( 'DFW_DB_DSN',            'mysql:dbname=databesedatabse;host=localhost' );
    define( 'DFW_DB_USER',           'useruser' );
    define( 'DFW_DB_PASS',           'passpass' );

 

DBクラスに自作メソッドを追加

DBクラスを継承したクラスを定義し、そこに自作のメソッドを追加します。

class MyDB extends DB {

  public function hoge() {
     /* hoge処理 */
  }	
	
}

 

簡単な使い方

  • DB接続
    $db = new DB(); // CONFIGに設定したDSN情報でDB接続
  • SQL定義
    $db->setSql('SELECT * FROM memo WHERE name=:name AND flag=:flag');
  • SQLパラメータ設定
    $db->set('name', 'tatenosystem');
    $db->set('flag', 1);
  • SQLパラメータ設定(連想配列)
    $params = array();
    $params['name'] ='tatenosystem';
    $params['flag'] = 1;
    $db->sets( $params );
  • SQL実行(1レコードずつ取得)
    $db->exec();
    while( true ) {
     $item = $db->fetch();
     if( $item === false ) break;
     var_dump( $item );
    }
  • SQL実行(1レコード取得)
    $item = $db->execFetchOne();
    var_dump( $item );
  • SQL実行(全レコード取得)
    $items = $db->execFetchAll();
    var_dump( $items );
  • DB切断
    $db->close();

 

  • 直前に実行したSQL文確認
    echo $db->getSql();

 

複数のDB接続

通常CONFIGに設定したデフォルトDSN情報でDB接続します。
複数のDBに接続する場合は、CONFIGに連想配列でDSN情報を記載してキー名で接続します

  • CONFIG設定(「sonota」という名前でDSN定義)
    // === 特殊オプション(DB個別設定)
    $DFW_DB_DSN = array(
    	'sonota' => array(
    			'dsn' =>'mysql:dbname=sonotadatabase;host=localhost',
    			'user'=>'sonotauser',
    			'pass'=>'sonotapass'
    	),
    );
  • 接続
    $db = new DB('sonota');

 

便利なINSERTメソッド

INSERT命令はSQL文を書かずに実行できるメソッドがあります。
戻り値は最後に挿入された行のID(PDO::lastInsertId値)となります。

$db = new DB();
$params = array( 'title'=>'ほげタイトル', 'description'=>'ほげんほげん' );
$ret = $db->insert( 'my_table', $params ); // INSERT実行

上記実行のSQLは、

INSERT INTO my_table ( title, description ) VALUES ( "ほげタイトル", "ほげんほげん" );

となります。

 
NOW()関数が使えます。

$db = new DB();
$params = array( 'title'=>'ほげタイトル', 'created_at'=>'NOW()' );
$ret = $db->insert( 'my_table', $params ); // INSERT実行

上記実行のSQLは、

INSERT INTO my_table ( title, created_at ) VALUES ( "ほげタイトル", NOW() );

となります。

 

詳細マニュアル

  → DBクラスマニュアル  
 


DBクラス エラー処理

DB操作メソッド

DBメソッドエラー時は false(boolean) が返却されます。

$rtn = $db->exec();
if ($rtn === false) {
  echo 'DB execエラー';
}
$rtn = $db->fetch();
if ($rtn === false) {
  echo 'DB fetchエラー';
}

以下の関数のエラー時は false(boolean) が返却されます。

  • exec
  • fetch
  • fetchAll
  • execFetchAll
  • execFetchOne
  • insert

DBコンストラクタ

コンストラクタのエラーチェックのみ isConnect メソッドを使用します。

$db = new DB();
if (! $db->isConnect()) {
  echo 'DBコネクトエラー'
}

 
 


VIEWでの自動エスケープ

モジュールPHPで設定したVIEWへの情報はエスケープ処理されます

setView( 'name', '<p>s-tanno</p>' );

エスケープしたくない情報は、setViewRaw() で設定してください

setViewRaw( 'name', '<p>s-tanno</p>' );

 

VIEWへの情報の渡し方(1)

  • PHPモジュール
    setView( 'name', 's-tanno' );
  • ビューでの出力(Smarty)
    {$name}
  • ビューでの出力(PHP)
    <?php echo getView('name'); ?>
    <?php v('name'); ?>

 

VIEWへの情報の渡し方(2)

  • PHPモジュール
    $param = array();
    $param['name'] = 's-tanno';
    $param['desc'] = 'kami';
    setView( 'user', $param );
  • ビューでの出力(Smarty)
    {$user.name}
    {$user.desc}
  • ビューでの出力(PHP)
    <?php
        $user = getView('name');
        echo $user['name'];
        echo $user['desc'];
    ?>

 

VIEWへの情報の渡し方(3)

  • PHPモジュール
    $param = array();
    $param['name'] = 's-tanno';
    $param['desc'] = 'kami';
    setViews( $param );
  • ビューでの出力(Smarty)
    {$name}
    {$desc}
  • ビューでの出力(PHP)
    <?php echo getView('name'); ?>
    <?php v('name'); ?>
    
    <?php echo getView('desc'); ?>
    <?php v('desc'); ?>

 
 


URLマッピング

URLのパス情報をGETパラメータとして取得出来ます。

  • CONFIG設定
    // === URLマッピングの使用
    define( 'USE_URL_MAPPING',       'yes' ); 
  • .htaccess
    <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteRule ^(.*)$ index.php [QSA,L]
    </IfModule>

URL例

http://hogehoge.jp/view/0123/tatenosystem/
  • モジュール名は「view」になります
  • CGIパラメータ「get1」で「0123」が取得出来ます( $_GET['get1'] )
  • CGIパラメータ「get2」で「tatenosystem」が取得出来ます( $_GET['get2'] )
  • パス情報が存在すれば同様にCGIパラメータ「get3、get4、~」が取得できます。

 


セッション処理

通常の使い方

特に D-Framework 関数を利用する必要はありません。
PHP関数でセッションを開始してください。

session_start();

設定ファイルにセッション名を定義してある場合は下記のコードでセッションを開始してください。

session_name( SESSION_NAME );
session_start();

セッション開始後、PHP関数でセッション処理をしてください。

$_SESSION['hoge'] = 'hogehoge';

 

認証が必要な場合

ログイン機能があるWEBアプリケーションを作成する場合は D-Framework 関数を利用してください。
正しくセッションが作成されているかチェックする機能があります。
またフィンガープリント(ブラウザ情報チェック)によるセッションハイジャック検出機能を提供します。

 

  • ログイン成功後に一回だけ実行
startFirstSession();

  セッションが開始されフィンガープリントがセッションに保持されます。

 

  • 各モジュール毎に実行(1)
startSession();

  セッションが開始されフィンガープリントが正しいかをチェックします。
  正しくセッションが開始されていない場合は、「HTTP/1.1 403 Forbidden」となります。

 

  • 各モジュール毎に実行(2)
startSession('top');

  セッションが開始されフィンガープリントが正しいかをチェックします。
  正しくセッションが開始されていない場合は、引数で指定したモジュール名にリダイレクトします。

 

セッション開始後、D-Frameworkセッション関数 又は PHP関数でセッション処理をしてください。

$_SESSION['hoge'] = 'hogehoge';
setSession( 'hoge', 'hogehoge' );
setSession( 'hoge' ); // セッション情報を削除

 

CSRF対策が必要な場合

CSRF対策を行う必要があるWEBアプリケーションを作成する場合は D-Framework 関数を利用してください。

  • セッションの開始
    startFirstSession();
  • セッション開始&チェック
    startSession();
  • セッション開始&チェック
    startSession('top');

詳細は「CSRF対策機能」を参照してください。

⇒ CSRF対策機能

 


CSRF対策機能

CSRF対策機能を使う場合、前提として D-Framework関数 でセッションを開始している必要があります。

(1)情報送信ページ

モジュールで getCsrfCode関数 を実行してCSRF対策コードを取得します。
取得したコードをビューに渡します。

$csrfCode = getCsrfCode();
setView( 'csrfCode', $csrfCode );

または

setView( 'csrfCode', getCsrfCode() );

ビューでは POST の HIDDEN データとして、CSRF対策コードを設定します。

<form name="hoge" method="post" action="">
  ……
  <input type="hidden" name="csrfCode" value="{$csrfCode}">
  ……
</form>

 

(2)情報受信ページ

HIDDEN データとして設定したCSRF対策コードを取得します。
checkCsrf関数で、正しいCSRF対策コードかチェックを行います。
正しくない場合は、「HTTP/1.1 403 Forbidden」となります。

$csrfCode = $_POST['csrfCode'];
checkCsrf( $csrfCode );

または

checkCsrf( $_POST['csrfCode'] );

正しいCSRF対策コードが正しくない場合に、指定したモジュールにリダイレクトする場合

checkCsrf( $csrfCode, 'top' ); // 不正の場合はtopモジュールにリダイレクト

 


バリデーション

バリデーションパターン(正規表現チェック)

データの妥当性をチェックする関数(validate関数)を利用します。
以下のバリデーションパターンが定義されています。

定義文字列内容正規表現
NUMBER0~9 数字/^[0-9]$/
ALPHAA~Z アルファベット(小文字含む)/^[a-zA-Z]$/
ASCIIASCIIコード(半角英数字記号)/^[\x20-\x7E]$/
HEX16進数表記(小文字含む)/^[0-9A-Fa-f]$/
SPACE半角スペース/^[ ]$/
HYPHENハイフン(マイナス記号)/^[-]$/
UNDERBARアンダーバー/^[_]$/

 

  • $_GET['year']が「数字」であるかどうかチェック
if ( ! validate('NUMBER', $_GET['year']) ) {
    // NG処理
}

 

定義文字列は , (カンマ) または - (ハイフン)で連結して使用ができます。
連結した場合 OR条件 で評価されます。

  • $_GET['code']が「数字」か「アルファベット」であるかどうかチェック
if ( ! validate('NUMBER,ALPHA', $_GET['code']) ) {
    // NG処理
}

 

定義文字列がない場合は「正規表現」でバリデーションパターンを定義できます。

if ( ! validate('/^[0-9A-C]$/', $_GET['code']) ) {
    // NG処理
}

 

文字列長チェック

データの長さを妥当性をチェックする場合は、validate関数の第3引数と第4引数に長さの範囲を指定します。
1文字の全角文字も長さは1文字となります。

  • $_GET['code']が「数字」か「アルファベット」で、長さが3~7文字であるかどうかチェック
if ( ! validate('NUMBER,ALPHA', $_GET['code'], 3, 7) ) {
    // NG処理
}

 

正規表現のチェックは省略可能です。
正規表現チェックを行わない場合は、バリデーションパターンに空文字を設定します。

  • $_GET['code']の長さが3~7文字であるかどうかチェック
if ( ! validate('', $_GET['code'], 3, 7) ) {
    // NG処理
}

 

文字列長のチェックを「バイト単位」で行いたい場合は、「validateByte関数」利用します。
引数は「validate関数」と一緒です。

正規表現チェックを行わない場合は、バリデーションパターンに空文字を設定します。

  • $_GET['code']の長さが3~7バイトであるかどうかチェック
if ( ! validateByte('', $_GET['code'], 3, 7) ) {
    // NG処理
}

 

バリデーションエラーの取得

「validate関数」でデータの妥当性がNGだった場合、エラーの詳細は「getValidateError関数」で取得できます。

「getValidateError関数」では配列を取得できます。
取得した配列で、「正規表現チェック」、「最小長チェック」「最大長チェック」のどのチェックでNGだったのかが確認できます。

if ( ! validateByte('ALPHA-NUMBER-SPACE', $str, 2, 3)) {
	echo '<p>データエラー</p>';
	var_dump( getValidateError() );
}

getValidateError() の戻り値は失敗したチェック項目がキーとなる連想配列で取得されます。
値は「1」が入っています。上記プログラムですべてのチェックがエラーに成った場合は、以下の var_dump が表示されます。

array
  'pattern' => int 1
  'min' => int 1
  'max' => int 1

チェック項目と連想配列のキーは、以下のとおりです。

連想配列キーエラー内容
pattern正規表現チェックエラー
min最小値チェックエラー
max最大値チェックエラー

 
 


トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-08-30 (月) 17:25:39 (9d)