複数ファイルアップロード

CakePHPで複数ファイルのアップロードについて調べてみました。といっても普通のPHPのコードと同じではありますが、postするフィールド名に[]を付与して配列にします。

view

<?php 
    echo $form->create( 'Upload', array( 'type'=>'file', 'url' => '/upload/multiupload', 'enctype' => 'multipart/form-data'));
    echo $this->Form->input( 'files', array( 'type' => 'file', 'multiple' => 'multiple', 'name' => 'files[]'));
    echo $this->Form->submit( 'upload');
    echo $form->end();
?>

以下のような形式でpostされるため、saveする際は、データ配列を作り直す必要があります。

// $this->log( $this->data, LOG_DEBUG);
Array
(
    [files] => Array
        (
            [name] => Array
                (
                    [0] => bg-home.png
                    [1] => bg-home.jpg
                )
            [type] => Array
                (
                    [0] => image/png
                    [1] => image/jpeg
                )
            [tmp_name] => Array
                (
                    [0] => /var/tmp/phpMVd2wx
                    [1] => /var/tmp/phpALIBhj
                )
            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                )
            [size] => Array
                (
                    [0] => 353271
                    [1] => 52376
                )
        )
)

[追 12.12.29] フィールド名のかたちを変えると

以下のようにForm->inputのフィールド名をかえるとファイルごとの配列として格納してくれます。

<?php 
  echo $form->create( 'Upload', array( 'type'=>'file', 'url' => '/upload/multiupload', 'enctype' => 'multipart/form-data'));
//echo $this->Form->input( 'files', array( 'type' => 'file', 'multiple' => 'multiple', 'name' => 'files[]'));
  echo $this->Form->input( 'files. ', array( 'type' => 'file', 'multiple' => 'multiple'));
  echo $this->Form->submit( 'upload');
  echo $form->end();
?>

配列

Array
(
    [files] => Array
        (
            [0] => Array
                (
                    [name] => bg-home.png
                    [type] => image/png
                    [tmp_name] => /var/tmp/phpdxbKr6
                    [error] => 0
                    [size] => 353271
                )
            [1] => Array
                (
                    [name] => bg-home.jpg
                    [type] => image/jpeg
                    [tmp_name] => /var/tmp/phpkWir95
                    [error] => 0
                    [size] => 52376
                )
        )
)
  • このエントリーをはてなブックマークに追加

関連記事

no image

Debugkitをインストール

CakePHPのデバッグツールとしてはデファクトスタンダードといってもいいDebugkitをインストールしました。 ダウンロード CakePHP 1.3用 https://github.com

no image

Jsヘルパーを使用してAjax更新

更新処理でページ遷移を伴う場合、ページ全体をレスポンスするのに対して、Ajax処理ではページの一部のレスポンスが可能となるためサーバからの通信量を抑えることが可能となります。 Jsヘルパーを使用して

no image

シンプルに設置できる数字Captcha「MathCaptcha」

スパム防止などで利用されているCaptchaですが、数字版で使えるものがないか探してみました。 この「MathCapthca」は非常にシンプルに設置できるのはいいですが、やっぱりクエスチョンの部分は

ログインに追加の条件を付与する「userScope」

「ユーザ登録」の続きです。 ユーザ登録後、activate(statusを0に設定するを)せずに「仮登録」のままで、正しいusernameとpasswordでログインを試したところ認証に引っかかって

no image

validateErrors と validationErrors

CakePHP試験中に気付いたことがあって、メモです。 $this->validateErrors自身バリデーション処理している 今まで、save時にバリデーションエラーメッセージををログに出力し

Textヘルパー

Textヘルパーには、テキスト処理に関する便利な機能があります。リンク付与やテキストの抜粋・ハイライトや切り取り処理など。ソース:/cake/libs/view/helpers/text.php

CakePHP 1.3 インストール

使い古されている手ではありますが、表題の件とレンタルサーバへの配置方法などにも使えますので参考にしていただけたらと思います。 まずはレンタルサーバでCakePHPを動作させる CakePHPア

no image

recursive設定によるfind()性能改善

CakePHPでは、モデルにアソシエーションを設定している場合、recursive(=>joinする階層)はデフォルトで0に設定されています。「recursiveゼロ」の意味するところとは、「1跨ぎま

複数データベースの追加と切替

CakePHPで複数のデータベースに切替を行うということがあると思います。(個人的にはあまりない) 今回、CakePHPからWordpressのデータベースへの接続を行う機会があったので設定を試して

コントローラ内でバリデーション処理を呼び出す

通常、saveメソッドの際にバリデーション処理も自動で行われますが、save処理と切り離してバリデーションを行うこともできます。このときは、save時と若干異なる処理体系になります。 バリデーシ

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

    PAGE TOP ↑