2013-07-24 199 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

很高兴知道你的问题解决了 –