I'm new to cake PHP and I need some help with uploading an image. I need to allow a user to upload an image and I want that image to be saved in the directory(www/CakePHP/app/webroot/img/), and also would like the database to store the file path of the image. This is what I have got so far,
ProductsADD.ctp:
<div class="products form">
<?php echo $this->Form->create('Product'); ?>
<fieldset>
<legend><?php echo __('Add Product Details'); ?></legend>
<?php
echo $this->Form->input('product_name', array('required'=>false));
echo $this->Form->input('product_model_number', array('required'=>false));
echo $this->Form->input('product_brand', array('required'=>false));
echo $this->Form->input('product_description', array('required'=>false));
echo $this->Form->input('price_bronze', array('required'=>false));
echo $this->Form->input('price_silver', array('required'=>false));
echo $this->Form->input('price_gold', array('required'=>false));
echo $this->Form->input('upload', array('type'=>'file'));
?>
</fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
</div>
productscontroller:
public function add() {
if ($this->request->is('post')) {
$this->Product->create();
if ($this->Product->save($this->request->data)) {
$this->Session->setFlash(__('The product has been saved.'));
return $this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The product could not be saved. Please, try again.'));
}
if(!empty($this->data))
{
//Check if image has been uploaded
if(!empty($this->data['products']['upload']['name']))
{
$file = $this->data['products']['upload']; //put the data into a var for easy use
$ext = substr(strtolower(strrchr($file['name'], '.')), 1); //get the extension
$arr_ext = array('jpg', 'jpeg', 'gif'); //set allowed extensions
//only process if the extension is valid
if(in_array($ext, $arr_ext))
{
//do the actual uploading of the file. First arg is the tmp name, second arg is
//where we are putting it
move_uploaded_file($file['tmp_name'], WWW_ROOT . 'CakePHP/app/webroot/img/' . $file['name']);
//prepare the filename for database entry
$this->data['products']['product_image'] = $file['name'];
}
}
//now do the save
$this->products->save($this->data) ;
}
}
}
I can't seem to figure out why the uploaded image does not get saved to the directory. Can someone please help.
While creating new form in cakephp with file input, you have to set 'enctype'=>'multipart/form-data'
code should be like this :
<?php echo $this->Form->create('Product',array('enctype'=>'multipart/form-data')); ?>
i hope this will works
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With