0

codeigniterに小さなアプリがあります。名前、メール、場所の3つのテキストフィールドを持つフォームがあります。提出するにはこれで十分です。ただし、画像またはビデオ、あるいはその両方を送信するために、すべてのユーザーに2つのオプションのフィールドがあります。アップロードされたファイルにエラーが発生するまで、動作させています。エラーが修正されるまで送信全体を停止したい場合でも、テキストデータは送信されます。

これが私のコントローラーからのコードです。どんな助けでも素晴らしいでしょう。ありがとう!

<?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
        }
    }

}
4

1 に答える 1

0

すべてのアップロード データ ロジックをカスタム検証コールバックに配置します。

次に、検証が失敗した場合 (アップロードを含む)、データが事前に入力された状態でページがフォームに戻り、ユーザーはファイルのアップロードを修正できます。

次に、コントローラーのロジックも単純化されます。

    $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
}
于 2012-09-07T10:35:52.333 に答える