Codeigniter以一种形式验证文件上载和文本输入

时间:2012-07-08 23:44:15

标签: php forms validation codeigniter file-upload

我有一个带有文本输入和文件输入的表单。使用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 个答案:

答案 0 :(得分:4)

文件输入的名称是什么? do_upload()期望它默认为'userfile',但如果您有<input type="file" name="image"...之类的内容,则需要调用$this->upload->do_upload('image')

您还需要确保将表单设置为多部分 - http://ellislab.com/codeigniter/user-guide/libraries/file_uploading.html

答案 1 :(得分:2)

您正确使用CodeIgniter的帮助程序,这可能会更多地运行PHP问题,然后运行CodeIgniter问题。

您的文件可能对于PHP配置来说太大了? PHP似乎没有将文件传递给您。创建php_info()文件并查看UPLOAD_MAX_FILESIZE设置的内容?

另外,请确保在application/config/mimes.php中设置了扩展名和mime类型对。

答案 2 :(得分:0)

默认的codeigneter上传类是$ this-&gt; upload-&gt; do_upload('field_name = userfile'),因此您可以设置您所制作的字段文件的名称,或者您使用文件的默认codeigneter name字段,如果您需要要更改表单中文件类型的名称字段,请检查codeigneter如何为该类设置,实际上是简单的类并且易于使用..,因为该类需要文件的参数名称

答案 3 :(得分: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>