データベース
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']からの抽出しています。
ビューは「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で行います。
この本を使って勉強しています。其のメモです。
掌田 津耶乃
秀和システム
売り上げランキング: 12574
「app」内にある「webroot」に保存した者が最初に表示されている。
「app」内の「components」にphpファイルを置く
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?php
class HelloController extends AppController{
public $name='hello';
public $uses = null;
public $autoRender = false;
function index(){
echo "hello hoge hoge";
}
function other(){
echo "これはインデックス以外が表示されています。";
}
}
?> |
- public $name=’hello’;はコントローラーの名前を示しています。
- public $uses = null; はコントローラ内で使用するモデルを示しています。今回はモデルを使ってないのでnullが指定されています。
- public $autoRender = false; はビュー関係のオブジェクトを使って自動的にページをレンダリングする機能の設定を$autoRenderで設定しています。
function index()の所でディフォルトのページの処理を行います。
function other()は ..hello/otherでアクセスできるようになっています。この「other」は一般にアクションと言われています。
ビューを作る
ページの表示はコントローラーではなく、ビューが行うものです。
ビューには「ビューテンプレート」と「レイアウト」の2つが存在します。「レイアウトを用意して、その中にビューテンプレートをはめ込んでいきます」
「app」→「views」に新しくフォルダを作り、テンプレート「index.ctp」を作成する。
1 2 3 4 5 6 7 8 9 10 11 12 13
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>HELLO PAGE </title>
</head>
<body>
<h1>テストページ </h1>
<p>これはテストページです。ビューのテストです。繰り返す。 </p>
</body>
</html> |
「app」内の「components」にphpファイルを書き換える。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?php
class HelloController extends AppController{
public $name='hello';
public $uses = null;
public $autoLayout = false; //trueにすると用意されたlayoutを使ってページをレイアウトします。
public $autoRender = true;
function index(){}
}
?> |
結果

「index.ctp」のなかにphpを書いても実行されます。
レイアウトの作成
public $autoLayout = true;にすると用意されたlayoutを使ってページをレイアウトします。
ディフォルトのレイアウトが表示されます。

ディフォルトレイアウトのファイルはどこにあるかというと「…./cake/libs/view/layouts/default.ctp」にあります。
これまではすべて「app」の中にあったのですが、レイアウトは「cake」の中にあります。
では作成してみましょう。
新規で作ったレイアウトは「app」=> 「view」=>「layout」に保管します。(ディフォルトとは場所が違うので注意)
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 30 31 32 33 34 35 36 37
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php echo $html->charset(); ?>
<title>
<?php echo $title_for_layout; ?>
</title>
<?php
echo $html->css('cake.hello');
echo $scripts_for_layout;
?>
</head>
<body>
<div id="container">
<div id="header"> ** Header**</div>
<div id="content">
<?php echo $content_for_layout; ?>
</div>
<div id="footer"> **this is test** </div>
</body>
</html> |
charset(); ?>はを表示しています。
はコントロールクラス内の$this->pageTitleが表示されます。
echo $html->css(‘cake.hello’);は外部からCSSを指定してます。「webroot」「css」のなかにある。
レイアウトで使用するCSSは「app」「webroot」「css」というフォルダの中に保管します。
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
| @charset "UTF-8";
/* CSS Document */
body{
background:#00ffff;
color:#660000;
margin:0;
}
#header{
font-size:14px;
font-weight:bold;
}
#content{
background:#9F9;
color:#990000;
padding:10px 10px 40px 20px;
}
#footer{
text-align:right;
} |
あとコントローラーも変更
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php
class HelloController extends AppController{
public $name='Hello';
public $uses = null;
public $layout = "hello";
function index(){}
}
?> |
public $layout = “hello”; 「layout」内のhello.ctpをレイアウトで使うとしていしています。

PHPをお盆休みに触ってました。
まずはRSSを取得する際に2つの方法が見つけました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?php
$rssurl = <em >RSSのURL </em >;
$rssdata = simplexml_load_file($rssurl);
$num_of_data = 5;
$outdata = "";
for ($i=0; $i<$num_of_data; $i++){
$outdata .= "<li>";
$outdata .= "<a href=\"";
$outdata .= $rssdata->item[$i]->link;
$outdata .= "\">";
$outdata .= $rssdata->item[$i]->title;
$outdata .= "</a></li>";
}
echo $outdata;
?> |
1 2 3 4 5 6 7 8 9 10 11
| $rss = simplexml_load_file("rssのurl");
foreach ($rss->item as $item) {
$dc = $item->children('http://purl.org/dc/elements/1.1/');
$link = $item->link;
$title = $item->title;
echo "<li><a href=\"$link\" title=\"$title\">$title</a></li>\n";
}
?> |
データベースに連動する際の方法
1 2 3 4 5 6 7 8 9 10 11 12
| $db_handle = new PDO(host,user,Pass);
$sample_sql = 'SELECT * FROM members';
$st_handle = $db_handle->prepare($sample_sql);
$st_handle->execute();
while ($row = $st_handle->fetch(PDO::FETCH_ASSOC)){
echo $row['id'].','.$row['name'].'<br/>';
} |
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| $dBServer = ' ';
$dbUser = ' ';
$dbPass = ' ';
$dbName = ' '';
$flag = TRUE;
if(!$link = mysql_connect($dBServer,$dbUser,$dbPass)){
$flag = FALSE;
}
else if(!mysql_select_db($dbName,$link)){
$flag = FALSE;
}
else if(!mysql_set_charset('utf8',$link)){
$flag = FALSE;
}
if($flag=TRUE){
$sql = sprintf("SELECT * FROM members " );
$query = mysql_query($sql,$link);
while($row1 = mysql_fetch_object($query)){
echo h($row1->id).':'.h($row1->name).'<br/>';
}
}else{
echo 'データベースエラー';
} |
最近PHPを再度やってるんですが、メールフォームの正規表現についてのメモ
_
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| if(isset($_POST['mail'])){
$mail = $_POST['mail'];
$pattan = '/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/';
if(preg_match($pattan,$mail)){
echo '<p>正しいメールアドレスです</p>';
echo h ($mail);
}else{
echo '<p>['.h ($mail).'」は正しい形式ではありません</p>';
}
} |