Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cake PHP image upload

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.

like image 425
user3579801 Avatar asked Dec 11 '22 06:12

user3579801


1 Answers

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

like image 127
s4suryapal Avatar answered Dec 18 '22 10:12

s4suryapal