2月 212016
 

モデルを使っていない方法です。

cakephpのチェックボックス

cakephpのチェックボックス

コントローラ

Controller/SamplesController.php

App::uses('AppController', 'Controller');

class SamplesController extends AppController {

        $rets=array(
            0=>array('pid'=>100,'title'=>'a'),
            1=>array('pid'=>200,'title'=>'b'),
            2=>array('pid'=>300,'title'=>'c'),
            3=>array('pid'=>400,'title'=>'d'),
            4=>array('pid'=>500,'title'=>'e'),
            
        );
        
        $this->set('rets',$rets);     
        
        $this->modelClass = null;
}

解説

  1. フォームの表示データを$retsに入れてコントローラから渡しています。
  2. $this->modelClass = null;を設定することで、モデルを読み込まないようにしている。

ビュー

View/samples/index.ctp

<div>
    <h3>Samples</h3>
    <table>
    <thead>
        <tr>
            <th>ckeck</th>
            <th>pid</th>
            <th>title</th>
        </tr>
    </thead>
    <tbody>
   <?php
    echo $this->Form->create(null,
      array('type'=>'post','action'=>'.')); ?>
    <?php foreach ($rets as $ret): ?>
        <tr>
            <td><?php 
            echo $this->Form->checkbox('pid.',array('value'=>$ret['pid'],'hiddenField' => false,'checked'=> @in_array($ret['pid'], $this->request->data['Sample']['pid']))); 

            ?></td>
            <td><?= h($ret['pid']) ?></td>
            <td><?= h($ret['title']) ?></td>
   
        </tr>
    <?php endforeach; ?>
    </tbody>
    </table>
   
<?php    
    echo $this->Form->end("送信");
  ?>

解説

  1. $this->Form->create()の第一引数は、モデルを使わないのでnullに。
  2. $this->Form->checkbox()の第一引数の名前にピリオドをつけることによって、nameの最後に[]がついて、data[Sample][pid][]のような配列になる。
    これを、’pid[]’と入れると、data[Sample][pid[]]のようになり、正常になっておかしくなる。
  3. $this->Form->checkbox()の第二引数の配列に’value’で値を設定できる。
  4. $this->Form->checkbox()の第二引数の配列にhiddenFieldをfalseに設定することで、 余分なhidden フィールドが生成されるのを防ぐ。
  5. $this->Form->checkbox()の第二引数の配列のcheckedは、フォーム送信後の選択状態の表示。結果は配列になり、checkboxの標準処理ではチェックできないため、in_arrayで値が選択済みかをチェック。初期状態ではrequest->dataがセットされなくてNoticeが出るので@で警告抑制。

または$this->Form->checkboxの部分を$this->Form->inputにすることもできる。

echo $this->Form->input('pid.', 
                    array(
                    'type'=>'checkbox',
                    'value'=>$ret['pid'],
                    'checked'=> @in_array($ret['pid'], $this->request->data['Sample']['pid'])
                    )
                   );

ネオビットさんを参考にさせていただきました。
http://www.neobit.jp/archives/436

このエントリーをはてなブックマークに追加
はてなブックマーク - cakephp2.xチェックボックスの使いかた
Post to Google Buzz
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed
[`tweetmeme` not found]
[`grow` not found]

2月 132016
 

シリアライズ可能なcURLのラッパークラス[参照]:http://qiita.com/mpyw/items/c65fb4ec4cef80909a47

使ってみたらすばらしいラッパークラスです。

これもすぐにできなかったのでめも。

全部同じディレクトリにファイルをつくったと過程。

  1. class cURLをcURL.phpとして保存。
  2. class NicoNicoをNicoNico.phpとして、保存。NicoNico.phpにcURL.phpをrequireする。
    require_once("cURL.php");
  3. index.phpを作り、その中で実装する。
    require_once("NicoNico.php");
    $nico = new NicoNico('aaaaa@bbbbb.cc.jp', 'xxxxxxx');
    var_dump($nico-&gt;getHistory());

これでOK!

視聴履歴が長期間ないと「履歴取得に失敗しました」エラーが表示されるので、その場合は、ためしに視聴する。

このエントリーをはてなブックマークに追加
はてなブックマーク - シリアライズ可能なcURLのラッパークラスをつかってみた
Post to Google Buzz
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed
[`tweetmeme` not found]
[`grow` not found]

2月 132016
 

PHP cURLの色々な使い方を参考にcURLで接続をこころみたものの、すぐつまづいて、ドはまりしたので、メモ。

以下の部分、file_get_contents()なら取得できるのに、cURLで取得できない。

$url = "http://www.pixiv.net/login.php";
$ch = curl_init(); // はじめ

//オプション
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
var_dump($html);
curl_close($ch); //終了

このURLがリダイレクトされるので、リダイレクト後のアドレスに変えてみる。

https://www.secure.pixiv.net/login.php?return_to=0

エラーをはきださせる。

curl_errnoなどを使って、直前のcurl_exec()のエラーを出力。

if($errno = curl_errno($ch)) {
  $error_message = curl_strerror($errno);
  echo "cURL error ({$errno}):\n {$error_message}";
}

curl: (60) Peer certificate cannot be authenticated with known CA certificates

サーバー証明書の検証がうまくいっていないために、データが取得できないようだ。

cURL はサーバー証明書の検証を行わないように設定

setoptに、以下のように設定。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

これでhttpsのデータも取得できるようになった。

このエントリーをはてなブックマークに追加
はてなブックマーク - file_get_contents()なら取得できるのにCurlでうまくいかない
Post to Google Buzz
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed
[`tweetmeme` not found]
[`grow` not found]

 Posted by at 4:23 PM  Tagged with:
5月 252013
 

コマンドプロンプトからの方法よりあっさりできたのでメモ。

  1. http://pear.php.net/go-pear.phar をブラウザで表示して、go-pear.pharをダウンロード。
  2. go-pear.pharをc:\xampp\php\に保存
  3. xamppコントロールパネルを開いて、「shell」のボタンを押す。
    xampp_pear
  4. カレントディレクトリを[c:\xampp\php]に移動。
    1. cd c:\xampp\php
  5. 「php go-pear.phar」と入力しエンター
  6. Are you installing a system-wide PEAR or a local copy?の質問にエンター
  7. 次のような感じであればエンター
    xampp_pear_1
    11が違う場合は、
    11を入力して、エンター
    次に、c:\xampp\php\pear.iniを入力してエンター

これで完了。

インストールを確認したければ、pearinfo()を実行してみる。

  1. シェルでpear_infoをインストールする。
    1. pear install pear_info
  2. インストールが完了したら、c:\xampp\htdocs\にpearinfo.phpを作成。
    以下のような内容を入力する。

    1. <?php
      require_once("PEAR/Info.php");$info = new PEAR_Info();
      $info->show();
      ?>
  3. ブラウザで「http://localhost/pearinfo.php」を開く。
    エラーは出るかもしれないが、一番下にpearinfoが表示されればOK.
    xampp_pear_2

 

このエントリーをはてなブックマークに追加
はてなブックマーク - xamppにpearをインストール windows
Post to Google Buzz
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed
[`tweetmeme` not found]
[`grow` not found]

7月 152012
 

全部、32bit版でインストールしたら動きました。
xamppのバージョンは、XAMPP version 1.7.7

【ImageMagickをダウンロード】
Windows Binary Releaseから
「Win32 dynamic at 16 bits-per-pixel」をダウンロードする。
Imagemagick 公式サイトでは VC10 でビルドされている。だから VC9 でビルドされたものを見つける必要がある。VC9でビルドされた最後のバージョンは ImageMagick 6.6.2-10だ。
ということなので、ImageMagick-6.6.2-10-Q16-windows-dll.exeをダウンロード。
設置場所は、パスの間に空白が入らないような場所にする。
[C:\ImageMagick-X.X.X-Q16]など
Install PerlMagick for ActiveState Perlにはチェックを入れない

【パスをとおす】
コンピューターを右クリック。
システムの詳細設定→環境変数→システム環境変数の変数「path」の値のはじめに、[C:\ImageMagick-X.X.X-Q16]の場所、を追加。最後に「;」をつける。
【php_imagick_ts.dllをダウンロード】
http://valokuva.org/builds/
からphp_imagick_ts.dllをダウンロード。
(thread safeの場合:xamppのhelp→ReadMe。PHPのバージョンの〔〕内にかいてあります。)
phpのextension_dir以下に置く。
php.iniのextension_dirで、php_imagick_ts.dllを有効にする記述を追記する。
[PECL]
extension=php_imagick_ts.dll
Imagick動作しない。
imagick 基本的な使用法ができない。
phpからimagickでjpgを操作できない。
こんなことがやっと解決した!!!

このエントリーをはてなブックマークに追加
はてなブックマーク - imagick インストール windows7 64bit xampp php
Post to Google Buzz
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed
[`tweetmeme` not found]
[`grow` not found]

7月 022012
 

ブラウザを使って、プログラムを実行するのをタスクスケジューラを使ってやるには。
プログラム/スクリプトに、以下のように、ブラウザの実行ファイルのパスを入れる。
“c:\Program Files\Internet Explorer\iexplore.exe”
引数の追加(オプション)に、表示させるアドレス
http://XXXX/XXXX.php

このエントリーをはてなブックマークに追加
はてなブックマーク - タスクスケジューラ ブラウザを使ってプログラムを実行する
Post to Google Buzz
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed
[`tweetmeme` not found]
[`grow` not found]

6月 212012
 

php5.3では、DateTimeクラスを使った日付の計算ができる。
//本日
$today = new DateTime();
echo $today->format(‘Y-m-d’);
//もととなる日付
$release = new DateTime(‘20120619’);
$diff = $release->diff($today);
echo $diff->format(‘%a’);
//差
$diff_d = $diff->format(‘%a’);
echo $diff_d;
*Windows版のphp5.3.5などのバージョンだと、DateTime::diff()で日付の差が6015になるバグが報告されています。バージョンアップするしかないです。
http://bugs.php.net/bug.php?id=51184

このエントリーをはてなブックマークに追加
はてなブックマーク - DateTimeを使った日付の差
Post to Google Buzz
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed
[`tweetmeme` not found]
[`grow` not found]

1月 132011
 

【症状】
go-pear.batでPEARインストール時に以下のようなエラーが出て、インストールできない!
phar “C:\php\PEAR\go-pear.phar”
does not have a signaturePHP Warning: require_once(phar://go-pear.phar/index.php): failed to open stream: phar error: invalid u
rl or non-existent phar “phar://go-pear.phar/index.php” in C:\php\PEAR\go-pear.phar on line 1236
【解決方法】
PHPディレクトリの中にあるgo-pear.batを開き、以下のように書き換える。
%PHP_BIN% -d output_buffering=0 PEAR\go-pear.phar

%PHP_BIN% -d output_buffering=0 -d phar.require_hash=0 PEAR\go-pear.phar

このエントリーをはてなブックマークに追加
はてなブックマーク - php5.3 pearインストールできない 
Post to Google Buzz
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed
[`tweetmeme` not found]
[`grow` not found]