2013-02-08 2 views
0

У меня есть форма, которая запрашивает имя пользователя и описание и необязательное поле для загрузки изображения. Когда пользователь загружает изображение, я хочу, чтобы имя изображения было изменено и сохранено в базе данных, и если изображение не загружено, в базе данных сохраняется имя по умолчанию. Он отлично работает, если пользователь загружает изображение, но если он этого не делает, в базу данных ничего не загружается. Это функция контроллера:Codeigniter-form с необязательным полем загрузки файлов, которое работает неожиданно

function store() 
{ 
    $this->load->model('campus_m'); 
    $config['upload_path'] = './uploads/'; 
    $config['allowed_types'] = 'gif|jpg|png|jpeg'; 
    $config['max_size'] = '100'; 
    $config['max_width'] = '1024'; 
    $config['max_height'] = '768'; 
    $config['file_name'] = preg_replace('/[^a-z0-9]+/i','-',iconv('UTF-8','ASCII//TRANSLIT',$this->input->post('name'))); 
    $config['file_name'] = trim($config['file_name'],'-').now().'.jpg';       

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

    $this->load->helper(array('form', 'url')); 

    $this->load->library('form_validation'); 

    $this->form_validation->set_rules('goods', 'Goods', 'required'); 
    $this->form_validation->set_rules('name', 'Name', 'required|max_length[12]'); 
    if ($this->form_validation->run() == FALSE) 
    { 
     $this->load->view('campus_write_v'); 
    } 
    else 
    { 
     print_r($_FILES['userfile']); 
     if (empty($_FILES['userfile'])) { 
      if(!$query = $this->campus_m->create_review("Marla-overdoses1360186300.jpg")){ 
       $data['write_campus'] = 'The answer has not been stored.'; 
       $this->load->view('campus_write_v', $data); 
      } 
      else { 
       $data['write_campus'] = 'The answer has been stored. '; 
       $this->load->view('campus_write_v', $data); 
      } 
     } 
     else 
     { 
      if($this->upload->do_upload()){ 
       if(!$query = $this->campus_m->create_review($config['file_name'])){ 
        $data['write_campus'] = 'The answer has not been stored.'; 
        $this->load->view('campus_write_v', $data); 
       } 
       else { 
        $data['write_campus'] = 'The answer has been stored. '; 
        $this->load->view('campus_write_v', $data); 
       } 
      } 
      else 
      { 
       $error = array('error' => $this->upload->display_errors()); 
       foreach ($error as $rows => $r) 
       { 
        echo $r ;     
       } 
       $this->load->view('campus_write_v');        
      } 
     } 
    } 
} 

И это мнение:

<?php 
       $attributes = array('id' => 'contactform'); 
       echo form_open_multipart('campus/store', $attributes); 
       ?> 
       <div> 
       <?php 
       echo form_label('Title of Area'); 
       $data = array(
        'name'  => 'name', 
        'id'   => 'name', 
        'placeholder' => 'Location and name of the place', 
        'required' => 'required', 
        'value'  => set_value("name") 
        ); 

       echo form_input($data);  
       ?> 
       </div> 

       <div> 
       <?php 
        $data = array(
        'name'  => 'goods', 
        'id'   => 'goods', 
        'placeholder' => 'Tell us about the place', 
        'required' => 'required', 
        'value'  => set_value("goods"), 
        'rows' => '20', 
        'cols'  => '50' 
        ); 

       echo form_textarea($data);  
       ?> 
       </div> 
       <div> 
      <input type="file" id="userfile" name="userfile" size="20" /> 
     </div> 

       <div> 
        <?php 
        $data = array(
        'class'  => 'button', 
        'value'  => 'Submit', 
        'id'   =>"submit" 
        ); 

       echo form_submit($data); 
        ?> 

     </div> 
        <?php  echo form_close(); 
        ?> 
     </div> 
+0

Должен ли я предположить, что вы не получили сообщение «Ответ не был сохранен». – cwallenpoole

ответ

2

Я решить эту проблему таким образом:

$config['upload_path'] = './uploads/'; 
$config['allowed_types'] = 'gif|jpg|png'; 

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

if($this->upload->do_upload('userfile')){ 
    $data = $this->upload->data(); 
    $photo['image'] = $data['file_name']; // Name of image 
} else { 
    $photo['image'] = "Name"; // Name that you want 
} 

Это короткий код контроллера дата загрузки ,

+0

эта строка работает для меня ... '$ this-> upload-> initialize ($ config)' – Dinesh