[英]Why is this upload file code not working in CakePHP
I have a problem with the upload of files in CakePHP 2.1. 我在CakePHP 2.1中上传文件时遇到问题。 In fact, I always have the error:
事实上,我总是有错误:
Column not found: 1054 Unknown column 'Array' in 'field list'.
for the view: 对于视图:
<?php echo $this->Form->create('Ecole',array('enctype' => 'multipart/form-data')); ?>
<?php echo $this->Form->input('Ecole.logo_ecole', array('type'=>'file','class'=>'','label'=>'')); ?>
When I remove array('enctype' => 'multipart/form-data')
I don't have the error but the upload don't work either. 当我删除
array('enctype' => 'multipart/form-data')
我没有错误,但上传也不起作用。
For the controller: 对于控制器:
if(!empty($this->data))
{
debug($this->data);
$ext = 'jpg';
// Save success
if($this->Ecole->save($this->data))
{
// Destination folder, new filename and destination path
$dest_folder = IMAGES . DS . 'galleries' . DS . $this->Ecole->id;
$new_filename = $this->Ecole->id. '.' .$ext;
$dest_path = $dest_folder . DS . $new_filename;
// Check if destination folder exists and create if it doesn't
if(!is_dir($dest_folder))
{
mkdir($dest_folder, 0755, true);
}
// We move the picture and rename it with his id
if(move_uploaded_file($this->data['Ecole']['logo_ecole']['tmp_name'], $dest_path))
{
// Show success flash message
$this->Session->setFlash(__('Picture successfully added !', true), 'default', array('class' => 'success'));
echo "<script> parent.location.reload(true); parent.jQuery.fancybox.close(); </script>";
}
// Move failed
else
{
// Delete picture
//$this->Ecole->delete($this->Ecole->id);
// Show error flash message
$this->Session->setFlash(__('Error occurred while adding picture !', true), 'default', array('class' => 'error'));
}
}
// Save failed
else
{
// Show error flash message
$this->Session->setFlash(__('Error occurred while adding picture !', true), 'default', array('class' => 'error'));
}
}
Can anyone explain what I'm doing wrong and how to do it right? 任何人都可以解释我做错了什么以及如何正确做到这一点?
to do multipart/form-data, you have to specify it this way with the helper 要执行multipart / form-data,您必须使用帮助程序以这种方式指定它
<?php echo $this->Form->create('Ecole', array('type' => 'file')); ?>
The type can be 'post', 'get', 'file', 'put' or 'delete'
. 类型可以是
'post', 'get', 'file', 'put' or 'delete'
。 Please see the sections Options for create
here in the FormHelper documentation ! 请参阅FormHelper文档中的“
Options for create
”部分!
It's probably because you're trying to save the array cake generates when uploading a file ( $this->data['Ecole']['logo_ecole']
is an array). 这可能是因为你在上传文件时试图保存阵列蛋糕(
$this->data['Ecole']['logo_ecole']
是一个数组)。 Are you meaning to save only the filename to the database? 您是否只想将文件名保存到数据库中?
i have modify your code please take a look 我修改了你的代码请看一下
and please not remove array('enctype' => 'multipart/form-data')
this line in form 请不要在表格中删除
array('enctype' => 'multipart/form-data')
<?php
if(!empty($this->data))
{
debug($this->data);
$ext = 'jpg';
// Destination folder, new filename and destination path
$dest_folder = IMAGES . DS . 'galleries' . DS . $this->Ecole->id;
$new_filename = $this->Ecole->id. '.' .$ext;
$dest_path = $dest_folder . DS . $new_filename;
// Check if destination folder exists and create if it doesn't
if(!is_dir($dest_folder))
{
mkdir($dest_folder, 0755, true);
}
$image='';
// We move the picture and rename it with his id
if(move_uploaded_file($this->data['Ecole']['logo_ecole']['tmp_name'], $dest_path))
{
$image = basename($this->data['Ecole']['logo_ecole']['name'])
// Show success flash message
$this->Session->setFlash(__('Picture successfully added !', true), 'default', array('class' => 'success'));
echo "<script> parent.location.reload(true); parent.jQuery.fancybox.close(); </script>";
}else
{
// Delete picture
//$this->Ecole->delete($this->Ecole->id);
// Show error flash message
$this->Session->setFlash(__('Error occurred while adding picture !', true), 'default', array('class' => 'error'));
}
$this->data['Ecole']['logo_ecole'] = $image;
// Save success
if(!$this->Ecole->save($this->data))
{
// Show error flash message
$this->Session->setFlash(__('Error occurred while adding picture !', true), 'default', array('class' => 'error'));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.