トップページ⇒php
1001コメント316KB

【PHP】フレームワーク CakePHP 6ホール目【v1.2】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/03/09(月) 10:55:37ID:3PTy4GqZ
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです。

※sage推奨
※日本語マニュアルURLを貼るときは、http://book.cakephp.org/ja/view/1/ のようにしましょう(末尾のエンコードされたタイトル部分は不要)

■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf

■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
0075732009/03/20(金) 18:28:42ID:???
>>74
すべてのPostの一覧ならばそうするのですが、
「あるUserが投稿したPostの一覧」の場合にどうしようかと思いまして・・・
0076nobodyさん2009/03/20(金) 19:22:42ID:???
>>75
どんなURL(controllerとactionと引数)になるかを考えてみよう
/posts/index/user_name or /posts/list/user_name
/users/posts_list
のどちらかになる
postの一覧から特定のユーザーのpostを表示するのならPostsControllerで
ログインしたユーザーが自分のpostを一覧するとかなら、後者でもよいと思う
0077762009/03/20(金) 19:28:07ID:???
当然、後者のパターンも
/posts/mylist
でPostsControllerで実装してもよい
0078nobodyさん2009/03/20(金) 19:29:15ID:???
これで作ったものって
画像のプロテクトできる?
0079nobodyさん2009/03/21(土) 02:25:58ID:???
>>78
そもそも画像のプロテクトってどんなのを想定してるの?
0080nobodyさん2009/03/21(土) 03:48:06ID:???
>>71
そんな事はチラシの裏にでも書いとけ
0081nobodyさん2009/03/21(土) 05:52:16ID:???
>>71
お前に言われなくても、そんなこたー皆んな知ってる
CakePHPのマルチバイトをお前が整備したらほめてやる
0082nobodyさん2009/03/21(土) 11:34:24ID:7xjpEJ1g
人の作ったDBをCakeで焼きなおしているのですが、Postgre7.4です。
ContactテーブルとAddressテーブルがあり、ひとつのContactは2つAddressを
もてるような設計です。ContactテーブルがAddressのキーを2つ持ってる感じです。

ContactモデルでbelongToで、Address1、Address2にそれぞれのforeign_keyで
つないでいる感じなのです。

saveAllを使ってAddress1,2もContactも全部保存しようとしているのですが、
編集時、Address1,2のUpdateはできるのですが、ContactのUpdate時に
それぞれの外部キーが空のSQLが実行され、エラーとなります。

saveAllの前に渡す配列に直接外部キーを別途取得して書き込んでも、無理です。

バグなのでしょうか?1.2の最新版なのですが。


0083nobodyさん2009/03/21(土) 12:43:40ID:???
>>82
まずコード晒してみたら?
0084nobodyさん2009/03/21(土) 15:08:18ID:???
>>78
画像のプロテクトの意味がよくわからないけど printscreenで取られないようにってこと?
それだったらどうやっても無駄だよ。

最終手段はデジカメ撮影でパクられるから。
0085nobodyさん2009/03/21(土) 15:50:04ID:???
>>84
もしデジカメでしか出来なくしたら十分効果あるだろ
何この頭悪い発言
0086nobodyさん2009/03/21(土) 16:12:37ID:???
プリントスクリーンまで禁止にするって事は
OSの機能いじるって事だがな
そこまでやるのかって話だろ
0087nobodyさん2009/03/21(土) 16:34:08ID:???
>>86
「デジカメで取られるから何しても無駄」って風に書いてあるだろ
文章がおかしいんだよ
0088nobodyさん2009/03/22(日) 22:51:16ID:???
betaまでしか対応していないのが分かってたけど「CakePHP ポケットリファレンス」を買ってしまった。
結構知らないメソッドとかあるんだなぁ。

早く1.2正式版対応のを出してくれ!
0089nobodyさん2009/03/24(火) 10:19:40ID:VfITkfEn
Zendにしようかコッチにしようか悩んでます
皆さんはどのへんにメリット感じてこちらを選んだんですか?
0090nobodyさん2009/03/24(火) 10:48:10ID:???
Qdmailコンポーネントをつかって、SimpleReplace的な事をするにはどうパラメータをわたせばいいの?
0091nobodyさん2009/03/25(水) 00:05:18ID:???
>>90
これ読んで出来ないならしらね
ttp://hal456.net/qdmail/simple_replace
0092nobodyさん2009/03/25(水) 11:45:22ID:???
CakePHPによる実践Webアプリケーション開発 (単行本(ソフトカバー))
安藤 祐介 (著), 岸田 健一郎 (著), 新原 雅司 (著)
http://www.amazon.co.jp/dp/4839930651/
発売日: 2009/4/8
0093nobodyさん2009/03/25(水) 11:47:53ID:???
>>92
■目次
Chapter 1WebアプリケーションフレームワークCakePHP
1-1 CakePHPについて
1-2 CakePHPのダウンロード
1-3 CakePHP 1.1と1.2の違い
1-4 基本的な仕組み

Chapter 2アプリケーションを作り込んでいく
2-1 グループウェアをつくる
2-2 予定表
2-3 ユーザ管理
2-4 関連を作る
2-5 ACLを使ったアクセス制御
2-6 見た目を調整する

Chapter 3テストコードを記述する
3-1 テスティングフレームワークを利用する
3-2 モデルのテスト
3-3 コントローラのテスト
3-4 コンポーネントのテスト
3-5 ヘルパーのテスト

Chapter 4機能を拡張する
4-1 アラートメール
4-2 携帯電話の対応
4-3 CSVでの出力
0094nobodyさん2009/03/25(水) 14:54:45ID:???
国際化したとして、登録された時間が全部タイムゾーンでずれる訳ですけど、どのようにしてます?
0095nobodyさん2009/03/25(水) 17:29:44ID:???
modelでバリデーションを定義して、controllerでvalidate()実行すると、
バリデーションが正常に機能していることが確認できるところまでできました。
しかしview側にエラーメッセージが表示されません。

ぐぐったら $form->error('Model.field') を使う、とありましたが、表示されません。
$form->input() のoption配列のerrorも指定していません(のでエラー出るはずですよね?)

validate()を実行するだけではエラーメッセージをビュー側で使えないのでしょうか?
0096nobodyさん2009/03/25(水) 17:55:32ID:???
>>95
Model::validateにmessageは指定されている?
0097nobodyさん2009/03/25(水) 18:00:52ID:???
>>96
はい、指定されています。
controller内でmodel::validationErrorsを出力してみると、
エラーメッセージがセットされていることも確認済みです。

CORE/cake/lib/view/helper/form.php の error()を見ると、
if ($error = $this->tagIsInvalid()) {
とあるのですが、ここが毎回falseになってるようです。
モデル、フィールド名を引数に取るメソッドらしく、
デフォルト引数がnullなので取れてない??
うーん・・・なぞだらけです
0098nobodyさん2009/03/25(水) 18:11:42ID:???
原因がわかりました。
バリデーションで引っかかった場合にredirectしていたため、そこで初期化されてたようです。

ということは、ログインのメソッドをmember_controllerに実装した場合、
ログインフォームのビューはview/members/以下におかないとダメなのでしょうか?
複数ページにログインフォームを置きたいのです。。。
0099nobodyさん2009/03/25(水) 18:33:20ID:???
>>98
つエレメント
0100nobodyさん2009/03/26(木) 10:37:51ID:???
なんでコミュニティの人って気難し屋の変な人ばっかりなの?
0101nobodyさん2009/03/26(木) 10:54:26ID:???
コミュニティってどこの?
0102nobodyさん2009/03/26(木) 15:18:49ID:???
プログラマ特に職業にしてる人なんて、そんなもんだろ。
まぁ、「ばっかり」っていうのは単なる主観だと思うが。
さらに文章だけでドンだけ分かるのかと・・。
0103nobodyさん2009/03/26(木) 22:37:43ID:???
なんかやってるよ?
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1820&forum=16&post_id=4394#forumpost4394
0104nobodyさん2009/03/27(金) 12:25:18ID:???
paginateでアソシエーション先のデータもとってくるときの話だけど。

アクションごとに取ってきたい条件や、フィールドが違う場合どうするのが賢いの?

バインドしまくるのもなんか変な気がするし。

モデル作りまくればいいのかね
0105nobodyさん2009/03/27(金) 17:23:07ID:???
>>104
BIND
UNBIND
じゃないの?

モデルでもうちょっとスマートにBINDするとか
0106nobodyさん2009/03/28(土) 11:56:46ID:???
すみませんが、質問です。他スレで質問したのですが、レスがなかったので...。

【Apache】mod_rewriteについて語るスレ
http://pc11.2ch.net/test/read.cgi/php/1023791370/373

あるアプリケーションで、フロントコントローラであるindex.phpを、一般画面
用と管理画面用との2つ用意したいのです。アプリケーションも独立させます。

www(ドキュメントルート)
|
+ index.php(1. 一般画面用)
|
+ admin
     |
     + index.php(2. 管理画面用)

そして、http://ドメイン名/admin/... となったリクエストだけ、2.の管理画
面用index.phpに渡すようにしたいのです。

http://ドメイン名/hoge → index.php?hoge (1.の一般画面用)
http://ドメイン名/hoge/fuga → index.php?hoge/fuga (1. の一般画面用)
http://ドメイン名/admin/hoge → index.php?hoge (2. の管理画面用)
http://ドメイン名/admin/hoge/fuga → index.php?hoge/fuga (2. の管理画面用)

このような設定を、.htaccessなどで指定することはできるでしょうか?

--

要するに、admin routing を使いたくないのです。管理画面と一般画面とで
バリデーションを変えるために、モデルを独立させたいのが主な理由です。
0107nobodyさん2009/03/28(土) 19:21:55ID:???
>>106
rewriteruleじゃ駄目なの?
0108nobodyさん2009/03/29(日) 18:39:50ID:???
同じテーブルへ外部キー2つ張りたい場合のCakeの命名規約ってどうなってるの?
調べても出てこなかった
0109nobodyさん2009/03/29(日) 22:30:44ID:???
外部キーは一つでも二つでも百個でも同じだと思うが
0110nobodyさん2009/03/29(日) 23:11:16ID:???
フィールド名どうするのって話
0111nobodyさん2009/03/30(月) 01:25:18ID:???
>>110
>>109
0112nobodyさん2009/03/30(月) 01:28:40ID:???
フィールド名声源されてるのってidと時間だけだろ
0113nobodyさん2009/03/30(月) 01:55:47ID:???
え、時間も?
意識したことなかったけど、
どういう時に制限されるんですか?
0114nobodyさん2009/03/30(月) 02:46:48ID:???
作成日時はcreated
更新日時はmodified

別に規約無視して自分で手動で突っ込んでもいいけど
0115nobodyさん2009/03/30(月) 06:28:38ID:???
titleとnameもあるよ
0116nobodyさん2009/03/30(月) 11:12:14ID:???
>>112
だからid二つ作りたい時にどうするの?って聞いてるんだけど
user_idを二つ置くわけにはいかないでしょ?
外部キーって普通他テーブルのidにしか張らないよね
0117nobodyさん2009/03/30(月) 11:13:32ID:???
AテーブルにBテーブルのb_idと言うフィールドを2つ置けないでしょ?って話
0118nobodyさん2009/03/30(月) 11:30:06ID:???
だからフィールド名はなんでもいい。って皆さん教えてくれてるじゃん。
0119nobodyさん2009/03/30(月) 12:01:42ID:???
とりあえずRDBMSのリレーションとは何なのかと、そのリレーションのやり方を勉強してから噛みついて欲しい
0120nobodyさん2009/03/30(月) 12:47:34ID:???
>>116

associationを自分で書いて、foreignKeyに好きなfield's nameヲ設定シロ。
∴ foreign keyの命名ruleは、実質存在しない。

命名rule気にするときは、bakeする時
0121nobodyさん2009/03/30(月) 12:50:55ID:???
>>118
例えばrecursive=1で検索したときに、
b_id1とb_id2があったら
2つのBモデルが結果に含まれるのか?って話をしてるんだけど。
0122nobodyさん2009/03/30(月) 12:51:59ID:???
>>120
そういえばそうか
ありがと
0123nobodyさん2009/03/30(月) 12:52:32ID:???
リアルで馬鹿なのか?
0124nobodyさん2009/03/30(月) 12:54:23ID:???
外部キー制約を張るフィールドは規約でこう命名しろ、ってされてるから
同一モデルに複数張る場合は無いのかと思っただけだよ
でも実際フィールド名で規約を守る意味自体が確かにbakeのためくらいしかないね
0125nobodyさん2009/03/30(月) 14:29:00ID:???
んなこたーない
0126nobodyさん2009/03/30(月) 15:45:19ID:???
無いというだけ言わずに例示したら?
0127nobodyさん2009/03/30(月) 15:48:22ID:???
上に書いてあるじゃない
0128nobodyさん2009/03/30(月) 15:51:46ID:???
フィールド命名規約を守る意味は実質無いとは書かれてるね
0129nobodyさん2009/03/30(月) 17:59:51ID:???
cakephp1.1 から 1.2 って全然スピード変わったよね。
cakephp 1.1 はもっさり動作でサイト作った後キャッシュやらんと使い物にならんかったが
cakephp1.2 だとキャッシュしなくても全然イケル。

こりゃいい!
0130nobodyさん2009/04/03(金) 11:08:47ID:???
findでfieldsにcount()とかsum()を使うと、
戻り値が
data[0][0]['count']みたいになっちゃうんだけど、
afterFindとかで整形する方法以外で、
なんとか
data[0]['post']['count']に入れる方法ないかな?

count(*) AS Post.count
とかやってみたけどエラー出ちゃう;
0131nobodyさん2009/04/04(土) 01:15:43ID:???
ごめん、教えてちょ。

アクション内で、動的にテーブルの列の追加をやっているんだけど、
デバッグモードON時(1以上)に、列追加後にfindかけると
キャッシュからスキーマ読まれて、追加した列が取得できない。

ブラウザの更新ボタンを押せば、追加した列を取得して表示してくれる。

デバッグモードOFFであれば大丈夫なんだけど、
ONの時にもちゃんと列を取得してもらうにはどうすればいいのかな?
0132nobodyさん2009/04/04(土) 14:44:04ID:???
>>131
追加した時にキャッシュをクリアすれば良いのでは。
01331312009/04/05(日) 01:20:53ID:???
>132
キャッシュのクリアはやってるつもりなんだけど、
合ってるのかわからん。

これでいいんだよね。
$this->モデル名->cacheQueries = false;


列追加はALTER TABLE ADD をSQL直書きで、queryメソッド。

上のcacheQueriesはどこで設定したらいいか判らないから、
findする前後、列追加の前後、
いろんなところに書いてみたけど、ダメだった。

デバッグモードOFFなら大丈夫って書いたけど、
追加した列はupdateできなかった。


ローカルのテスト環境はWindows
XP、PHP5.2.8、cakePHP1.2.2.8120、MySQL5.0.67

本番テスト環境はさくらサーバ
FreeBSD、PHP5.2.8、cakePHP1.2.2.8120、MySQL4.0.27


誰か教えてちょ〜。
0134nobodyさん2009/04/05(日) 03:31:04ID:???
>>133
Modelのsaveメソッドでは条件が合えば自動でキャッシュをクリアしてる。
自前でテーブル足すとかしたらこれが効いてないんでしょうかね。

Modelクラスのソースのsaveメソッドの最後の方ででてくるから参考にしてみては。
01351312009/04/05(日) 09:18:55ID:???
>>134
サンキュー!
ちょっと見てくる!!

でも解決しなかったら、また教えてちょ。
ありがとうね!
0136nobodyさん2009/04/05(日) 09:47:10ID:???
if(isset($box)){

}
0137nobodyさん2009/04/05(日) 09:49:49ID:???
if(isset($box)){
if($box == 'hako'){
echo '処理1';
}
}

ってやらずに
if($box == 'hako'){
echo '処理1';
}

だけだとnoticeエラーが出る。
なんかスマートな書き方ありませんでしょうか。

if(isset($box) == 'hako'){
echo '処理1';
}

だと$boxがセットされているだけでtrueになっちゃうし。。。
0138nobodyさん2009/04/05(日) 10:14:24ID:???
if( isset($box) && $box == 'hako' ){
echo '処理1';
}
じゃだめ?
1行にしただけだけど。
01391312009/04/05(日) 11:07:23ID:???
>>134
解決しました!!
ありがとう!!

仰ってた通りModelクラスの最後の方の
_clearCache()を見てたら判りました!


似たような事やる方がいらっしゃるかもしれないので、
解決した方法を書いておきます。

私はバカでただのゴミ野郎なので、
判りづらい事書いちゃったらすんません。


cakePHPは現時点最新の1.2.2.8120。
まず、アプリ名\cake\libs\model 内のmodel.phpから
_clearCache() が怪しいと睨む。

同ソース内のsaveメソッド最後の方の
$db->delete($this)
辺りで、
$this->_clearCache();
こんな感じで_clearCache()が引数無しで呼ばれたりしてる。

_clearCache()、やってる事はよく判らんが、
最終的に
clearCache($assoc);
っていうのをやってる。

次に続く・・・
01401312009/04/05(日) 11:09:46ID:???
139の続き

$this付いてねーから、e()とかh()みたいに、
どこでもが使えて、みんなが大好き
アンパンマンみたいな存在の関数なんじゃねーのと思い、
アプリ名\cake\basics.php
を探してみると、
clearCache($assoc);
発見。

clearCache($params = null, $type = 'views', $ext = '.php')
こんな感じになってて、引数指定しないとデフォルトでviews、
アプリ名\app\tmp\cache\views 内を
一掃するようになってるみたい。

ならばfindかける前に
clearCache(null,'models');
すればいんじゃねーのと思い、やってみたがダメ。
もしかしたら、findの全然前に、既にモデルキャッシュ読んでるんじゃねーのと思い、
逆に、列追加(ALTER TABLE ADD)のクエリー発行した直後に書いてやったら
無事成功!!!!

ローカルテスト環境のWindows、本番のさくらサーバ環境、ともに出来てる事を確認。

以上です!
長々と失礼しますた〜。


さー!次は携帯用の表示、振り分け方法を考えないと!!!
0141nobodyさん2009/04/05(日) 14:05:16ID:???
>>138
あ!それでいけそうな予感。
ありがとうございました!
0142nobodyさん2009/04/05(日) 14:41:48ID:???
検索結果のcreatedが同一のものを
一件に纏めてpaginate compornentしたいのですが
これはcakeではどのように書けば良いのでしょう?

ヒントを頂けると有難いです
0143nobodyさん2009/04/07(火) 04:31:48ID:???
マスタをセレクトボックスに出してるんだけど
並び順をモデルのデータから自動的に行う方法ってある?
例えばorderフィールドを作っておけば自動的に参照するとか。
0144nobodyさん2009/04/07(火) 06:31:21ID:???
orderフィールドを作っておいてそれがorderだと指定すれば
0145nobodyさん2009/04/07(火) 06:32:54ID:???
ちなみに指定の仕方はlimitとかと同じ
0146nobodyさん2009/04/07(火) 06:34:05ID:???
order句を指定したくないんだけど
find時またはformヘルパーで自動的に解釈してくれる機能は無いのかなと
0147nobodyさん2009/04/07(火) 12:44:21ID:???
指定されないのに勝手にソートされたら逆にものすごい困ると思うが
0148nobodyさん2009/04/07(火) 13:21:48ID:???
afterFindでSet::sortでもかけるとか。
0149nobodyさん2009/04/07(火) 14:22:06ID:???
こんにちは
デフォルトのデザインダサいので変えたいのですが、どうすればいいのですか?^^;
0150nobodyさん2009/04/07(火) 14:28:55ID:???
>>149
スタイルシート外しちまえ。
結構テンプレあるぞ。
0151nobodyさん2009/04/07(火) 18:36:33ID:???
>>147
orderフィールドを作らなきゃ良いだけでしょ
フレームワークにその手のものは多数あるのに何言ってんの
0152nobodyさん2009/04/07(火) 20:03:52ID:???
>>149
「cakephp テンプレート」でググレカス
0153nobodyさん2009/04/07(火) 20:13:46ID:???
>>152
鬱せーカス
0154nobodyさん2009/04/07(火) 20:21:23ID:???
コントローラーが多い場合どうしてる?
フォルダで階層化してもclass名とか衝突するからうざいよね。
0155nobodyさん2009/04/07(火) 20:36:59ID:???
クラス名の衝突なんて起こったことないわ
そもそもフレームワークの枠組みの中でしかクラス作らないし
0156nobodyさん2009/04/07(火) 21:15:02ID:???
Folderモデルとか作ろうと思ったら、コアのFolderクラスと衝突するね。
コアのクラスにはCake〜とかプレフィックス付けといてくれればいいのに。
0157nobodyさん2009/04/07(火) 23:56:01ID:???
すみません
paginateのcompornentを使ったときに、
group byで纏めたデータが何件あったのか、sqlで書くところの
from *, count(data) as countみたいのをやりたいのですが、
どういう項目に書けばいいのでしょう??
0158nobodyさん2009/04/08(水) 00:20:31ID:???
>>156
こっちが適当に名前かえるしかないね。
フレームワークはそういう規約的な知識は求められても仕方が無い。
0159nobodyさん2009/04/08(水) 03:47:51ID:???
>>154
フォルダで階層化なんて普通するの?
俺そんなことやらないけど。
コントローラー作りすぎなんじゃないの?
0160nobodyさん2009/04/08(水) 03:53:25ID:???
作りすぎたところで名前が被るとかおかしい

名前が同じなら同じコントローラにすればいいし
0161nobodyさん2009/04/08(水) 04:12:52ID:???
コントローラ名というかクラス名がコアで使われてるのとかぶっちゃうんでしょ。
俺も前に添付ファイルを扱おうと思って
「File」モデルとか作ろうと思ったら作れなくてちょっと悩んだことあるw
つってもかぶりそうなクラス名はFile、Folder、Page、Configureぐらいじゃないかな?
0162nobodyさん2009/04/08(水) 04:15:54ID:???
それコントローラの増加と関係ないじゃん
0163nobodyさん2009/04/08(水) 05:47:30ID:???
containで、任意のフィールドで結合するにはどうすれば?
0164nobodyさん2009/04/08(水) 06:25:51ID:???
俺はテーブル名にプレフィックス付けるからモデル名が被ったことなんかないな。
0165nobodyさん2009/04/08(水) 06:56:54ID:???
cakephpは予約語一覧とかでてないんだっけ?
0166nobodyさん2009/04/08(水) 13:00:36ID:???
みんなフリーワード検索とかどう対応してんの?
全文検索したいんだけど。スフィンクスは使いたくないんだよね。

CAKEだけで全文検索をスマートにやるやり方を!!
0167nobodyさん2009/04/08(水) 13:02:29ID:???
>>149

views/layouts/以下に、default.ctpを作って、好きなようにHTMLを書く。
その、default.ctpが優先的に呼ばれるようになる。
0168nobodyさん2009/04/08(水) 13:50:09ID:MhIiLyHN
>>166
LIKE句じゃ駄目ずらか?
0169nobodyさん2009/04/08(水) 14:42:57ID:???
>>166
DBのを使ってます
0170nobodyさん2009/04/08(水) 14:50:25ID:???
>>168
LIKE検索より数十倍高速な全文検索
というフレーズにあこがれてるんです><
0171nobodyさん2009/04/08(水) 16:53:26ID:???
いやだからデータベースにデータが入っている以上
データベースのアクセス速度は越えられないわけで
0172nobodyさん2009/04/08(水) 17:01:13ID:???
>>171
MySQLならLIKE検索とFULLTEXT_INDEXを使った検索では何十倍も速度が違うぞ。

>>166
>>CAKEだけで全文検索をスマートにやるやり方を!!
NamazuなりLuceneなりを使うしかないんじゃない?
0173nobodyさん2009/04/08(水) 17:16:31ID:???
誰もMySQLとは言ってないので
というか汎用的なものじゃないとフレームワーク使う意味ないので
0174nobodyさん2009/04/08(水) 17:16:53ID:???
>>172
ですよねー。
でもレンタルサーバ等でそういったものを
インストール出来ない環境が多いんでなんとかしたいんですよね。

今さくっとNgramで全文検索用作ったけどinodbとmyisamが混じって気持ち悪いし
トランザクション効かないしで><
■ このスレッドは過去ログ倉庫に格納されています