Загрузить запрос Codeigniter - PullRequest
0 голосов
/ 05 апреля 2011

Я выполнил приведенный ниже код и теперь получаю сообщение об ошибке базы данных -> По-прежнему не удается загрузить его:

Ошибка:

Column 'image_path' cannot be null

Структура базы данных

Контроллер:

class Addsale extends CI_Controller {

function __construct(){
parent::__construct();
}
function index() {
if(!$this->session->userdata('logged_in')) {
    redirect('admin/home');
}
// Main Page Data
$data['cms_pages'] = $this->navigation_model->getCMSPages();
$data['title'] = 'Add Sale';
$data['content'] = $this->load->view('admin/addsale', $data);

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

//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) {
$this->load->library('upload', $config);
$file_info = $this->upload->do_upload();
$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' => $file_info['full_path']
    );
$this->sales_model->addSale($data);
   }
}

function do_upload(){

    //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';


}


}

Модель:

    function addSale($data) {

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

Оригинальный код:

Здравствуйте,

У меня есть следующий раздел кода:

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('userfile', TRUE)
        );
    $this->load->library('upload', $config);
    $this->upload->do_upload(); 
       }
    }

Я пытаюсь сделать, когда форма действительнасохраните данные в базу данных (работает нормально) и загрузите изображение.

Мне было трудно из-за того, что я не могу сохранить имя пользователя для имени файла, и файл не будет загружен.

Можно ли это сделать с помощью функции индекса?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2011

Загруженные файлы не включаются в сообщение вообще, поэтому вы не можете получить имя так, как вы хотите.Вместо этого вам нужно будет сделать что-то вроде этого:

if($this->form_validation->run() === TRUE) {    
    $this->load->library('upload', $config);
    $file_info = $this->upload->do_upload(); 

    $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' => $file_info['full_path']
    );
}

Это поместит полный путь в вашу базу данных, если вы просто хотите, чтобы имя файла использовало «client_name» или что-то еще (см. Ответ Росса для справки)

0 голосов
/ 05 апреля 2011

Функция $this->upload->do_upload() возвращает массив информации о загруженном файле.

Итак:

$upload_data = $this->upload->do_upload();
print_r($upload_data); // to see everything

Array
(
    [file_name]    => mypic.jpg
    [file_type]    => image/jpeg
    [file_path]    => /path/to/your/upload/
    [full_path]    => /path/to/your/upload/jpg.jpg
    [raw_name]     => mypic
    [orig_name]    => mypic.jpg
    [client_name]  => mypic.jpg
    [file_ext]     => .jpg
    [file_size]    => 22.2
    [is_image]     => 1
    [image_width]  => 800
    [image_height] => 600
    [image_type]   => jpeg
    [image_size_str] => width="800" height="200"
)

Таким образом, в зависимости от того, какое значение вам нужно, вы сначала захотите выполнить загрузку, и, если она прошла успешно, продолжите обработку данных POST. Затем вы можете сделать это в вашем массиве $data:

'image_path' => $upload_data['file_name']; // adjust value to get what you want.

и тебе пора идти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...