カテゴリー : プログラミング

動的配列vector

今月末のiPhoneの勉強会に備えて、昨年7月以来、久々にopenFrameworksをやろうと本を引っぱり出してきました。

Beyond Interaction ―メディアアートのためのopenFrameworksプログラミング入門

続きを読む

openFrameworks 基本動作 音楽編

今月末のiPhoneの勉強会に備えて、昨年7月以来、久々にopenFrameworksをやろうと本を引っぱり出してきました。
第二回目です。

Beyond Interaction ―メディアアートのためのopenFrameworksプログラミング入門

続きを読む

openFrameworks 基本動作 超基本編

今月末のiPhoneの勉強会に備えて、昨年7月以来、久々にopenFrameworksをやろうと本を引っぱり出してきました。

Beyond Interaction ―メディアアートのためのopenFrameworksプログラミング入門

まずは超基本な所からまとめていきます。

続きを読む

CAKEPHP入門3 データベース

データベース

mySQLを利用する。
「app」「config」にあるdatabase.phpをまず修正します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class DATABASE_CONFIG {

var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'port' => '',
'login' => '',
'password' => '',
'database' => 'mydata',
'prefix' => '',
'schema'=>'',
'encoding'=>'UTF-8'
);

var $test = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'user',
'password' => 'password',
'database' => 'test_database_name',
'prefix' => '',
);
}

port,login,passwordはサーバー任意のモノを入力してください。

まずはモデルを作成します。
「app」「models」のフォルダの中にファイルを作ります。

1
2
3
4
5
6
7
8
9
10
11
<?php

class Board extends AppModel{
   
    var $name='Board';
   
   
}


?>

作成するファイル名は使用するデータベースのテーブル名と同じものにします。

次にコントローラ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

 class BoardsController extends AppController{
     
     public $name = 'Boards';
     
     function index(){
         
         $data = $this->Board->find('all');
         $this -> set('data',$data);
         
     }
 }
 ?>

モデルのメソッドを呼び出し($name)、ビュー渡しています。(set)
モデルはコントローラの中ではメンバ変数として利用することができます。今回は「$this->Board」の形で利用しています。「find」はモデルクラスのメソッドになります。

最後にビューです。

1
2
3
4
5
6
7
8
9
10
11
12
13
<body>
<h1> 送信フォームサンプル</h1>

<table>
<?php

  for($i =0 ; $i<count($data); $i++){
     
     echo $html->tableCells($data[$i]['Board'],array(),array().true);
  }
 
?>
</table>

コントローラから受け取った「$data」を使っています。
HTMLヘルパーを使っています。

おまけ

scaffoldを使えば、モデルとビューなしでデータベース管理するためのシステムを自動生成してくれます。

1
2
3
4
5
6
7
8
9
10
<?php

 class BoardsController extends AppController{
     
     public $name = 'Boards';
     public $scaffold;
     
   
 }
 ?>

データベースの操作

レコードの追加

コントローラ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

 class BoardsController extends AppController{
     
     public $name = 'Boards';
     
     function index(){
         
         $data = $this->Board->find('all');
         $this->set('data',$data);
         
     }
     
     function addRecord(){
         
         if(!empty($this->data)){
             
             $this->Board->save($this->data);
         }
         
         $this->redirect('.');
     }
     
   
}
?>

ビュー

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php

 echo $form->create(null,array('type'=>'posr','action'=>'./addRecord'));
 echo $form->text("Board.name");
 echo $form->text("Board.title");
 echo $form->textarea("Board.content");
 echo $form->submit("送信");
 echo $form->end();
 
 ?>
 
 <br/>
 <hr />
 <br/>
 
<table>
 <?php
 
  for($i=0;$i < count($data);$i++){
     
      echo $html->tableCells($data[$i]['Board'],array(),array(),true);   
 
 
  }
 
  ?>
 
  </table>

レコードの検索

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php

 class BoardsController extends AppController{
     
     public $name = 'Boards';
     
     function index(){
         
         $data=null;
         if(!empty($this->data)){
             $data = $this->Board->find('all',array('conditions' =>
             array('Board.id' => $this->data['Board']['id'])));
         }else{
             $data=$this->Board->find('all');
             
         }
         
         
         $this->set('data',$data);
     }
 }
 
         
         
   

?>

大きくはコントローラーが変わっています。
find(第一引数、第二引数)

  • 第一引数:all,first,list,countなど。
  • 第二引数:連想配列でまとめたもの。今回はconditionsは条件を設定しています。入力されたBoard.idに対して等しい値をdata['Board']['id']からの抽出しています。

CAKEPHP入門2

ビューは「app」「views」
コントロールは「app」「controllers」

フォーム

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php

class HelloController extends AppController{
   
    public $name='Hello';
    public $uses = null;
    public $layout = "hello";
   
   
    function index(){}
   
    function sendForm(){
       
       
        $str = $this->params['url']['text1'];
        $result = "";
        if($str != ""){
           
            $result = "you type:".$str;
        }else{
           
            $result = "empty.";
        }
       
        $this->set("result",$result);
    }
   
}
?>

$str = $this->params['url']['text1'];では各種情報を管理するparamsを使っています。

  • controller:コントローラー名
  • action:アクション名
  • named:パラメータ
  • form:POST時のフォームの内容
  • url:GET時のフォームの内容
  • date:ヘルパーに生成された要素

今回は「url」を使ってGETで送信されたフォームの内容を取得しています。



$this->set(“result”,$result);では先ほど取得した変数をビューに渡しています。

セキュリティ

1
2
3
4
5
        App::import('Sanitize');

              ..........................

        $this->set("result",Sanitize::stripAll($result));

CAKEphpのライブラリである。Sanitizeクラスを使います。
今回はstripAllを使いましたが、の他stripScriptやstripImageなどがあります。

Formヘルパーを使う

ここまではビューテンプレートに直接フォームを記述していましたが、Cakephpにはタグを自動生成する「Fromヘルパー」という機能があります。

1
2
3
4
<?php echo $form->create(null,array('type'=>'post','action'=>'.')); ?>
<?php echo $form->text("HelloForm.text1"); ?>
<?php echo $form->submit("送信"); ?>
<?php echo $form->end(); ?>

最初にcreate()、最後にend()をつける。実際の記述は$formで行います。


のようです。

$formの()の中は(名前、属性指定)