33

すべて必須の 2 つのテキスト フィールドと 1 つのファイル アップロードがあります。テキストフィールドのみが必要な場合はすべて機能しますが、ファイルのアップロードが必要な場合は、ファイルを選択したにもかかわらず、ファイルが必要であるという検証エラーが表示されたままになります。私が間違っていることを知っている人はいますか?よろしくお願いします。

//見る

<?php echo form_open_multipart('add'); ?>

<fieldset>
    <input type="text" name="name" /><br>
    <input type="text" name="code" /><br>
    <input type="file" name="userfile" /><br><br>
    <input type="submit"value="Add" />
</fieldset>

<?php echo form_close(); ?>

//コントローラ

public function add() {

    $this->form_validation->set_rules('name', 'Name', 'required');
    $this->form_validation->set_rules('code', 'Code', 'required');
    //$this->form_validation->set_rules('userfile', 'Document', 'required');
    //when the above line is active the upload does not go through

    if ($this->form_validation->run() == FALSE) {

        $data['page_view'] = $this->page_view;
        $data['page_title'] = $this->page_title;
        $this->load->view('template', $data);
    }
    else
    {
        $this->load->library('upload');

        if (!empty($_FILES['userfile']['name']))
        {
            $config['upload_path'] = './uploads/';
            $config['allowed_types'] = 'gif|jpg|png|jpeg';     

            $this->upload->initialize($config);

            if ($this->upload->do_upload('userfile'))
            {
                $img = $this->upload->data();
                $file_name = $img['file_name'];

                $name = $this->input->post('name');
                $code = $this->input->post('code');

                $this->load->model('create', 'create_model');
                $this->create_model->create_entry($name, $code, $file_name);

                $data['page_view'] = $this->page_view;
                $data['page_title'] = $this->page_title;
                $this->load->view('template', $data);
            }
            else
            {
                echo $this->upload->display_errors();

            }
        }
    }
}
4

6 に答える 6

79

私はまさに私が望むように機能する解決策を見つけました。

私が変更され

$this->form_validation->set_rules('name', 'Name', 'trim|required');
$this->form_validation->set_rules('code', 'Code', 'trim|required');
$this->form_validation->set_rules('userfile', 'Document', 'required');

$this->form_validation->set_rules('name', 'Name', 'trim|required');
$this->form_validation->set_rules('code', 'Code', 'trim|required');
if (empty($_FILES['userfile']['name']))
{
    $this->form_validation->set_rules('userfile', 'Document', 'required');
}
于 2012-09-10T18:13:56.587 に答える
11

オプションでCodeIgniterファイルのアップロード...完全に機能します..... :)

---------- コントローラー ----------

function file()
{
 $this->load->view('includes/template', $data);
}

function valid_file()
{
 $this->form_validation->set_rules('userfile', 'File', 'trim|xss_clean');

 if ($this->form_validation->run()==FALSE) 
 {
    $this->file();
 }
 else
 {
  $config['upload_path']   = './documents/';
  $config['allowed_types'] = 'gif|jpg|png|docx|doc|txt|rtf';
  $config['max_size']      = '1000';
  $config['max_width']     = '1024';
  $config['max_height']    = '768';

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

  if ( !$this->upload->do_upload('userfile',FALSE))
  {
    $this->form_validation->set_message('checkdoc', $data['error'] = $this->upload->display_errors());

    if($_FILES['userfile']['error'] != 4)
    {
        return false;
    }

  }
  else
  {
    return true;
  }
}

私はちょうどそれをオプションにするこの行を使用します、

if($_FILES['userfile']['error'] != 4)
{
 return false;
}

$_FILES['userfile']['error'] != 4 is for file required to upload.

を使用して不要にすることができます。その後、必要なファイルにこのエラーを渡し、 return false$_FILES['userfile']['error'] != 4を使用して他のタイプのエラーがあればうまく機能します。うまくいくことを願っています....

于 2013-05-11T13:00:02.137 に答える
7

このフォーム検証拡張ライブラリを確認すると、ファイルを検証するのに役立ちます。アップロードフィールドを検証するときに現在のフォーム検証を使用すると、値が空の場合は入力フィールドとして扱われます。フォーム検証ライブラリのこの非常に優れた拡張機能を見てください。

MY_Formvalidation

于 2012-09-06T04:11:03.473 に答える
5

このように、コールバック関数を使用できます

  $this->form_validation->set_rules('userfile', 'Document', 'callback_file_selected_test');

    if ($this->form_validation->run() == FALSE) {
         //error
     }
    else{
           // success       
      }

function file_selected_test(){

    $this->form_validation->set_message('file_selected_test', 'Please select file.');
    if (empty($_FILES['userfile']['name'])) {
            return false;
        }else{
            return true;
        }
}
于 2015-08-11T11:06:44.150 に答える
0
  1. ファイル名をチェックするルールを設定する (フォームがマルチパートの場合)

    $this->form_validation->set_rules('upload_file[name]', 'Upload file', 'required', 'No upload image :(');

  2. $_POST次のように配列を上書きします。

    $_POST['upload_file'] = $_FILES['upload_file']

  3. そして、次のようにします。

    $this->form_validation->run()

于 2017-11-29T15:01:26.257 に答える