上传表单引发相同的错误两次

时间:2013-04-05 10:12:16

标签: php codeigniter file-upload

我正在尝试使用CodeIgniter创建一个上传表单,以便用户可以更改其个人资料图片。在我的Controller中有以下几行代码:

if(!$this->upload->do_upload() && empty($_FILES['userfile'])) {
    $data['upload'] = "0";
    $this->load->view('editpicture', $data);
} elseif (!$this->upload->do_upload() && !empty($_FILES['userfile'])) {
    $data['upload'] = "0";
    $data['attempt'] = "1";
    $data['error'] = $this->upload->display_errors();
    $this->load->view('editpicture', $data);        
} else {
    $upload_data = $this->upload->data();
    ....

除非出现错误,否则一切正常。该视图显示两次相同的错误:

  

您没有选择要上传的文件。
您没有选择要上传的文件。

1 个答案:

答案 0 :(得分:1)

这样做:

if(!$this->upload->do_upload()) {
    if (empty($_FILES['userfile'])) {
        $data['upload'] = "0";
        $this->load->view('editpicture', $data);
    } else {
        $data['upload'] = "0";
        $data['attempt'] = "1";
        $data['error'] = $this->upload->display_errors();
        $this->load->view('editpicture', $data);       
    }
} else {
    $upload_data = $this->upload->data();
    ....

发生这种情况的原因是你正在运行$this->upload->do_upload()两次。第一个条件运行它以查看它是否为FALSE,然后检查$_FILES是否为空以运行代码块。

如果$this->upload->do_upload()为TRUE且$_FILES为空则会运行,但如果$_FILES不为空,则会运行下一个条件,您再次运行$this->upload->do_upload()条件。该函数正在if()执行两次。条件检查从左到右运行。