1

私はCakePHP2.0を学び、ユーザーが登録時にファイルを送信できるサンプルテストアプリケーションを作成しました。

以下はデータベーステーブルです

ユーザーテーブル

id Auto_Increment
first_name
last_name
email
doc_file

そしてまた作成されUser.phpUsersController.php

以下はのコンテンツコードですUsersController.php

UsersController.php

class UsersController extends AppController{

    public $helpers = array('Html', 'Form');


    public function index(){
        $this->set('user1', $this->User->find('all'));
    }


    public function register(){
        if ($this->request->is('post')){
            if ($this->User->save($this->request->data)){
                //move_uploaded_file($this->data['Model']['field']['tmp_name'], WWW_ROOT.DS.'xxx');

                move_uploaded_file($this->data['User']['doc_file']['tmp_name'], WWW_ROOT.DS.'hello.doc');

                $this->Session->setFlash('User is created');
                $this->redirect(array('action'=>'index'));
            } else {
                $this->Session->setFlash('Cannot register a user');
            }
        }
    }
}

そして、ビューでは、2つのファイルを作成しました。つまりindex.ctp、ビューディレクトリにregister.ctpディレクトリがあります。Users

のコードコンテンツregister.ctp

register.ctp

<?php

    echo $this->Form->create('User', array('type'=>'file'));
    echo $this->Form->input('first_name', array('label'=>'First Name'));
    echo $this->Form->input('last_name', array('label'=>'Last Name'));
    echo $this->Form->input('email');
    echo $this->Form->input('doc_file', array('type'=>'file'));
    echo $this->Form->end('Register');
?>  

そして、このページを実行し、すべての情報を入力すると、エラーが発生します

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Array' in 'field list'

arrayそして、以下は私が得たクエリです。doc_file

SQL Query: INSERT INTO `database_db`.`users` (`first_name`, `last_name`, `email`, `doc_file`) VALUES ('master', 'shifu', 'shifu@k.com', Array)

私が試していること:

ユーザーが登録している間、ファイル名はランダムである必要があり、に移動する必要があります

localhost/mysite/app/webroot/files/user_data/また localhost/mysite/app/webroot/files/user_data/user_id_directory/

ユーザーIDディレクトリを作成し、そのファイルを親ユーザーディレクトリに保存する場合は便利です

4

2 に答える 2

2

問題は、CakePHP が doc_file フィールドを見て、それをデータベースに挿入しようとしていることです。

Cake がフォーム送信を処理した後、doc_file には値の配列が含まれます。

次の手順で修正できます。

あなたの見解では:

echo $this->Form->input('new_doc_file', array('type'=>'file'));

コントローラーで:

if ($this->request->is('post')){
    $this->data['User']['doc_file'] = WWW_ROOT.DS.'hello.doc';
    if ($this->User->save($this->request->data)){
        move_uploaded_file($this->data['User']['new_doc_file']['tmp_name'], $this->data['User']['doc_file']);

        $this->Session->setFlash('User is created');
        $this->redirect(array('action'=>'index'));
    } else {
        $this->Session->setFlash('Cannot register a user');
    }
}

(つまり、一時的なフィールド名でファイルをアップロードし、保存する前に doc_file フィールドを post 配列に手動で追加します)。

于 2012-06-13T10:19:30.387 に答える
0

エラーはそれを示唆しています

$this->data['User']['doc_file']['tmp_name']

配列を返しています - 試してください

debug($this->data['User']['doc_file']['tmp_name']) 

コントローラーコードで、何が含まれているかを確認します。

于 2012-06-13T09:22:16.200 に答える