2012-09-07 71 views
0

我在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 
     } 
    } 

} 

回答

0

将所有的上传数据逻辑放入custom validation callback

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

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

$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 
} 
+0

太好了!所以要清楚。用于上传图像的脚本位于_video_upload()函数中? –

+0

是的 - 你'检查'上传是否成功 - 如果是,返回true。如果没有,请设置验证错误消息并返回false – Laurence

+0

非常感谢您的帮助。生病尝试现在。 –

相关问题