1

我正在学习 CakePHP 2.0,并创建了一个示例测试应用程序,用户可以在注册时提交文件。

下面是数据库表

用户表

id Auto_Increment
first_name
last_name
email
doc_file

并且还创造User.phpUsersController.php

以下是中的内容代码UsersController.php

用户控制器.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');
            }
        }
    }
}

在视图中,我创建了两个文件,即视图目录中的index.ctp目录register.ctpUsers

的代码内容register.ctp

注册.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/

很好,如果它创建用户标识目录并将文件存储在其父用户目录中

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 回答