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() 默认情况下期望它是“用户文件”,但是如果你有类似的东西,<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 的帮助程序,这可能更多地是 PHP 问题,而不是 CodeIgniter 问题。

看起来您的文件对于您的 PHP 配置来说可能太大了?PHP 似乎没有将文件传递给您。创建一个php_info()文件,看看是什么UPLOAD_MAX_FILESIZE设置?

此外,请确保您在application/config/mimes.php.

于 2012-07-08T23:55:56.810 回答
0

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

于 2013-03-21T07:37:20.383 回答
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);
            }
        }

    }
}
?>

表格:(上传.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 回答