Php codeigniter:如何从do_上传功能中获取错误或成功数据并在同一视图中显示

Php codeigniter:如何从do_上传功能中获取错误或成功数据并在同一视图中显示,php,codeigniter,file-upload,image-uploading,Php,Codeigniter,File Upload,Image Uploading,如果选择了一个图像,那么我想上传该图像并将文件名存储到db,否则我想在db文件名中存储为“default_brand.png”,并且不会上传任何文件。在下面的do_upload函数中,如果发生错误,则我希望在同一视图上显示该错误,如果没有错误且图像上载成功,则我希望显示成功消息。对于下面的代码,我必须做哪些更改 function index() { //some statements. if (empty($_FILES['brand_image']['name'])) {

如果选择了一个图像,那么我想上传该图像并将文件名存储到db,否则我想在db文件名中存储为“default_brand.png”,并且不会上传任何文件。在下面的do_upload函数中,如果发生错误,则我希望在同一视图上显示该错误,如果没有错误且图像上载成功,则我希望显示成功消息。对于下面的代码,我必须做哪些更改

function index()
  {
//some statements.
if (empty($_FILES['brand_image']['name'])) {
            $filename = 'default_brand.png';
        }
        else {
            $filename = $this->do_upload();
        }
        echo $filename;
}
    function do_upload()
    {
        $config['upload_path'] = './assets/public_image/brand';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size'] = '100';
        $config['max_width']  = '1024';
        $config['max_height']  = '768';


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

        if ( ! $this->upload->do_upload('brand_image'))
        {
            $error = array('error' => $this->upload->display_errors());

        $this->load->model('get_data_model');
        $resultset = $this->get_data_model->get_only_child_categories();    
        $data['resultset'] = $resultset;
        $this->layouts->view('brand_view', array('left_sidebar' => 'sidebar/left_sidebar','right_sidebar' => 'sidebar/right_sidebar'),$data,true);
        return "default_brand.png";
        }
        else
        {
            $data = array('upload_data' => $this->upload->data());
            $filename = $data['file_name'];
            return $filename;
        }
    }

我已经修改了您的原始代码以使用单个函数。它将在初始页面加载时加载索引页面,并且仅在用户实际向页面发布数据(上载文件)时才执行上载过程

我在视图中设置了相同的变量。您可以使用它们来显示成功消息或错误。(此代码还假设您有一个自定义的“布局”库,用于渲染视图,看起来就是这样。如果没有,则需要更改该行以使用codeigniter的默认视图渲染过程)


我现在正在整理。我有个问题。您正在使用自定义视图库吗?这就是你调用$this->layouts->view而不是$this->load->view的原因吗?是的。我已经为布局创建了一个库
function index(){

$post = $this->input->post();
$this->load->library('upload', $config);
$this->load->model('get_data_model');

if(!$post){ //your initial page load. user not submitting file since not posting data

    $data = array(

        'error'     => FALSE,
        'file_name' => '',
        'resultset' =>  $this->get_data_model->get_only_child_categories()

    );

    $this->layouts->view('brand_view', array('left_sidebar' => 'sidebar/left_sidebar','right_sidebar' => 'sidebar/right_sidebar'),$data,true);

} else { //this is hit if user posting data (uploading file)

    $config['upload_path'] = './assets/public_image/brand';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '100';
    $config['max_width']  = '1024';
    $config['max_height']  = '768';

    $data = array(

        'error'     => $this->upload->do_upload('brand_image') ? FALSE : $this->upload->display_errors('',''),
        'file_name' => isset($upload_data['file_name']) ? $upload_data['file_name'] : 'default_brand.png',
        'resultset' =>  $this->get_data_model->get_only_child_categories()

    );

    $this->layouts->view('brand_view', array('left_sidebar' => 'sidebar/left_sidebar','right_sidebar' => 'sidebar/right_sidebar'),$data,true);

}

}