0

I am a bit confused as to the best way to attach this issue - I have a form that I add to the database but now I would like to upload a image.

The image is ment to go to ./includes/uploads/ and the file name is ment to be inserted into image_path

Controller

class Addsale extends CI_Controller {

function __construct(){
parent::__construct();
}
function index() {
    if(!$this->session->userdata('logged_in')) {
        redirect('admin/home');
    }
    // Set Data
    $data['title'] = "Add Sale";
    $data['sales_pages'] = $this->sales_model->getSalesPages();
    $data['cms_pages'] = $this->navigation_model->getCMSPages();

    //Set File Settings
    $config['upload_path'] = './includes/uploads/';
    $config['allowed_types'] = 'jpg|png';
    $config['max_size'] = '100';
    $config['max_width'] = '1024';
    $config['max_height'] = '768';
    $this->upload->initialize($config);

    //Set Validation
    $this->form_validation->set_rules('name', 'Name', 'trim|required');
    $this->form_validation->set_rules('location', 'Location', 'trim|required');
    $this->form_validation->set_rules('bedrooms', 'Bedrooms', 'trim|is_natural|required');
    $this->form_validation->set_rules('bathrooms', 'Bathrooms', 'trim|required');
    $this->form_validation->set_rules('condition', 'Condition', 'trim|required');
    $this->form_validation->set_rules('description', 'Description', 'trim|required');
    $this->form_validation->set_rules('price', 'Price', 'trim|required');

    if($this->form_validation->run() === TRUE) {

    $data = array(  
        'name' => $this->input->post('name', TRUE),
        'location' => $this->input->post('location', TRUE),
        'bedrooms' => $this->input->post('bedrooms', TRUE),
        'bathrooms' => $this->input->post('bathrooms', TRUE),
        'condition' => $this->input->post('condition', TRUE),
        'description' => $this->input->post('description', TRUE),
        'price' => $this->input->post('price', TRUE),
        'image_path' => $this->input->post('image', TRUE)
        );
        $data = array('image_path' => $this->upload->data());
        $this->sales_model->addSale($data);

        redirect('admin/addsale' , $data);

        $this->session->set_flashdata('success', 'Page Saved');

    }else{
        $data['content'] = $this->load->view('admin/addsale', NULL, TRUE);
        $this->load->view('template', $data);
        }

}


}   

View

<?php
//Setting form attributes
$formAddSale = array('id' => 'addSale', 'name' => 'addSale');
$saleName = array('id' => 'name', 'name' => 'name');
$saleLocation = array('id' => 'location', 'name' => 'location');
$saleBedrooms = array('id' => 'bedrooms','name' => 'bedrooms');
$saleBathrooms = array('id' => 'bathrooms','name' => 'bathrooms');
$saleCondition = array('id' => 'condition','name' => 'condition');
$saleImage = array('id' => 'image', 'name'=> 'image');
$saleDescription = array('id' => 'description','name' => 'description');
$salePrice = array('id' => 'price','name' => 'price');
?>

<section id = "validation"><?php print $this->session->flashdata('success'); ?></section>
<section id = "validation"><?php echo validation_errors();?></section>

<?php
echo form_open_multipart('admin/addsale/', $formAddSale);
echo form_fieldset();
echo form_label('Name:', 'name');
echo form_input($saleName);
echo form_label ('Location', 'location');
echo form_input($saleLocation);
echo form_label ('Bedrooms', 'bedrooms');
echo form_input($saleBedrooms);
echo form_label ('Bathrooms', 'bathrooms');
echo form_input($saleBathrooms);
echo form_label ('Condition', 'condition');
echo form_input($saleCondition);
echo form_label ('Price', 'price');
echo form_input($salePrice);
echo form_label('Image:', 'image');
echo form_upload($saleImage);
echo form_label ('Description', 'description');
echo form_textarea($saleDescription);
echo form_submit('submit','Submit');
echo form_fieldset_close();
echo form_close();
?>

Model

class Sales_model extends CI_Model
  {

function __construct() {
        parent::__construct();
}

function getSalesPages() {

        $query = $this->db->get('sales');
        if($query->num_rows() > 0) return $query->result();

    }

function addSale($data) {

$this->db->insert('sales', $data);
return;
}   

function updateSale($id, $data) {

    $this ->db->where('id', $id);
    $this->db->update('sales', $data);
}
  }

2 Answers 2

1

you never actually called the do_upload method in your controller. try:

function index() {
if(!$this->session->userdata('logged_in')) {
    redirect('admin/home');
}
// Set Data
$data['title'] = "Add Sale";
$data['sales_pages'] = $this->sales_model->getSalesPages();
$data['cms_pages'] = $this->navigation_model->getCMSPages();

//Set File Settings
$config['upload_path'] = './includes/uploads/';
$config['allowed_types'] = 'jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->upload->initialize($config);

//Set Validation
$this->form_validation->set_rules('name', 'Name', 'trim|required');
$this->form_validation->set_rules('location', 'Location', 'trim|required');
$this->form_validation->set_rules('bedrooms', 'Bedrooms', 'trim|is_natural|required');
$this->form_validation->set_rules('bathrooms', 'Bathrooms', 'trim|required');
$this->form_validation->set_rules('condition', 'Condition', 'trim|required');
$this->form_validation->set_rules('description', 'Description', 'trim|required');
$this->form_validation->set_rules('price', 'Price', 'trim|required');

if($this->form_validation->run() === TRUE) {

$data = array(  
    'name' => $this->input->post('name', TRUE),
    'location' => $this->input->post('location', TRUE),
    'bedrooms' => $this->input->post('bedrooms', TRUE),
    'bathrooms' => $this->input->post('bathrooms', TRUE),
    'condition' => $this->input->post('condition', TRUE),
    'description' => $this->input->post('description', TRUE),
    'price' => $this->input->post('price', TRUE),
    'image_path' => $this->input->post('image', TRUE)
    );

    if ( ! $this->upload->do_upload())
    {
        /// Upload Failed
        $error = array('error' => $this->upload->display_errors());
        // Print $error to user
    }
    else
    {
        // Upload Succeeded add the path to the data array
        $uploaded_file = $this->upload->data();
        $data['image_path'] = $uploaded_file['full_path'];
    }

    $this->sales_model->addSale($data);

    redirect('admin/addsale' , $data);

    $this->session->set_flashdata('success', 'Page Saved');

}else{
    $data['content'] = $this->load->view('admin/addsale', NULL, TRUE);
    $this->load->view('template', $data);
    }

}

I haven't tested this code, but I pulled the do_upload block from the documentation so it should work.

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks Lee, This did not work due to the do_upload being a function and I am trying to do it within the main index function.
Hi Jess, the do_upload() method is part of the upload class, not your controller, it should work?
0

I now have this going and this was my final code:

    if($this->form_validation->run() === TRUE) { 

//Set File Settings 
$config['upload_path'] = './includes/uploads/'; 
$config['allowed_types'] = 'jpg|png'; 
$config['max_size'] = '100'; 
$config['max_width'] = '1024'; 
$config['max_height'] = '768'; 

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

$this->upload->do_upload();
$file_info = $this->upload->data();

$data = array(   
    'name' => $this->input->post('name', TRUE), 
    'location' => $this->input->post('location', TRUE), 
    'bedrooms' => $this->input->post('bedrooms', TRUE), 
    'bathrooms' => $this->input->post('bathrooms', TRUE), 
    'condition' => $this->input->post('condition', TRUE), 
    'description' => $this->input->post('description', TRUE), 
    'price' => $this->input->post('price', TRUE), 
    'image' => $file_info['full_path'] 
    ); 
$this->sales_model->addSale($data); 
} 

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.