goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

FuelHPって、なんて読むの?

2014-09-05 09:37:47 | PHP
フューエルPHP
増えるPHP
おばかなPHP(ふーるPHP)
・・・

人気投票によると

http://yomikata.org/word/fuelphp

ふえるわかめ・・・ではなくて、
フューエルなの?


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Amazon マーケットプレイスWebサービスAPIを利用する-道半ばです・・(7月31日追加)

2014-07-28 19:57:30 | PHP

Amazon マーケットプレイスWebサービス
https://developer.amazonservices.jp/

とは(以下太字は上記サイトより引用)

Amazon マーケットプレイスWebサービス(MWS) は、統合WebサービスAPIであり、Amazon の出品者がプログラムを使用して、出品、注文、支払い、レポート、その他についてデータを交換できるよう支援するものです。 XMLデータを 活用し、Amazonとのシステム連携を自動化することができます。MWS を使用することによって、出品者は販売効率の改善や業務コストの削減、顧客サービスの向上を期待することができます。

MWS は、従来のAPI機能よりも幅広い機能を持ち、出品者向けAPIをサポートしています。 MWS を使用することで、Amazon の出品、注文、決済データを既存の業務プロセスに組み込んで、出品者がAmazonにおける出品および販売をシームレスに行うことができます。


上記サイトの右側の「登録する」から登録できる
(ただし、大口出品の出品者だけだったかも?)

以降、そのAPIを使う為の、自分へのメモ。




注文API(PHP)を見る

1.左側のメニューから「API&ドキュメント」の「注文」をクリック。

2.PHPクライアントライブラリをクリック

3.Downloadをクリック→zipファイルがダウンロードできる
Linuxnの場合、そのボタンを右ボタンクリックして「ショートカットのコピー」
Linuxのコマンドのwgetの後にはる。こんなかんじ

wget https://images-na.ssl-images-amazon.com/images/G/01/mwsportal/clientlib/Orders/2013-09-01/MWSOrdersPHPClientLibrary-2013-09-01._V343532670_.zip

4.解凍する
unzip MWSOrdersPHPClientLibrary-2013-09-01._V343532670_.zip

5.srcの下に、MarketplaceWebServiceOrdersのサンプルファイルが入っている。そこで、
srcの下でなく、html直下に置く為に
まず、htmlディレクトリに行く

cd /var/www/html

ディレクトリをsrc/MarketplaceWebServiceOrdersを、/MarketplaceWebServiceOrdersにする

mv src/MarketplaceWebServiceOrders/ ./

MarketplaceWebServiceOrdersっていう名前を変えたいと思うだろうけど、これを変えてしまうと、
サンプルプログラムが動かなくなる可能性がるので注意。




商品APIを使えるようにする為の設定


6.MarketplaceWebServiceOrders/Samplesにいって、
ls -a
する。.config.inc.phpが見えるはず.(-aしないと当然みえない)

7.viで開いて(vi .config.inc.php)以下の値
  define('AWS_ACCESS_KEY_ID', 'ここにアクセスキーをいれる');
  define('AWS_SECRET_ACCESS_KEY', 'ここに秘密のキー');
  define('APPLICATION_NAME', 'アプリケーション名:かってに');
  define('APPLICATION_VERSION', 'かってにバージョン');
  define ('MERCHANT_ID', 'マーチャントID');
  define ('MARKETPLACE_ID', 'マーケットプレースID');
を入れる
かってにと書いたところは、好き勝手にいれてよい。
ほかは、登録時の最後にでてくるはず。

8.たとえば、ListOrdersSample.phpを見る場合、
ListOrdersSample.phpをviで開き、

・$serviceUrlで、マーケットプレースのコメントをはずす。
 たとえば、日本の場合は
$serviceUrl = "https://mws.amazonservices.com/Orders/2013-09-01";
として、これのコメントをはずす。

9.ブラウザからアクセス
http://localhost/MarketplaceWebServiceOrders/Samples/ListOrdersSample.php

localhostは、外から見る場合は、実際のIPに変える。

10.こうやってアクセスすると、以下のエラーが出る

Caught Exception: 1 validation error detected: Value null at 'marketplaceId' failed to satisfy constraint: Member must not be null Response Status Code: 400 Error Code: InvalidParameterValue Error Type: Sender Request ID:

(以下省略)

この理由は、「サンプルには、マーケットプレースIDがセットされてないから」
おいおいおい・・・(^^;)

PHPでAmazonのMWSを使用して,マケプレの出品情報を取得する
http://nanoappli.com/blog/archives/4371

を参考に、

$request->setSellerId(MERCHANT_ID);

の下に、以下の行を追加

$request->setMarketplace(MARKETPLACE_ID);
$start_date = new DateTime('2014-07-22 00:00:00', new DateTimeZone('UTC'));
$request->setCreatedAfter($start_date);

書き方が間違っています。詳しくは、このエントリの最後「7月31日追加」参照

そして、上記9のURLを開いてみる。


・・・まっしろだ・・・
エラーは消えたけど・・・

・・・わからん・・・道半ばです・・・

【参考】

Amazonマーケットプレイス Web サービス (Amazon MWS) ドキュメント
https://developer.amazonservices.jp/gp/mws/docs.html


【7月31日追加】
上記の3行、間違っています。正しくはsetMarketplaceId,
また日付は、テキスト文字列で設定します。
詳しくは

Amazon マーケットプレイスWebサービスAPIを利用する-つづき
http://blog.goo.ne.jp/xmldtp/e/08870e448e36324ba13bb70224aa478f

参照。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Zendがバージョン1と2(zf2)でぜんぜん違い、初期画面を出すにも大変な件

2014-03-27 16:03:07 | PHP
最近、Zendをやっていなかった。
今、Zend Framework2(以下zf2と記述)をやろうとして、バージョン1のときと、
大違いなので、びっくり!

まずは、初期画面を出すまでについて記述


■前提
(1)Apache,PHPは設定されている
   →PHPが\phpにインストールされているものとする
   →ApacheがApache24にインストールされているものとする

(2)Rewrite Modeの設定もされている
httpd.conf
   LoadModule rewrite_module modules/mod_rewrite.so (コメントはずす)

  Directory "c:/Apache24/htdocs"の
     AllowOverride All
     Require all granted
 していること




■Zend Framework 1の場合

(1)まず、Zendのサイトにいく

http://framework.zend.com/downloads/latest


(2)Zend Framework 1のフルパッケージをダウンロード、解凍する

(3)解凍したところのbinにいき、zfコマンドでプロジェクト作成。
  *今回は、作成するプロジェクトをzf1とする
  その場合、以下のコマンドを入力する。
\php\php.exe zf.php create project zf1

(4)zf.phpがあるフォルダにzf1ができている。
   これを、apacheの、htdocsの下におく
  →\Apache24\htdocs\zf1ができる

(5)上記(2)でダウンロード/解凍したZend Framework 1の
 libraryの下にあるZendを、(4)のzf1の下のlibraryへコピー
  →\Apache24\htdocs\zf1\library\zendができる

(6)ブラウザで
http://localhost/zf1/public/
をアクセス

がみえればOK




■Zend Framework2になってびっくり!なところ

・ダウンロードすると、binの下に、zf.phpがない!
  →どうするんだろう・・・


【日本語版】ZendFramework2(ZF2)チュートリアル
http://web-terminal.blogspot.jp/2013/02/zendframework2zf2.html

にサンプルアプリのありか、修正方法があるようです。




■Zend Framework2で初期画面作成
(これでもできる、という方法で、これがいいというわけではない)

(1)まず、Zendのサイトにいく

http://framework.zend.com/downloads/latest


(2)Zend Framework2のフルパッケージをダウンロード、解凍する

(3)サンプルコード

zendframework / ZendSkeletonApplication
https://github.com/zendframework/ZendSkeletonApplication

にいって、右下の「Download ZIP」をクリックし、ダウンロード、解凍する

(4)上記(3)で解凍した、ZendSkeletonApplication-master
 (その下に、config,data・・・などあるフォルダ)を、zf2と名前を変え、
 htdocsの下に(zf2として)コピーする

(5)上記zf2に、libraryというフォルダを作成し、
 (上記イメージにはあたかもそんなフォルダーがあるように見えるが、
  じつは作成しないと、ない)
 その下に、(2)でダウンロードしてきた、libraryの下のZend.ZendXml
 をコピー

(6)publicのindex.phpに、パスを設定する。
【日本語版】ZendFramework2(ZF2)チュートリアルを参考に追加

注意:パスの指定など、青い線の部分を上記サイトとは違う修正をしているので注意

(7)ブラウザで
http://localhost/zf2/public/
をアクセス

がみえればOK




本当は、Composerを使ってやるらしい・・・
・・・が、めんどくさいので省略。

まちがって、ZF Serverを入れたら、ZFも入ってきたような気がしたが
気のせいか?

<<自分へのメモ>>

あとでみる

Zend Framework2について〜ZF1とZF2の違いについて〜
http://www.slideshare.net/nully/zend-framework2zf1zf2


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Zendを久々にやって、はまりまくったことのメモ(.htaccessが利いていない編ほか)

2014-03-21 10:00:36 | PHP
あ~、こんなに大変だったっけ?




■Zendライブラリの置き場編

【現象】
 Zendライブラリが見れない

【対策】
phpフォルダの下にpearフォルダをつくり、そこにダウンロードしてきたlibraryの下のZendを置く
phpフォルダをc:\phpとすると、
C:\php\pear\Zendの下に、いろんなファイルがあることになる。




■.htaccessが利いていない編

【現象1】どう考えても.htaccessが利いていないように見える。
今、

PHPのZend FrameworkをEclipseで使う その2:Eclipseからzend
http://blog.goo.ne.jp/xmldtp/e/c047d20f5bdeb80f81e5c7f76c866cb6

に書いたように、HelloZend直下に、.htaccessというファイルを、そこに書いてある
内容どおりに作っても、コントローラーのところが、呼び出せない
たとえば、
http://localhost/HelloZend/Index/hello
とやっても、IndexController.phpに書かれた、helloActionは呼び出されず、
404エラーになる。

【対策1】
・httpd.confの設定らしい

1.Apacheのフォルダの下のconf\http.confを開いて、
Directory "c:/Apache24/htdocs タグ内の
  AllowOverride All
(数行先)
  Require all granted

Files ".ht*"タグ内の
  Require all granted

にする

【参考文献】
[1]Zendでコントローラが呼ばれずに、404が返ってくる
http://shinya-blog.blogspot.jp/2011/07/zend404.html


[2]Apache trunk(2.3) での認証制御の変更
http://d.hatena.ne.jp/tagomoris/20070709/1183969232


【現象2】
 上記「対策1」を行って、再起動、実行すると、今度は、500内部サーバーエラーになる。
 ログを見ろろいうことなので、ログ(apacheのフォルダ\log\error.log)を見ると

C:/Apache24/htdocs/HelloZend/.htaccess: Invalid command 'RewriteBase', perhaps misspelled or defined by a module not included in the server configuration

となっている。

【対策2】

 mod_rewriteモジュールが動いていない。

2.Apacheのフォルダの下のconf\http.confを開いて、

#LoadModule rewrite_module modules/mod_rewrite.so   

の行のコメントをはずして

LoadModule rewrite_module modules/mod_rewrite.so

にする。

【結果】

動きました。

【参考文献】
[3].htaccess: Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration
http://stackoverflow.com/questions/10144634/htaccess-invalid-command-rewriteengine-perhaps-misspelled-or-defined-by-a-m



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

インストール、MySQLで止まることより、Win7のコントロールパネルの管理ツールの場所が問題

2014-03-20 10:04:18 | PHP
ZendServeをインストールしていると、

なかんじでインストール進行状況が見えるんだけど、
突如、MySQLのインストールか、確認(コンフィグ)だったかで、
とまった。

理由はすぐに思いついた。
すでにMySQLが入っているので、ポートがかち合っているんだなと・・・
なので、今のMySQLのポートをとめないといけない。

あれって、管理ツールだけど、最近XPからWindows7に移行して・・・

どこにあるかわからない!!

ここに、書いてありました。

Windows7でサービス一覧を表示する方法
http://www.adminweb.jp/windows7/service/index1.html


アクセサリか、コントロールパネルだろうと思ってたけど、
コントロールパネルまではあたった。でも・・・

・・・わからん・・・
右上のカテゴリ(赤丸で囲んだ)を、「小さいアイコン」にすると

あったあった。だぶるくりっく

出てきたダイアログで「サービス」をダブルクリック

MySQLが2つあり、一方はZendなんとかかんとかになっているはず。
青い囲みのところ
 ・Zendでないほう(元からあるほう)のサービスの停止をクリック
 ・その後、Zendのほうを、サービス起動
すると、先に進む。

※最近話題なので念のため、
 最後のイメージは、インストール後にとったため、インストール時の状況とは異なっています。
 上記説明に基づいて、クリックしてください。
 なお、切り貼りは行っていないし、博士論文、その他論文にこのイメージを使う予定もありません。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MySQL5.6のよくなったところ、PHPではまったところ

2014-03-11 14:54:07 | PHP
MySQL5.6(Windows用)をインストールして、以前のものと違っていたので、
ちょっと書いておく。

ちなみに、ダウンロードURLは、
http://dev.mysql.com/downloads/mysql/

【相違点1】ダウンロードできるものがちがう
 いままでは本体のみで、MySQLWorkbench(GUIを使って操作できる)や接続コネクタ
 は別々のダウンロードだったが、今度は一括ダウンロード

【相違点2】ダウンロード時、Oracle Web アカウントでログインしろといわれる
 下に小さく、No Thaanks,just start my downloadとあるほうをクリックすればOK

【相違点3】インストーラーが相当違う
 あ~、かなり違う印象。悩みはしない

【相違点4】サンプルがある
 worldデータベースにcityなどのデータが入っている

【相違点5】終了後、MySQL Workbenchを立ち上げられる
 そこからはいって、サンプルがあるのですぐにSQLを確認できる。




 それと、PHPでMySQLを接続しようと思ってはまったのでメモメモ。

【はまったところ】基本的には、php.iniで

;extension=php_mysqli.dll

のコメントをはずし

extension=php_mysqli.dll

にすればよいのだが、その後、これ、むかしやったっけ?
extにあるphp_mysqli.dllを、ひとつ上の(php.iniがあるフォルダと同じ)フォルダにコピーする

でないと、php_mysqli.dllが見えないので、

httpd.exeを立ち上げたときphp startup というワーニングがでて、
mysqli_connectをやろうとしても、Syntax errorとかわからないのでエラーとなり
php_info()でmysqliが見えない。

これに気づかず、はまってしまった・・・


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Apache2.4+PHP5で、”はまる”ところ

2014-03-10 13:49:44 | PHP
なんか、難しいことになっている。

【簡単にいく場合の成功例】

Apache2.4+PHP5.4 (Windows)
http://www.okomeda.net/?Apache2.4%2BPHP5.4%20(Windows)


■失敗例1:Apacheのダウンロード

http://httpd.apache.org/download.cgi

にいくと、結局2.2までしか、Windows用のバイナリがない

■失敗例2:Apache Loungeにいくと・・・
2.4は、Apache Loungeにあるのだが、まちがってトップページ
(あえてURLは書かない)にいき、Downloadボタンをクリック
しようと思うと・・・
・・・違うソフト??

ただしくは

ache 2.4 VC11 Binaries and Modules Win32 and Win64
http://www.apachelounge.com/download/

にいく

■失敗例3:php5apache2_4.dllがない(>_<!)
Non Thread Safe をダウンロードしてしまっている。
Thread Safeをダウンロードする

■失敗例4:php.ini
php.ini-developmentとphp.ini-productionが入っているので、どちらかをコピーし
php.iniとする

■失敗例5:なぜかphp5apache2_4.dllでSystax error
シンタックスエラーではなく、読み込めないという意味。
64ビット版の場合、下のVC11 x64 Thread Safeを使うみたい。

う~ん、トラップ多すぎ!

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPは、一番遅い言語ってことで、おK?

2013-12-05 14:26:51 | PHP

新人女子プログラマの書いたコードを直すだけの簡単なお仕事です!
https://paiza.jp/poh/ec-campaign/

を見ると、おおむねPHPは、他の言語とくらべ、遅いよね。
PHPは、一番遅い言語ってことで、おK?

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPで、SimpleXMLを使ったXMLデータの操作

2013-05-10 15:46:25 | PHP
■御題

以下のXMLファイルpersons.xmlがある

これを
1.インドのマンモハン・シン首相を追加
2.中国のNameを習から馬に
3.韓国を削除
して、newpersons.xmlして、画面表示する
すなわち、画面表示結果は、以下のとおり

■ソースコード
<?php

$xml =simplexml_load_file('persons.xml');

// インドを追加
$node = $xml->addChild("person");
$node->addChild("Name","マンモハン・シン");
$node->addChild("From","インド");
$node['id']="010";

// 中国の名前を習から馬に
for($i=0;$i < count($xml->person); $i++)
{
	if ( $xml->person[$i]->From == "中国")
	{
		$xml->person[$i]->Name="馬";
	}
}

// 韓国を削除
for($i=0;$i < count($xml->person); $i++)
{
	if ( $xml->person[$i]->From == "韓国")
	{
		unset($xml->person[$i]);
	}
}

//ファイル書き出し
$fp = fopen("C:\xampp\htdocs\newperson.xml", "w");
fwrite($fp,$xml->asXML());
fclose($fp);

// 画面に出力
echo $xml->asXML();


?>



※政治的意図は、ないです。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

進捗率を計算する際の主義主張(SQLとPHP)

2013-04-03 12:21:06 | PHP
SQLで何でもやる派と、
DBは、できるだけ簡単に取ってきて、プログラムでがんばる派
と2通りがある。どちらも主義主張がある。

といっても、良くわからないと思うので、実例で説明する。




■進捗の例:御題

以下のテーブルがある

つまり、shinchokuというテーブルがあり、カラムはid,group_id,doneよりなる。
このうち、doneが1のものは手続き済み、0のものは手続きしていないとしたとき、
各グループで、手続き完了している人の割合(doneが1の人/グループ全体の人)
を求めたい。

という御題。ま、同じようなことで進捗率なども見れる。




■SQLで何でもやる

基本的に、このようなものは、数を求めたいのでcountを使う。
countは列名を指定した場合、NULLは数えない。そこで

shinchokuテーブルをAという名前にして、Aテーブルには全部を出す
shinchokuテーブルをBという名前にして、Bテーブルには手続き完了の人を出す。

これを、Aテーブルに対してLEFT JOIN Bテーブル
(a.id=bidとする)すると・・・
上記の例だと、こんなかんじになる。

Bテーブルには、手続きが終わっていない人(done=0)は含まれないので、
AテーブルとLEFT JOINすると、そのような人のBテーブルの
内容はNULLになる。

そこで、
  AテーブルのIDを数えると(count)すると、全部
  BテーブルのIDを数えると(count)すると、手続き完了の人

となる。あとは、グループごとに集計すればいい

結果として、以下のSQL
SELECT A.group_id,count(B.id).conut(A.id)
  FROM shinchoku AS A
  LEFT JOIN shinchoku AS B ON A.id=B.id AND B.done=1
  GROUP BY A.group_id

となる。実行するとこんなかんじ




■プログラムでがんばる

SQLで全データをとってきて、総数と手続き完了の人の配列を求め
レコードごとに、
  総数の配列の該当グループに1を足す
完了のレコードが出てきたら
  完了の配列の該当グループに1を足す

そうすると、各グループごとに総数と手続き完了の人の数が、配列に入ってくる
んで、それを表示

PHPだと、こんなかんじ。なお、ユーザー名はroot,パスワードはなく
データベース名はtestである。


<?php
$host = "localhost";
$user = "root";
$database = "test";

//==============================//
// データベース接続 //
//==============================//
$con = mysql_connect($host, $user)
or die("データベースとの接続に失敗しました");
mysql_select_db($database)
or die("データベースの選択に失敗しました");

mysql_query("SET NAMES utf8");


//==============================//
// データ読み込み //
//==============================//
$query = "select * from shinchoku";
$result = mysql_query($query);
mysql_close($con);


//==============================//
// 集計 //
//==============================//
$sosu = array();
$done = array();

while ($row = mysql_fetch_assoc($result))
{
// グループが始めて出てきたとき
$group_id = $row['group_id'];
if ( isset($sosu[$group_id]) == false )
{
$sosu[$group_id] = 0;
$done[$group_id] = 0;
}

// 全体数の集計
$sosu[$group_id]++;

// 終わった人の集計
if ($row['done'] == 1 )
{
$done[$group_id]++;
}
}

//==============================//
// 表示 //
//==============================//
foreach ($sosu as $key => $value)
{
print($key . ":" . $done[$key] . "," . $value ."<BR/>");
}

?>






■違いは・・・

いろんな主義主張はあるだろう。
ここでは議論しない。

しかし、向き不向きがあって、
はじめのSQLでがんばる派は、JOINが遅いと、厳しくなってくる。
5個か6個のテーブルをJOINすると、結構大変になってくるんじゃないかな・・

後者は、その点SQLは、単純なんだけど、プログラムが長くなり、
大変そうに「見える」(実は中身は簡単なんだけど)

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHP、5.3 系のサポート終了が迫るも移行進まず

2013-03-29 09:48:40 | PHP
ってかさあ、この前、5.2から、5.3に上げましょうとか、
いってなかったっけ?
今度は、5.4なの・・・


PHP、5.3 系のサポート終了が迫るも移行進まず
http://developers.slashdot.jp/story/13/03/26/0247229/


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

CakePHPの1.X系と、2.X系で何が違うのか-その4

2013-03-28 14:43:11 | PHP
PHPの1.X系と、2.X系で何が違うのか
同じものを作って比較してみる。

前回モデルを使って、1.X系でのお話をしたので、
今回はモデルを使って、2.X系でのお話をする




■御題

CakePHPの1.X系と、2.X系で何が違うのか-その3
http://blog.goo.ne.jp/xmldtp/e/7cb8c389e19edc5e694cf720abf4580b

と同じ御題。




■追加・修正部分

ファイル構造は、

その1
http://blog.goo.ne.jp/xmldtp/e/493d369c8d635b3a269d4e02dcc7ae95

の2.XにModelが加わったかんじ。つまり、こんな感じ

app
 |
 |-Controller
 | |
 | *-MyTestController.php
 |
 |-Model
 | |
 | *-User.php
 |
 *-View
   |
   *-MyTest
      |
      |-hello.ctp
      |
      *-index.ctp

(赤字が追加修正箇所)
Modelが追加され、コントローラーが修正される




■追加部分に関して

 追加するUser.phpの中身は、1.Xのときと一緒。
 つまり、その3のuser.phpのファイルの中身と、まったく同じでよい。




■修正部分に関して
 修正するMyTestController.phpは、はじめの引数を渡す部分だけは違うが(これは、その1のときに書いた)、あとは基本的にその3のuser.phpのファイルの中身と、同じでよい。以下のような感じ。

<?php
class MyTestController extends AppController {
	public $uses = 'User'; 

	public function index() {

	}

	public function hello() {
		$yourname =$this->data['yourname'];

		//	DBアクセスして値取得
		$condition = array("user_name" => $yourname);
		$records = $this->User->find("first",array("conditions" => $condition));
		if ( count($records['User']) > 0 )
		{
			$kaisu = $records['User']['kaisu'] + 1;

			//	DBアクセスして更新
			$data['User'] = array('id' => $records['User']['id'], 'kaisu' => $kaisu);
			$fields = array('kaisu');
			$this->User->save($data, false, $fields);
		}
		else
		{
			$kaisu = 1;

			//	DBアクセスして追加
			$data['User'] = array('user_name' => $yourname, 'kaisu' => 1);
			$this->User->save($data);
		}

		//	Viewに設定
		$this->set('yourname',$yourname);
		$this->set('kaisu',$kaisu);
	}
}


なかんじかな・・・

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

CakePHPの1.X系と、2.X系で何が違うのか-その3

2013-03-27 16:09:49 | PHP
PHPの1.X系と、2.X系で何が違うのか
同じものを作って比較してみる。

前回までで、1.Xと2.Xで、モデルを使わない形での話だったので、
今回は、モデルを使って、1.X系でのお話をする




■お題


その1
http://blog.goo.ne.jp/xmldtp/e/493d369c8d635b3a269d4e02dcc7ae95

と同じお題なのだが、
RDBのMySQL内(データベース名test)に、
usersというテーブルがあって、
こんな感じ

で、項目(id,user_name,kaisuの3項目)とデータが入っている。
これを検索し、
  入力された名前がDBのuser_nameと一致したら、
    そのデータのkaisuに1を足して表示
  入力された名前がDBのuser_nameになかったら
    1回目と表示して
 データをDBに保存する。




■追加・修正部分

今回は、モデル部分を追加する(基本的にcakePHPの命名規約[2]に準拠)。
また、コントローラー部分(my_test_controller.php)を修正することになる。
とくに、コントローラー名とモデル名が違うケースとなる。

ファイル構造は、以下のとおり
app
 |
 |-controllers
 | |
 | *-my_test_controller.php
 |
 |-models
 | |
 | *-user.php
 |
 *- views
    |
    *-my_test
        |
        |-hello.ctp
        |
        *-index.ctp

赤字が変更・追加部分



■追加・修正ファイル

変更・追加したファイル(上記の赤字)のみ掲載する。変わらないViewについては、
その1を参照

●コントローラー部分の修正my_test_controller.php
<?php
class MyTestController extends AppController {

	var $name = 'MyTest';
	public $uses = 'User'; 

	public function index() {
	}

	public function hello() {
		//	画面引数の取得
		$yourname =$this->params['form']['yourname'];

		//	DBアクセスして値取得
		$condition = array("user_name" => $yourname);
		$records = $this->User->find("first",array("conditions" => $condition));
		if ( count($records['User']) > 0 )
		{
			$kaisu = $records['User']['kaisu'] + 1;

			//	DBアクセスして更新
			$data['User'] = array('id' => $records['User']['id'], 'kaisu' => $kaisu);
			$fields = array('kaisu');
			$this->User->save($data, false, $fields);
		}
		else
		{
			$kaisu = 1;

			//	DBアクセスして追加
			$data['User'] = array('user_name' => $yourname, 'kaisu' => 1);
			$this->User->save($data);
		}

		//	Viewに設定
		$this->set('yourname',$yourname);
		$this->set('kaisu',$kaisu);

	}
}



●モデル部分の追加user.php

<?php
class User extends AppModel{

var $name = 'User';

}



参考文献[1][3]を参考に作成




■参考文献

[1]CakePHPのModelを使う データベース関連処理をシンプルに解決
http://puyo2.upper.jp/cake/files/cakephp4.pdf

[2]cakePHP クラス名、モデル名の命名ルール
http://www.wakatta-blog.com/cakephp_2.html

[3]CakePHPのfind, findAll, findCount, delete, deleteAll
http://techracho.bpsinc.jp/piichan1031/2009_01_21/132

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ページ表示をするWebサイトを作る場合のセッションのやりかた

2013-03-26 12:48:06 | PHP
ソフトウェア工学が最近話題だからと思って書いたら、
やっぱりね~さんざんな結果ですよ。「アクセス状況」の「訪問者数」
やっぱり、今は、SDNとかビッグデータだよね。

ってことで、ネット系の話題をちょっと。
PHPなどで、一覧表示をするときがある。
それも、2ページ、3ページとまたがるような場合。

このやりかた、ちょっとした工夫をするのとしないので、
大変さが違うんだけど、それについて
ちょっと説明する機会があったので、まとめてみる。




■ページングの方法には、2とおりある。

このような2ページ目、3ページ目の表示には、2とおりある。

・方法1
 検索した結果を全部セッションに入れてしまって、
 ページ指定されたら、セッションの内容をもとに
 2ページ目、3ページ目と表示する

・方法2
 セッションにはページ数と1ページあたりの行数だけをもっておく。
 ページ指定されたら、SQL側で、そのページの行のものだけ
 検索して取ってくる

 たとえば、1ページあたり50行で、2ページ目を表示させるとき、
 1ページで1~50表示しているので、
 表示させたい2ページ目の範囲は、51~100行目となる
 そのとき、MySQLだと LIMIT条項で、LIMIT 50,50と
 送ると、50の次の51行目から50行分表示してくれる


方法1はデータが少ないときや更新されても検索時の内容を表示したいとき
方法2はデータが多いとき、または更新追加削除された場合、最新の内容を表示したいとき

に使う。




■検索タイミングも大きく2とおり

そして、検索するタイミングも2とおりある

・タイミング1
 ボタンがおされたときに入るActionで検索する
 (CakePHPの場合、各ボタンクリックに対応するActionを
  つくり、その中で検索する)
 この場合、Actionごとに検索箇所が散らばる

・タイミング2
 画面表示するときに入るAction(初期画面表示)で検索する
 (CakePHPの場合、各ボタンクリックに対応するActionでは
  検索条件などをセッションにいれて、初期表示画面にフォワードするか
  そもそも各ボタンをクリックされたら、次画面の画面表示Actionにいく)
 この場合、検索箇所は、画面表示するAction1箇所になる。




■画面表示を1箇所にまとめ、方法1・2を実現する

 さて、画面表示を1箇所にまとめ、方法1・2どちらでもOKにするには
 以下のように行う。

・画面表示をする直前に入る、「サーバ側モジュール」において
  引数で検索条件が指定されたら、それをセッションにいれる
    →このとき、ページ指定も引数で渡す
     ページ指定がない場合は、先頭から

・方法1の場合(セッションに入れる場合)
  セッションにデータがなかったら
       →データ全体を検索し、結果をセッションに
  セッションにデータがあり
    ページ指定以外の検索条件が変わっていたら
       →データ全体を検索し、結果をセッションに
    ページ指定以外変更ない、または変更がない場合
       →検索しない(なにもしない)
  セッションデータの有無にかかわらず、ページ指定とページ行数から
   開始行数=(ページ指定番号ー1)*ページ行数+1
   終了行数=ページ指定番号*ページ行数
  をセットする

・方法2の場合(セッションにデータをいれないので常に)
  データをLimitを使って、
   Limitの開始=(ページ指定番号ー1)*ページ行数+1
   Limitの終了=ページ指定番号*ページ行数
  をセットして検索する
  ページ指定とページ行数から
   開始行数=0
   終了行数=検索した行数
  をセットする

・方法1の場合、セッションのデータを、
 方法2の場合、検索したデータを
  開始行数から、終了行数まで
  画面(View)の変数に渡す




方法1で、最新の状態にしたい場合は、フラグを使って、
そのフラグが立っていたら、セッションを空にしたりして、実現する

なお、Strutsでこれをやろうとすると、
resetにこれを書くことになってしまうが、
resetで、大きい処理をやることは、確か禁止されていた気がした・・違うかな?
ので、まあ、これは、PHP用ってことでしょうかね・・

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

CakePHPの1.X系と、2.X系で何が違うのか-その2

2013-03-22 16:32:54 | PHP
PHPの1.X系と、2.X系で何が違うのか
同じものを作って比較してみる。

前回、1.Xと2.Xで、モデルを使わない形で作ったので、
今回は、その違いを比較してみる。




■違い

・ファイルの命名規約などが違う
  1.X系のフォルダ名 → 2.X系のフォルダ名
  controllers、views → Controller,View

・クラス名_でつなげる形からキャメルケース
  my_test_controller.php→MyTestController.php
  (フォルダ名)my_test→MyTest
   →結果として2.Xでは、ファイル名とクラス名の対応は取れている。

・コントローラーで、モデルを使わないとき
  public $uses = null;
 と書かなくてもOK

・DBをつかわないならapp¥config¥database.phpがなくても(書き直さなくても)
 とりあえず2.Xは動く

・これは、こちらのやり方がわるかったのかもしれないけど、
 POSTで値をとる場合
   1.Xは
      $yourname =$this->params['form']['yourname'];
   2.Xは
      $yourname =$this->data['yourname'];

■2.Xでいいこと

 エラーになると、次に何をすればいいか、出してくれる。
 たとえば、以下のように

 書くべきファイルとその内容を示してくれるので、
 ガイダンスどおりやればOK

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする