上传文件时出现问题 - 可能与在url中传递段有关

时间:2011-07-15 17:30:05

标签: php codeigniter codeigniter-routing

下面的代码会将图片放在assets/images/photoAlbums文件夹中,但我觉得应该将它们放在assets/images/photoAlbums/$album文件夹中。

当我第一次加载页面时,它会显示带有controller/addPhoto/Testing的网址,而addPhoto视图只有一个用户选择文件并单击提交的表单。它将它提交给同一控制器函数addPhoto,只有当您提交页面时,它才会在URL中没有Testing段,这就是它继续上传到assets/images/photoAlbums的原因。

我认为我需要做的就是在我再次加载视图时传递段,但是在加载视图时我无法弄清楚如何传递段。

/**
    * addPhoto - function which shows the add photo page
    */
    function addPhoto()
    {   
        $album = $this->uri->segment(3);

        $config['upload_path'] = './assets/images/photoAlbums/'.$album.'/';
        $config['allowed_types'] = 'jpg|jpeg|pjpeg';
        $config['max_size'] = '2048';   // that's 2MBs
        $config['max_width'] = '1200';
        $config['max_height'] = '1200';
        $config['remove_space'] = TRUE;
        $config['overwrite'] = TRUE;

        echo "album = ".$album;
        echo "config = ".$config['upload_path'];

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

        if(!$this->upload->do_upload('userFile')) { // if there are errors...
            //echo "fail";
            $content_data['error'] = array('error' => $this->upload->display_errors());
            $content_data['data'] = array('upload_data'=>$this->upload->data());
            $content_data['title'] = ' | Rochester Water Ski Show Team';
            $content_data['firstName'] = $this->session->userdata('firstName');
            $data['sess'] = $this->session;
            $data['content'] = $this->load->view('member/addPhoto', $content_data, true);
            $this->load->view('template/admin', $data);

        } else {    // else there are NO errors
            //echo "success";
            $content_data['data'] = array('upload_data'=>$this->upload->data());
            $content_data['title'] = ' | Rochester Water Ski Show Team';
            $content_data['firstName'] = $this->session->userdata('firstName');
            $data['sess'] = $this->session;
            $data['content'] = $this->load->view('member/addPhoto_success', $content_data, true);
            $this->load->view('template/admin', $data);
        }
    }

1 个答案:

答案 0 :(得分:1)

您无需使用$ this-> uri-> segment(3)检索细分。

如果您按照controller/addPhoto/Testing调用控制器,则可以在方法中自动检索参数:

function addPhoto($album) {
    echo $album;   // output: 'Testing';
}

$ album现已在您的方法中可用。

如果您的参数有点静态,您可以使用form方法传递所述参数,例如echo form_open('controller/addPhoto/albumname');

如果你想要它是动态的,那么你可以扭曲一下逻辑并使用隐藏字段传递名称,这样你的方法将被调用而不需要参数echo form_open('controller/addPhoto'),你通过{检索专辑名称{1}}。

如果你觉得我误解了某些事情,就让我们知道。