2012年3月10日土曜日

CakePHP:SQL Error: 1271: Illegal mix of collations for operation

検索フォームを作成し、日付のフィールドにひらがな等を入力してsubmitすると
SQL Error: 1271: Illegal mix of collations for operation '>=' [CORE\cake\libs\model\datasources\dbo_source.php, line 684]
というエラーになる。
これがどうしても解決しない・・・
文字コードに関して色々調査してもまったく解決しない。
下記サイトの文字コード指定のダンプで上手くいくかもと思いましたが何の関係もなかった。
http://d.hatena.ne.jp/ho4kawa/20110301/1299638094

日付型フィールドの値をひらがなと比較しているのが悪いのでしょうが、ここまで露骨にエラーじゃなくても。
というわけで、後回し。誰か解決方法ご存じないでしょうか・・・

CakePHP:1064: You have an error in your SQL syntax;

SQL Error: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'findAll' at line 1 [CORE\cake\libs\model\datasources\dbo_source.php, line 684]
Query: findAll

というエラー。
1.3.14で「findAll」は非推奨になっています。(使えない?)
find関数のオプションで「all」を指定してあげましょう。

バージョンごとの違いが結構気になる。
ネットのサンプル通りにやったのにーと歯ぎしりしたものの、勉強不足でした。

CakePHP:外部からURLで指定出来ないメソッド

コントローラの外部アクセス不可メソッドについて

URLからアクセスできないメソッドを作成したいときは,メソッド名の先頭に「_(アンダースコア)」を付けます。
アンダースコアをつけないメソッドはURLからアクセス可能なので、よろしからぬ自体が起こる可能性がありますね。
アクションとして使用しないメソッドには必ずアンダースコアを付けておきましょう。

CakePHP:定数を別ファイルにする

そういえばCakePHPで定数を別ファイルにしてインクルードしたいときってどうするんだろう・・・とふと手が止まる。
こんなことで迷ってしまうのがフレームワークに慣れてない感じ。

app/config/constants.phpを作成し、app/config/bootstrap.phpでconfig('constants');と指定して読み込ませます。

CakePHP:authComponentとバリデーション

なんかバリデーションがauthComponentだとうまくいかないと思っていましたら・・・

こんな情報が。
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1565&forum=3
まだ実装はためしてないですが。。。

あとログインのアクションをusersから変えたい場合はこんな感じで指定。
$this->Auth->loginAction = array(
'admin' => false, 'controller' =>
'account', 'action' => 'login'
);

参考
http://c-brains.jp/blog/wsg/10/01/29-143311.php

CakePHP:トップページのコントローラの指定

いわゆるindexにコントローラを作りたい場合。
私もindex_controllerとかとか作って試してみたんですが、尽く失敗したので調べてみました。
pagesコントローラーでdisplayアクションをコールしているようです。
というわけでpages_controller.phpとdisplay.ctpを作成すればOK。

CakePHP そういえば、トップページのコントローラーは?
http://yasigani-ni.com/?p=447

ありがとうございますm(_ _)m

CakePHP:開発環境

CakePHPはじめました。

CakePHP version
1.3.14

開発環境
Vertrigo Serv2.26
 Apache/2.2.21 (Win32)
 PHP/5.3.9
 MySQL 5.0.8

IDE
netbeans7.1

さすがに規模がアレなのでIDEはnetbeans使います。
これに慣れちゃうとエディタでの開発が辛くなりますね。
これからちょこちょこと躓いたことのメモでもまとめていきたいと思います。

2012年3月3日土曜日

PHP:HTMLソースからイメージタグを抽出

function get_image_tag($content,$i){
    $pattern = "/<img.*?\>/";
    preg_match_all($pattern, $content, $images);
    echo $images[0][$i];
}
関数は適当ですがこんな感じで一行ずつ読み込んだものに対してかまします。

PHP:htmlspecialchars

PHP5のhtmlspecialcharsにはENT_QUOTESを付けます。
htmlspecialchars でXSS対策をしていたと思ったら、デフォルトでは シングルクオートをエスケープしてくれないのです。(マニュアル参照)

htmlspecialchars($str, ENT_QUOTES);

ENT_QUOTES を指定することで、シングルクオートも ' にエスケープ出来ます。