在codeigniter中上传不起作用.原因是什么呢?


Uploading in codeigniter doesn't work. what can be the reason?

这是控制器,我没有错误

public function admin_page(){
    if($this->input->post('add_product')){               
        if(empty($_FILES['userfile']['name'])){
            $data = array(
                'category' => $this->input->post('category') ,
                'product_name' => $this->input->post('name') ,
                'description' => $this->input->post('description'),
                'image' => 'no_image.jpg'
            );
        } else{                     
            $config['upload_path'] = './public/images/';
            $config['allowed_types'] = 'gif|jpg|png|jpeg|JPG';
            $config['max_size'] = '1000';
            $this->load->library('upload', $config);
            $this->upload->do_upload('userfile');
            echo 'uploaded :)';
            $data = array(
                'category' => $this->input->post('category') ,
                'product_name' => $this->input->post('name') ,
                'description' => $this->input->post('description'),
                'image' => $_FILES['userfile']['name'] 
            );           
        }      
        $this->load->model('products');
        $this->products->add_product($data);
    }
    $this->load->view('admin_page');
}
视图

<form action="<?php echo base_url();?>admin/admin_page" method="post" enctype="multipart/form-data">
        <div class="col-xs-3">
            <div class="form-group">
                <label for="exampleInputEmail1"> Product name </label>
                <input type="text" name="name" class="form-control" >
            </div>
            <div class="form-group">
                <label for="exampleInputEmail1"> Category </label>
                <input type="text" name="category" class="form-control">
            </div>
            <div class="form-group">
                <label for="exampleInputEmail1"> Description </label>
                <textarea class="form-control" name="description" rows="3"></textarea>
            </div>
            <div class="form-group">
                <label for="exampleInputEmail1"> Image </label>
                <input type="file" name="userfile" class="form-control">
            </div>
            <input type="submit" name="add_product" class="btn btn-default" value="OK" />
        </div>
    </form>
</div>

注意:codeigniter 3的检查事项。

确保控制器和模型名称的首字母大写Admin.phpclass Admin extends CI_Controller {

和模型Products.php和class Products extends CI_Model {

CI2上传http://www.codeigniter.com/userguide2/libraries/form_validation.html

CI3上传http://www.codeigniter.com/user_guide/libraries/file_uploading.html

控制器

<?php
class Admin extends CI_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->helper(array('form', 'url'));
        $this->load->library('form_validation');
        $this->load->library('upload');
        //$this->load->model('products'); 
    }
    public function index() {
    }
    public function admin_page() {
        $this->form_validation->set_rules('name', 'Name', 'required');
        $this->form_validation->set_rules('category', 'Category', 'required');
        $this->form_validation->set_rules('description', 'Description', 'required');
        if ($this->form_validation->run() == FALSE)  {
            $data['upload_errors'] = $this->upload->display_errors();
            $this->load->view('admin_page', $data);
        } else {

            /*
            * If userfile checks if.
            *
            */
            if (!empty($_FILES['userfile']['name'])) {
                /*
                *  
                *  Make sure your images upload path is on the main directory
                *
                *  application
                *  public 
                *  public > images
                *  system
                *  .htaccess
                *  index.php
                *
                */
                $config['upload_path'] = './public/images/';
                $config['allowed_types'] = 'gif|jpg|png';
                $config['max_size'] = '3000';
                $config['max_width']  = '0';
                $config['max_height']  = '0';
                $this->upload->initialize($config);
                $field_name = 'userfile';
                if ( ! $this->upload->do_upload($field_name)) {
                    $data['upload_errors'] = $this->upload->display_errors();
                    $this->load->view('admin_page', $data);
                } else {
                    /*
                    * Using the variable below you are able to get codeigniter file upload info.
                    * Note: Codeigniter upload only made for one file
                    * $upload_data = $this->upload->data();
                    *
                    */
                    $upload_data = $this->upload->data();
                    $data = array(
                        'category' => $this->input->post('category') ,
                        'product_name' => $this->input->post('name') ,
                        'description' => $this->input->post('description'),
                        'image' => $upload_data['file_name'] 
                    );
                    $this->products->add_product($data);
                    $data['upload_errors'] = '';
                    $this->load->view('admin_page', $data);
                }

                /*
                    If no image isset
                */
            } else {
               echo "No File Isset";

                $data = array(
                    'category' => $this->input->post('category') ,
                    'product_name' => $this->input->post('name') ,
                    'description' => $this->input->post('description'),
                    'image' => 'no_image.jpg'
                );

                $this->products->add_product($data);
                $data['upload_errors'] = '';
                $this->load->view('admin_page', $data);
            }
        }
    }
}
<<p> 视图/strong>

将输入提交更改为按钮提交。

<div class="container">
<?php echo validation_errors('<div class="alert alert-danger">', '</div>'); ?>
<?php if ($upload_errors) {?>
    <div class="alert alert-info"><?php echo $upload_errors;?></div>
<?php }?>
<?php echo form_open_multipart('admin/admin_page');?>
    <div class="form-group">
        <label>Product name</label>
        <input type="text" name="name" class="form-control" value="<?php echo set_value('name');?>" size="50">
    </div>
    <div class="form-group">
        <label>Category</label>
        <input type="text" name="category" value="<?php echo set_value('category');?>" class="form-control" size="50">
    </div>
    <div class="form-group">
        <label>Description</label>
        <textarea class="form-control" name="description" rows="3"></textarea>
    </div>
    <div class="form-group">
        <label>Image</label>
        <input type="file" name="userfile" size="20">
    </div>
    <div class="form-group">    
        <button type="submit" class="btn btn-default">Save</button>
    </div>
<?php echo form_close();?>
</div>

我将使用codeigniter的form_open_multipart() http://www.codeigniter.com/user_guide/helpers/form_helper.html

一切尽在掌握