也许我错过了一些简单的事情,但我似乎无法正确地进行表格验证。
如何在不执行
的情况下获取表单验证以检查文件验证$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()
但是如果图像有效但其他表格值不是,我不想上传图像。
答案 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
}
我花了很长时间才把它整理出来。如果你发现它不合适,请让我知道纠正我的技术。