CodeIgniter - 使用字段和文件上载验证表单

时间:2011-08-19 15:41:50

标签: php forms codeigniter upload

也许我错过了一些简单的事情,但我似乎无法正确地进行表格验证。

如何在不执行

的情况下获取表单验证以检查文件验证
$this->upload->do_upload("fldImage")

这是我目前的验证流程:

if ($this->form_validation->run() == FALSE)
    {
        if ( ! $this->upload->display_errors("fldImage"))
        {
            $error = array('error' => $this->upload->display_errors());
        }
        $this->load->view('submitBlog', $error);
    }
    else
    {
        if ( ! $this->upload->do_upload("fldImage"))
        {
            $error = array('error' => $this->upload->display_errors());
            $this->load->view('submitBlog', $error);
        }
        else
        {
            $data = array('upload_data' => $this->upload->data());
            unset($blog['submit']);
            $imagePath = "uploads/".$data['upload_data']['file_name'];
            $blog['fldImage'] = $imagePath;
            $blog['fldDateAdded'] = $datetime;
            $this->db->insert('tblBlog', $blog); 
            $this->load->view('submitBlogSuccess', $data);
        }
    }

但当然我不能打电话

do_upload("fldImage")

不运行

do_upload()

但是如果图像有效但其他表格值不是,我不想上传图像。

2 个答案:

答案 0 :(得分:3)

首先,添加以下规则:

$this->form_validation->add_rule('userfile', 'required|callback__check_ext');

以下回调函数:

function _check_ext()
{
    if ( ! empty($_FILES['userfile']['name']))
    {

        $ext        = pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION);
        $allowed    = array('jpg', 'png');

        if ( ! in_array(strtolower($ext), $allowed))
        {
            $this->form_validation->set_message('_check_ext', 'Extension not allowed');
            return FALSE;
        }

    }   
    return TRUE;
}

从PyroCMS借来的概念。在必要时更改。

注意:检查MIME类型可能是一种更好的方法,如果您需要一些帮助,请告诉我。

答案 1 :(得分:0)

嗯,我希望我的回答没有错。我有一个类似的问题。我希望对我的网站访问者保持灵活性。这意味着如果用户想要上传照片/文件,那就没关系,它不会再出现任何问题。从技术上讲,我很难理清用户是否选择了要上传的文件。我搜索了许多论坛和博客,我找到了一个我想在这里分享的解决方案。如果我错了,请告诉我;

if(empty($_FILES['userfile']['name']))
{
   // Perform the Normal Uploading without the File
}
else
{
   // Perform the uploading with the File
}

我花了很长时间才把它整理出来。如果你发现它不合适,请让我知道纠正我的技术。