Загрузка файла CakePHP 2.0, $data не действует

Я работаю над сайтом, который позволит мне загружать файлы на сервер, я пытаюсь переименовать файл в соответствующий идентификатор mysql, который вставляется с информацией.

Это работает, но каждый раз, когда я загружаю файл, он перезаписывает последний загруженный файл.

это мой код

   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, строка 58] Примечание (8): Неопределенный индекс: имя события [APP/Controller/uploads_controller.php, строка 59 ] Примечание (8): Косвенное изменение перегруженного свойства UploadsController::$data не имеет никакого эффекта [APP/Controller/uploads_controller.php, строка 59] Примечание (8): Неопределенный индекс: описание [APP/Controller/uploads_controller.php, строка 60] Примечание (8): косвенное изменение перегруженного свойства UploadsController::$data не имеет никакого эффекта [APP/Controller/uploads_controller.php, строка 60]

Я не совсем понимаю, что происходит на самом деле? Также я должен использовать функцию mysqli_insert_id() вместо mysql_insert_id()? Я действительно не знаю, как работает mysqli_insert_id(), помогите, ребята???


person 001221    schedule 01.03.2012    source источник
comment
информация из моей формы, однако, вводится в базу данных, поэтому я не совсем понимаю, что означает, что $data не имеет никакого эффекта, когда данные загружаются в базу данных. Но загрузка файла не работает, так как он перезаписывает загружаемый файл.   -  person 001221    schedule 01.03.2012


Ответы (1)


Вы пытаетесь манипулировать $this->data, который в Cake 2.0 доступен только для чтения. Вам следует использовать новый объект CakeRequest, представленный в Cake 2.0.

Итак, $this->data становится: $this->request->data.

Что касается mysql_insert_id(), я не уверен, где вы сохраняете данные в таблицу базы данных. Cake хранит id последней вставленной записи в $this->ModelName->id, так что вы можете использовать и его.

person mensch    schedule 01.03.2012
comment
Привет, я сделал, как вы сказали, и теперь я получаю эти ошибки, Примечание (8): Попытка получить свойство не-объекта [APP/Controller/uploads_controller.php, строка 55] Примечание (8): Неопределенный индекс: имя события [APP/ Controller/uploads_controller.php, строка 59] Уведомление (8): Неопределенный индекс: описание [APP/Controller/uploads_controller.php, строка 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] - person 001221; 02.03.2012
comment
Я использую функцию mysql_insert_id, так как хочу, чтобы имя файла, загруженного с использованием моей формы, было переименовано в соответствующее поле в таблице SQL, поэтому, если идентификатор этой записи равен 32, имя файла будет переименовано в 32.mp4 - person 001221; 02.03.2012
comment
Ошибки, которые вы перечисляете, возникают из-за запроса несуществующих ключей в массиве $this->request->data. Вы можете увидеть, что находится в массиве, поместив его в вызов debug(). $this->ModelName->id более или менее псевдоним для mysql_insert_id(). - person mensch; 03.03.2012
comment
Вместо того, чтобы использовать предыдущий код для добавления данных в данные 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 и оставляет меня с ошибкой...... - person 001221; 03.03.2012
comment
Предупреждение (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] Строка 69 в файле log.php: Предупреждение (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] Не совсем уверен, что это значит. Любые идеи? - person 001221; 03.03.2012
comment
Попробуйте APP.'webroot/files/uploads'.DS.$this->ModelName->id.'.mp4'. Другая ошибка связана с тем, что ваш каталог logs недоступен для записи. Но обе проблемы проистекают из довольно простых функций PHP. Возможно, вы захотите немного больше познакомиться с основами PHP, прежде чем углубляться в такие фреймворки, как Cake, которые добавляют еще один уровень абстракции поверх основного языка, на котором вы пишете. - person mensch; 04.03.2012
comment
я пробовал это раньше, и это не сработало, это дает мне это сообщение об ошибке, уведомление (8): попытка получить свойство не-объекта [APP/Controller/uploads_controller.php, строка 44] - person 001221; 05.03.2012
comment
Вы должны заменить ModelName на имя модели, из которой вы хотите получить последний вставленный идентификатор. - person mensch; 05.03.2012
comment
Хорошо, я изменил его на $this-›Upload-›id, я даже использовал вариант LastInsertID getInsertID, однако это не загружает файл на сервер, а если и загружает, то перезаписывает файл или просто называет его 1.mp4 вместо, например, 115.mp4, однако он загружает такую ​​информацию, как имя и описание, в таблицу mysql. мне кажется странным, что эта строка кода не влияет на имя файла - person 001221; 06.03.2012
comment
Без полного кода модели и контроллера трудно сказать, почему вы не получаете последний вставленный идентификатор, но это может вызвать другой вопрос, поскольку этот вопрос изначально был о $this->data. Что касается move_uploaded_file, перезапись файлов с тем же именем является предполагаемым поведением, как указано в записи руководства PHP для этой функции. - person mensch; 07.03.2012
comment
Я обнаружил проблему в том, что данные из формы необходимо сначала сохранить, прежде чем переименовывать файл в идентификатор sql. Я ценю всю вашу помощь! - person 001221; 07.03.2012