1

テキスト入力とファイル入力のあるフォームがあります。Codeigniterの検証ライブラリを使用して両方の入力タイプを検証する適切な方法は何ですか?いくつかの解決策を見つけましたが、正しく機能しないか、やり過ぎのようです(新しいライブラリの作成またはCIシステムファイルの変更)。

私の見解では、1つのマルチパートフォームを使用しており、テキスト検証エラーとアップロードエラーの両方を表示しています。

これが私のコントローラーにこれまでにあるものです...

function create() //create new post
{           
    $this->form_validation->set_rules('content', 'Entry', 'trim|required|xss_clean');
    $this->form_validation->set_rules('category_id', 'Category', 'trim|required|xss_clean|integer'); 

    //Text input fields
    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('new_post');
    }       
    else
    {
            $config['upload_path'] = './uploads/posts/';
            $config['allowed_types'] = 'jpg|png';               
            $config['max_size'] = '800'; //in KB

            $this->load->library('upload', $config);

            //File Upload
            if (! $this->upload->do_upload())
            {
                $upload_error['upload_error'] = array('error' => $this->upload->display_errors()); 

                $this->load->view('my_view', $upload_error);

                return FALSE;
            }

             //Add to database 
             $data = array (
               'user_id' => $this->tank_auth->get_user_id(),
               'category_id' => $this->input->post('category_id'),
               'content' => $this->input->post('content')
             );

             $this->Posts_model->create_post($data);

             $this->session->set_flashdata('success', 'Post_added!');
             redirect('posts');
    }       

}

私は自分の見方を続けてYou did not select a file to upload.います。

4

4 に答える 4

4

ファイル入力の名前は何ですか? do_upload() は、デフォルトで「userfile」であると想定していますが、次のようなものがある<input type="file" name="image"...場合は、呼び出す必要があります$this->upload->do_upload('image')

また、フォームがマルチパートに設定されていることを確認する必要があります - http://ellislab.com/codeigniter/user-guide/libraries/file_uploading.html

于 2012-07-09T09:41:46.587 に答える
2

CodeIgniter のヘルパーを正しく使用しています。これは、CodeIgniter の問題よりも PHP の問題に関係している可能性があります。

ファイルが PHP 構成に対して大きすぎるように見えますか? PHP がファイルを渡していないようです。php_info()ファイルを作成し、何UPLOAD_MAX_FILESIZEが設定されているかを確認しますか?

また、拡張子と MIME タイプのペアが に設定されていることを確認してくださいapplication/config/mimes.php

于 2012-07-08T23:55:56.810 に答える
0

codeigniter を使用したファイル アップロードによるフォーム フィールドの検証

コントローラー: Upload.php

注: フォルダアップロードを基本レベルで作成します。フォルダ ストア ファイルをアップロードします。

<?php

class Upload extends CI_Controller {

    function __construct()
    {
        parent::__construct();
        $this->load->helper(array('form', 'url'));
    }

    function index()
    {
        //$this->load->view('upload_form', array('error' => ' ' ));
        $this->load->library('form_validation');
        $this->form_validation->set_rules('title', 'Title', 'trim|required|xss_clean');

        //Text input fields
        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('upload_form');
        }
        else
        {
            $config['upload_path'] = './uploads/';
            $config['allowed_types'] = 'gif|jpg|png';
            $config['max_size'] = '1024';
            $config['max_width']  = '1024';
            $config['max_height']  = '768';

            $this->load->library('upload', $config);

            if ( ! $this->upload->do_upload())
            {
                $error = array('error' => $this->upload->display_errors());

                $this->load->view('upload_form', $error);
            }
            else
            {
                $data = array('upload_data' => $this->upload->data());

                $this->load->view('upload_success', $data);
            }
        }

    }
}
?>

フォーム:(upload.form.php)

<html>
<head>
<title>Upload Form</title>
</head>
<body>

<?php echo validation_errors(); ?>

<?php echo form_open_multipart();?>
Title: <input type="text" name="title" size="30" /><br/>
<input type="file" name="userfile" size="20" />

<br /><br />

<input type="submit" value="upload" />

</form>

</body>
</html>

**upload_success.php**


<html>
<head>
<title>Upload Form</title>
</head>
<body>

<?php echo validation_errors(); ?>

<?php echo form_open_multipart();?>
Title: <input type="text" name="title" size="30" /><br/>
<input type="file" name="userfile" size="20" />

<br /><br />

<input type="submit" value="upload" />

</form>

</body>
</html>
于 2013-09-21T08:36:08.883 に答える
0

デフォルトの codeigneter アップロード クラスは $this->upload->do_upload('field_name = userfile') であるため、名前フィールドを変更する場合は、作成するフィールド ファイルの名前を設定するか、ファイルのデフォルトの codeigneter name フィールドを使用できます。フォームのファイルタイプについては、コードイグネターがそのクラスの設定をどのように行ったかを確認してください。実際にはシンプルなクラスで使いやすい..、そのクラスにはファイルのパラメータ名が必要なため

于 2013-03-21T07:37:20.383 に答える