将图像和视频上传设为可选


Make image and video upload optional

我在codeigniter中有一个小应用程序。有一个表单有3个文本字段,名称、电子邮件和位置。这已经足够提交了。然而,有两个可选字段供所有用户提交图像或视频或两者。我一直让它工作,直到上传的文件出现错误。它仍然会提交文本数据,而我希望它停止整个提交,直到错误得到修复。

这是我的控制器的代码。任何帮助都会很棒。谢谢

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Form extends MY_Controller {
public function __construct()
{
    parent::__construct();
    $this->load->helper(array('form', 'url'));
}
function index()
    {
        $this->load->helper(array('form', 'url'));
        $this->load->library('form_validation');
        $this->form_validation->set_rules('nominee', 'Nominee', 'required');
        $this->form_validation->set_rules('email', 'Email', 'required|valid_email');
        $this->form_validation->set_rules('location', 'Location', 'required');
        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('form');
        }
        else
        {
             // Load the library - no config specified here
                $this->load->library('upload');
                // Check if there was a file uploaded - there are other ways to
                // check this such as checking the 'error' for the file - if error
                // is 0, you are good to code
                if (!empty($_FILES['imageupload']['name']))
                {
                    // Specify configuration for File 1
                    $config['upload_path'] = 'uploads/images';
                    $config['allowed_types'] = 'gif|jpg|png';
                    $config['max_size'] = '100';
                    $config['max_width']  = '1024';
                    $config['max_height']  = '768';       
                    // Initialize config for File 1
                    $this->upload->initialize($config);
                    // Upload file 1
                    if ($this->upload->do_upload('imageupload'))
                    {
                        $data = $this->upload->data();
                    }
                    else
                    {
                        echo $this->upload->display_errors();
                    }
                }
                // Do we have a second file?
                if (!empty($_FILES['videoupload']['name']))
                {
                    // Config for File 2 - can be completely different to file 1's config
                    // or if you want to stick with config for file 1, do nothing!
                    $config['upload_path'] = 'uploads/videos/';
                    $config['allowed_types'] = 'gif|jpg|png';
                    $config['max_size'] = '100';
                    $config['max_width']  = '1024';
                    $config['max_height']  = '768';
                    // Initialize the new config
                    $this->upload->initialize($config);
                    // Upload the second file
                    if ($this->upload->do_upload('videoupload'))
                    {
                        $data = $this->upload->data();
                    }
                    else
                    {
                        echo $this->upload->display_errors();
                    }
                }
            $this->load->view('thankyou');
            //Run code to add into the database
        }
    }
}

将所有上传数据逻辑放入自定义验证回调中。

然后,如果验证失败(包括上传),页面将返回到表单,并预先填写数据,您的用户可以修复文件上传。

然后你的控制器逻辑也被简化了;

    $this->load->library('form_validation');
    $this->form_validation->set_rules('nominee', 'Nominee', 'required');
    $this->form_validation->set_rules('email', 'Email', 'required|valid_email');
    $this->form_validation->set_rules('location', 'Location', 'required');
    $this->form_validation->set_rules('imageupload', 'Image Upload', 'callback__image_upload');
    $this->form_validation->set_rules('videoupload', 'Video Upload', 'callback__video_upload');
    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('form');
    }
    else
    {
        //Run code to add into the database
        $this->load->view('thankyou');
    }

function _video_upload()
{
   //put upload logic here and check if its valid
}
function _image_upload()
{
   //put upload logic here and check if its valid
}