2013-07-24 203 views
1

這不是一個如何上傳圖片的問題。我幾乎成功地在我的添加客戶端功能中添加了圖片上傳功能。當我嘗試上傳一個有效的文件時,它工作正常..但是當我選擇一個無效的文件或更大的文件,然後顯示未定義的變量upload_data和codeigniter數據庫錯誤,其中img_pathNULL它說Column 'img_path' cannot be null。爲什麼這個功能不起作用$this->upload->display_errors();。驗證錯誤顯示很好,但沒有顯示文件驗證錯誤。圖片上傳使用codeigniter文件上傳類

我使用笨和HMVC

這裏是我的控制器

<?php 

class Clients extends MX_Controller{ 

    function __construct(){ 
     parent::__construct(); 
     $this->load->model('mdl_clients'); 
    } 

    function add(){ 
     $data['success'] = null; 
     $data['errors']= null; 
     if($_POST){ 
      $config_arr = array(
       'upload_path' => './uploads/', 
       'allowed_types' => 'gif|jpg|png', 
       'max_size'  => '2048', 
       'max_width'  => '1024', 
       'max_height' => '768', 
       'encrypt_name' => true, 
       );   
      $this->load->library('upload', $config_arr); 
      if (!$this->upload->do_upload()) { 
       $data['errors'] = $this->upload->display_errors(); // this isn't working 
      } else { 
       $upload_data = $this->upload->data(); 
      } 

      $config=array(
       array(
        'field'=>'firstName', 
        'label'=>'First Name', 
        'rules'=>'required|max_length[15]|min_length[3]' 
       ), 
       array(
        'field'=>'city', 
        'label'=>'City', 
        'rules'=>'required' 
       ), 
       array(
        'field'=>'mobile_phone', 
        'label'=>'Mobile Number', 
        'rules'=>'required' 
       ), 
       array(
        'field'=>'email', 
        'label'=>'Email', 
        'rules'=>'required|is_unique[clients.email]|valid_email' 
       ), 
      ); 
      $this->load->library('form_validation'); 
      $this->form_validation->set_rules($config); 
      if($this->form_validation->run() == FALSE){ 
       $data['errors'] = validation_errors(); 
      }else{ 
       $data=array(
        'img_path'=>$upload_data['file_name'], 
        'firstName'=>$_POST['firstName'], 
        'email'=>$_POST['email'], 
        'city'=>$_POST['city'], 
        'mobile_phone'=>$_POST['mobile_phone'], 
       ); 
       $this->mdl_clients->add($data); 
       $data['success'] = 1; 
       $data['errors']= 0; 
      } 
     } 
      $data['title'] = 'Add Client Database'; 
      $data['main_content'] = 'clients/add'; 
      echo Modules::run('templates/admin', $data); 

    } 

和我的視圖文件.. add.php

<? if($success==1) {?> 
    <div class="alert alert-success"> 
     <a class="close" data-dismiss="alert" href="#">&times;</a> 
     Data Has been Updated ! 
    </div> 
<? } ?> 
<?php if($errors) { ?> 
    <div class="alert alert-error" > 
     <a class="close" data-dismiss="alert" href="#">&times;</a> 
     <?=$errors?> 
    </div> 
<? } ?> 

<?php $attributes = array('class' => 'form-horizontal'); 
echo form_open_multipart('clients/add', $attributes); ?> 
    <fieldset> 
     <!-- Address form --> 

<h2>Client Information</h2> 
<hr /> 
All Fields Marked with <span style="color: red;">*</span> is necessary . 
    <hr /> 

     <!-- Upload input--> 
     <div class="control-group"> 
      <label class="control-label">Upload<span style="color: red;">*</span></label> 
      <div class="controls"> 
       <input name="userfile" name="userfile" type="file" 
       class="input-xlarge"> 
       <p class="help-block"></p> 
      </div> 
     </div> 

     <!-- firstName input--> 
     <div class="control-group"> 
      <label class="control-label">First Name<span style="color: red;">*</span></label> 
      <div class="controls"> 
       <input id="firstName" name="firstName" type="text" placeholder="First Name" 
       class="input-xlarge" required> 
       <p class="help-block"></p> 
      </div> 
     </div> 
     <!-- Email input--> 
     <div class="control-group"> 
      <label class="control-label">E-Mail<span style="color: red;">*</span></label> 
      <div class="controls"> 
       <input id="email" name="email" type="text" placeholder="A Valid Email Address" 
       class="input-xlarge" required> 
       <p class="help-block"></p> 
      </div> 
     </div> 
     <!-- City input--> 
     <div class="control-group"> 
      <label class="control-label">City<span style="color: red;">*</span></label> 
      <div class="controls"> 
       <input id="city" name="city" type="text" placeholder="City Name" 
       class="input-xlarge" required> 
       <p class="help-block"></p> 
      </div> 
     <!-- Mobile input--> 
     <div class="control-group"> 
      <label class="control-label">Mobile Number<span style="color: red;">*</span></label> 
      <div class="controls"> 
       <input id="mobile_phone" name="mobile_phone" type="text" placeholder="Current Mobile Phone Number" 
       class="input-xlarge" required> 
       <p class="help-block"></p> 
      </div> 
     </div> 

     <!-- Button --> 
     <div class="control-group"> 
      <div class="controls"> 
       <button class="btn btn-success">Add to Database</button> 
      </div> 
     </div> 
    </fieldset> 
</form> 

回答

3

假設的輸入元素:

<input type="file" name="image" id="image"> 

更改以下行:

!$this->upload->do_upload() 

到:

!$this->upload->do_upload('image') 

請讓我知道,如果你面對任何問題。

UPDATE

如果你想將它發送到模板,然後做這樣的事情:

if (!$this->upload->do_upload()) {  
    $error = array('error' => $this->upload->display_errors()); 
    $this->session->set_flashdata('msg',$error['error']); 
    redirect('controller_name/function_name','refresh'); 
} 

讓我知道這對你的作品。

+0

但這並沒有繼續工作......就像我說的有效文件上傳工作,但我認爲它不能傳文件驗證$數據[ '錯誤']通過模板.. – shahriar31

+0

請檢查我更新的答案 – ABorty

+0

checked .. but not working ...我會再次檢查整個邏輯,讓我們看看是否有任何邏輯出錯.. :( – shahriar31

0

在進行表單驗證時,您是否考慮了是否存在上傳錯誤。您應該檢查是否有上傳錯誤或不高於表單驗證

if($data['errors'] != '') 
{ 
    //do something, probably redirect back to the view and show the errors 
} 
else 
{ 
    if($this->form_validation->run() == FALSE) 
    { 
     $data['errors'] = validation_errors(); 
    } 
    else 
    { 
     $data=array(
      'img_path'=>$upload_data['file_name'], 
      'firstName'=>$_POST['firstName'], 
      'email'=>$_POST['email'], 
      'city'=>$_POST['city'], 
      'mobile_phone'=>$_POST['mobile_phone'], 
     ); 
     $this->mdl_clients->add($data); 
     $data['success'] = 1; 
     $data['errors']= 0; 
    } 
} 
+0

Thx for ans bro。在我自己的代碼看了幾個小時後,我找到了一個解決方案。我將數據庫字段從not null更改爲null,並將空值發送給數據庫..這就是爲什麼...在$ upload_data = $ this- > upload-> data();'並將它粘貼在'$ this-> mdl_clients-> add($ data);'後面。「效果很好 – shahriar31

+0

很高興知道你的問題解決了 –