【问题标题】:CakePHP 2.0 File Upload, $data has no effectCakePHP 2.0 文件上传,$data 无效
【发布时间】:2012-03-02 01:04:55
【问题描述】:

我正在开发一个能够让我将文件上传到服务器的站点,我试图将文件重命名为与信息一起插入的相应 mysql id。

它有点工作,但每次我上传文件时,它都会重写上次上传的文件。

这是我的代码

   function uploadFile() {
    $file = $this->data['Upload']['file'];
    $pid = mysql_insert_id();
    if ($file['error'] === UPLOAD_ERR_OK) {
        if (move_uploaded_file($file['tmp_name'], APP.'webroot/files/uploads'.DS."$pid.mp4")) {
            $this->data['Upload']['name'] = $file['name'];
            $this->data['Upload']['eventname'] = $file['evetname'];
            $this->data['Upload']['description'] = $file['description'];
            return true;
        }
    }
    return false;
}

这些是我网站上发生的错误,

注意(8):间接修改重载属性UploadsController::$data无效[APP/Controller/uploads_controller.php, line 58] 注意(8):未定义索引:eventname [APP/Controller/uploads_controller.php, line 59] 注意(8):间接修改重载属性UploadsController::$data无效[APP/Controller/uploads_controller.php, line 59] 注意(8):未定义索引:描述[APP/Controller/uploads_controller.php,第60行] 注意(8):间接修改重载属性UploadsController::$data无效[APP/Controller/uploads_controller.php, line 60]

我不太明白到底发生了什么? 我还应该使用 mysqli_insert_id() 函数而不是 mysql_insert_id() 吗?我真的不知道 mysqli_insert_id() 是如何工作的,请大家帮忙???

【问题讨论】:

  • 但是我的表单中的信息正在输入到数据库中,所以当数据上传到数据库时,我不太明白 $data 的含义。但是文件上传不起作用,因为它不断覆盖上传的文件。

标签: mysql cakephp-2.0


【解决方案1】:

您正试图操纵在 Cake 2.0 中只读的 $this->data。您应该使用 Cake 2.0 中引入的新 CakeRequest 对象。

所以$this->data 变为:$this->request->data

至于mysql_insert_id(),我不确定您将数据保存到数据库表的位置。 Cake 将最后插入记录的id 存储在$this->ModelName->id 中,因此您也可以使用它。

【讨论】:

  • 嗨,我照你说的做了,现在我得到了这些错误,注意 (8): Trying to get property of non-object [APP/Controller/uploads_controller.php, line 55] 注意 (8) : 未定义索引: eventname [APP/Controller/uploads_controller.php, line 59] 注意(8): 未定义索引: description [APP/Controller/uploads_controller.php, line 60] 警告(2): file_put_contents(/Applications/XAMPP/ xamppfiles/htdocs/evolvidsnew/app/tmp/logs/error.log)[function.file-put-contents]:无法打开流:权限被拒绝[CORE/Cake/Log/Engine/FileLog.php,第 69 行]
  • 我正在使用 mysql_insert_id 函数,因为我希望将使用我的表单上传的文件的文件名重命名为 SQL 表上的相应字段,因此如果该条目的 id 号为 32,则文件名将重命名为 32.mp4
  • 您列出的错误来自请求$this->request->data 数组中不存在的键。您可以通过将其放入 debug() 调用中来查看数组中的内容。 $this->ModelName->id 或多或少是mysql_insert_id() 的别名。
  • 对而不是使用前面的代码为了向sql数据中添加数据我使用了这个语句,$this->Upload->save($this->data);这显然会查看上传表单并保存所有数据。这工作没有错误。但是...我已将 move_uploaded_file 行更改为: f (move_uploaded_file($file['tmp_name'], APP.'webroot/files/uploads'.DS."$this->ModelName->id.mp4" )) 这确实上传了文件,但将其重命名为“->id.mp4”并给我留下了错误......
  • 警告 (2): file_put_contents(/Applications/XAMPP/xamppfiles/htdocs/evolvidsnew/app/tmp/logs/error.log) [function.file-put-contents]: 未能打开流:权限被拒绝 [CORE/Cake/Log/Engine/FileLog.php,第 69 行] filelog.php 中的第 69 行是:警告 (2):file_put_contents(/Applications/XAMPP/xamppfiles/htdocs/evolvidsnew/app/tmp/logs /error.log)[function.file-put-contents]:无法打开流:权限被拒绝 [CORE/Cake/Log/Engine/FileLog.php,第 69 行] 不太清楚这意味着什么。有什么想法吗?
猜你喜欢
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
相关资源
最近更新 更多