2014-09-16 3 views
0

В моем контроллере у меня есть следующие функции, которые загружают изображение в локальный каталог, который отлично работает. Теперь я хочу сохранить в db. Мне просто нужно выяснить, где поставить код, который у меня уже есть, и думаю, что это правильно., где я помещаю insert db query codeigniter

мне нужно вставить этот:

$this->location->store_file_path($file); 

в либо до, либо после того, как рис будет загружен в локальном каталоге. Куда он должен идти?

Контроллер:

public function image() { 

    //type must either be type=logo or type=profile_picture 

    if (isset($_FILES['file']) && isset($_POST['type'])) { 

     //Codeigniter upload 
     $config['upload_path'] = 'uploads/'; 
     $config['allowed_types'] = 'gif|jpg|png'; 
     $config['encrypt_name'] = TRUE; 
     $config['max_size'] = 5120; 
     $config['max_width'] = '1024'; 
     $config['max_height'] = '768'; 
     $this->upload->initialize($config); 

     if (!$this->upload->do_upload('file')) { 

      $status = 'error'; 
      $msg = $this->upload->display_errors('', ''); 
     } else { 
      $data = $this->upload->data(); 
      //$file_id = $this->files_model->insert_file($data['file_name'], $_POST['title']); 
      if ($data) { 
       $status = "success"; 
       $data['url'] = $config['upload_path'] . $data['file_name']; 
       $msg = $data; 
      } else { 
       unlink($data['full_path']); 
       $status = "error"; 
       $msg = "Something went wrong when saving the file, please try again."; 
      } 


     } 
    } else { 
     $status = "error"; 
     $msg = "Please select a file to upload"; 
    } 
    echo json_encode(array('status' => $status, 'msg' => $msg)); 
} 

Вот моя модель функция:

public function store_file_path($file) 
{ 

    $this->db->insert('TACTIFY_locationcards', 'name'=>$file); 
} 
+0

только что отредактированный и обновленный переданный параметр. – 2014-09-16 07:05:03

+0

просто вставьте его, как обычно, используя активную запись, в вашем случае нет ничего особенного. – Ghost

+0

Просто личный совет, в то время как это ваше приложение, и вы можете разместить свой код там, где хотите (вам не нужно использовать модели), вероятно, лучше разместить свой код загрузки в модели, возможно, как другой метод. Это связано с тем, что, если вы решите, что хотите иметь другой метод загрузки для этой же цели, вам нужно будет дублировать код загрузки в контроллере. Размещение его и вызов того же кода из модели уменьшали бы дублирование. –

ответ

0

измените следующую строку в контроллере

$status = "success"; 
+ $file = $config['upload_path'] . $data['file_name']; 
+ $this->location->store_file_path($file); 
$msg = $file; 

изменить модель

public function store_file_path($file) 
{ 
    + $this->db->set('name', $file); 
    + $this->db->insert('TACTIFY_locationcards'); 
    - $this->db->insert('TACTIFY_locationcards', 'name'=>$file); 
} 
0

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

Если я прочитал ваш код правильно успеха в точке:

  if ($data) { 
      $status = "success"; 
      $data['url'] = $config['upload_path'] . $data['file_name']; 
      $msg = $data; 

Я бы поставил линию здесь:

  if ($data) { 
      $status = "success"; 
      $data['url'] = $config['upload_path'] . $data['file_name']; 
      $msg = $data; 
      $this->location->store_file_path($file); 
Смежные вопросы