Sachin Singh
Sachin Singh

Reputation: 81

i am not understanding how to upload image in codeigniter

Below i have code of my form data with image but it was not working. i tried to insert data without image the data inserted into db. but when i tried to insert with image the form error raised and redirecting to targeted page. Below i have mvc code please while giving edited answer also explain me why my code didn't worked and how your code worked instead of copy paste i want to learn concept behind it.please.

//my form view code
<?php echo form_open_multipart('admin/uauthor');?>
        <h5><label>Username Here:</label></h5>
        <?php echo form_input(['name'=>'aname','class'=>'form-control','placeholder'=>'Enter your name here']);?>
        <h5><label>Mail Here:</label></h5>
        <?php echo form_input(['name'=>'amail','class'=>'form-control','placeholder'=>'Enter your Mail here']);?>
        <h5><label>Password Here:</label></h5>
        <?php echo form_input(['name'=>'apwd','type'=>'password','class'=>'form_control','placeholder'=>'Enter your password here']);?>
        <h5><label>Phone Here:</label></h5>
        <?php echo form_input(['name'=>'aphone','class'=>'form-control','placeholder'=>'Enter your phone here']);?>
        <h5><label>Profile Pic Here:</label></h5>
        <?php echo form_upload(['name'=>'apic','class'=>'form-control']);?>
        <select name="alevel" class="form-control">
            <option value="admin">Admin</option>
            <option value="author">Author</option>
        </select><br>
        <button type="submit" class="btn btn-success">Add Author</button>
        <?php form_close();?>


----------
//my Controller code
public function uauthor()
    {
        $this->form_validation->set_rules('aname','Author Name','required');
        $this->form_validation->set_rules('amail','Author Mail','required|is_unique[admin.amail]',array(
                'required'      => 'You have not provided %s.',
                'is_unique'     => 'This %s already exists.'
        ));
        $this->form_validation->set_rules('aphone','Author Phone','required|is_unique[admin.aphone]',array(
                'required'      => 'You have not provided %s.',
                'is_unique'     => 'This %s already exists.'
        ));
        $this->form_validation->set_rules('apwd','Author Password','required');

        if ($this->form_validation->run()){
            $config = [
                    'upload_path' => './uploads/authors',
                    'allowed_types' => 'jpg|gif|png|jpeg',
                ];
            $this->load->library('upload', $config);
            $data= $this->input->post();
            if(! $this->upload->do_upload()){
                $this->session->set_flashdata('pmsg',"Author Upload Failed Please Try Again");
                return redirect('admin/aauthor');
         }else{
                 $info = $this->upload->data();
                 $image_path = $info['raw_name'] . $info['file_ext'];
                 $data['apic'] = $image_path;
         }
            $this->adata->uauthorQ($data);
            $this->session->set_flashdata('amsg', 'Author Added Successfully');
            return redirect('admin/authors');
        }else{
            $this->session->set_flashdata('pmsg', validation_errors());
            return redirect('admin/aauthor');
        }
    }


----------
//My Model code
public function uauthorQ($data)
    {
        return $this->db->insert('admin',$data);
    }

Upvotes: 0

Views: 68

Answers (3)

Tassadaq Hussain
Tassadaq Hussain

Reputation: 19

 public function do_upload()
 {
    $config['upload_path']          = './uploads/';
    $config['allowed_types']        = 'gif|jpg|png|pdf';
    $config['max_size']             = 100;
    $config['max_width']            = 1024;
    $config['max_height']           = 768;

    $this->load->library('upload', $config);

    if ( ! $this->upload->do_upload('userfile'))
    {
        $error = array('error' => $this->upload->display_errors());

        $this->load->view('welcome_message', $error);
    }
    else
    {
        $data = array('upload_data' => $this->upload->data());

        $this->load->view('upload_success', $data);
    }
}

html

    <?php echo form_open_multipart('upload/do_upload');?>

    <input type="file" name="userfile" size="20" />

    <br /><br />

    <input type="submit" value="upload" />

    </form>

Upvotes: 1

Ali Qorbani
Ali Qorbani

Reputation: 1263

do some changes on your controller. inserting data must be as array of fields. so i have changed some $data as array.

             $data['aname'] = $this->input->post('aname');

             $data['amail'] = $this->input->post('amail');

             $data['apwd'] = md5($this->input->post('apwd'));

             $data['aphone'] = $this->input->post('aphone');
//my Controller code
public function uauthor()
    {
        $this->form_validation->set_rules('aname','Author Name','required');
        $this->form_validation->set_rules('amail','Author Mail','required|is_unique[admin.amail]',array(
                'required'      => 'You have not provided %s.',
                'is_unique'     => 'This %s already exists.'
        ));
        $this->form_validation->set_rules('aphone','Author Phone','required|is_unique[admin.aphone]',array(
                'required'      => 'You have not provided %s.',
                'is_unique'     => 'This %s already exists.'
        ));
        $this->form_validation->set_rules('apwd','Author Password','required');

        if ($this->form_validation->run()){
            $config = [
                    'upload_path' => './uploads/authors',
                    'allowed_types' => 'jpg|gif|png|jpeg',
                ];
            $this->load->library('upload', $config);

            if(! $this->upload->do_upload('apic')){
                $this->session->set_flashdata('pmsg',"Author Upload Failed Please Try Again");
                return redirect('admin/aauthor');
         }else{
                 $info = $this->upload->data();
                 $image_path = $info['raw_name'] . $info['file_ext'];
                 $data['apic'] = $image_path;
                 $data['aname'] = $this->input->post('aname');
                 $data['amail'] = $this->input->post('amail');
                 $data['apwd'] = md5($this->input->post('apwd'));
                 $data['aphone'] = $this->input->post('aphone');
         }
            $this->adata->uauthorQ($data);
            $this->session->set_flashdata('amsg', 'Author Added Successfully');
            return redirect('admin/authors');
        }else{
            $this->session->set_flashdata('pmsg', validation_errors());
            return redirect('admin/aauthor');
        }
    }

Upvotes: 0

Hasta Dhana
Hasta Dhana

Reputation: 4719

Change this :

$this->upload->do_upload()

to this :

$this->upload->do_upload('apic')

so it will using 'apic' instead of the default 'userfile' input field name

Upvotes: 1

Related Questions