Codeigniter图像上传和数据库路径

时间:2017-05-07 18:20:15

标签: php forms codeigniter upload

我在codeigniter中尝试上传表单时遇到了一些问题。 不确定我做错了什么,其他一切都在数据库中正确。我查看了文档,尝试了几件事,但我没有得到任何进一步的信息。非常感谢任何反馈! 提前谢谢。

模型:

public function set_newstudent()
    {
        $this->load->helper('url');

        $slug = url_title($this->input->post('naam'), 'dash', TRUE);

                 $config['upload_path'] = '/file_path/';
                 $config['allowed_types'] = 'gif|jpg|png|jpeg';
                 $this->load->library('upload', $config);
                 $this->upload->data('full_path'););
                 $data_upload_files = $this->upload->data();

                 $image = $data_upload_files[full_path];

                 $data = array(

            'naam' => $this->input->post('naam'),
            'voornaam' => $this->input->post('voornaam'),
            'id' => $slug,
            'text' => $this->input->post('text'),
            'picture'=>$this->input->post('picture')
    );

        return $this->db->insert('student', $data);
    }

控制器:

public function create()
            {
                $this->load->helper('form');
                $this->load->library('form_validation');

                $data['title'] = 'Create a new Student';

                $this->form_validation->set_rules('naam', 'Naam', 'required');
                $this->form_validation->set_rules('voornaam', 'Voornaam', 'required');
                $this->form_validation->set_rules('text', 'Text', 'required');

                if ($this->form_validation->run() === FALSE)
                    {
                    $this->load->view('templates/header', $data);
                    $this->load->view('students/create');
                    $this->load->view('templates/footer');

                    }
                else
                    {
                    $this->student_model->set_newstudent();
                    $this->load->view('students/success');
                    }
            }

视图:

<?php echo validation_errors(); ?>


<?php echo form_open_multipart('student/create');?>

<div class="form-group">
<label for="naam">Naam</label><br>
<input type="input" name="naam" class="form-control" /><br />
</div>
<div class="form-group">
<label for="voornaam">Voornaam</label><br>
<input type="input" name="voornaam" class="form-control"/><br />
</div>
<div class="form-group">
<label for="text">Vertel iets over jezelf:</label><br>
<textarea name="text" class="form-control" rows="5"></textarea><br />
</div>

<div class="form-group">
<label for="text">Kies een profiel foto:</label><br>
<input type="file" name="userfile"  class="btn btn-default btn-file" />

</div>
<input type="submit" class="btn btn-success" name="submit" 
value="Create student" style="width:100%;margin-bottom:1%" />

</form>

2 个答案:

答案 0 :(得分:4)

正如我所见,没有

$this->upload->do_upload()

这是负责执行上传的功能,而且代码中没有,您可能需要阅读: File uploading Class

更新

您的代码看起来应该是这样的,

控制器:

public function create(){
    $this->load->helper('form');
    $this->load->library('form_validation');
    $data['title'] = 'Create a new Student';
    $this->form_validation->set_rules('naam', 'Naam', 'required');
    $this->form_validation->set_rules('voornaam', 'Voornaam', 'required');
    $this->form_validation->set_rules('text', 'Text', 'required');
    if ($this->form_validation->run() === FALSE){
        $this->load->view('templates/header', $data);
        $this->load->view('students/create');
        $this->load->view('templates/footer');
    }else{
        // Upload the files then pass data to your model
        $config['upload_path'] = '/file_path/';
        $config['allowed_types'] = 'gif|jpg|png|jpeg';
        $this->load->library('upload', $config);

        if (!$this->upload->do_upload('userfile')){
            // If the upload fails
            echo $this->upload->display_errors('<p>', '</p>');
        }else{
            // Pass the full path and post data to the set_newstudent model
            $this->student_model->set_newstudent($this->upload->data('full_path'),$this->input->post());
            $this->load->view('students/success');
        }
    }
}

型号:

public function set_newstudent($path,$post){ 
    $data = array( 
        'naam' => $post['naam'], 
        'voornaam' => $post['voornaam'], 
        'text' => $post['text'], 
        'picture'=>$path 
    ); 

    return $this->db->insert('student', $data); 
}

答案 1 :(得分:0)

问题在于您使用上传库的代码。您使用错误的功能上传文件。以下是正确的代码:

        $config['upload_path'] = '/file_path/';
        $config['allowed_types'] = 'gif|jpg|png|jpeg';
        $this->load->library('upload', $config);

        // Check file uploaded or not
        if ($this->upload->do_upload('userfile')) {
            $data_upload_files = $this->upload->data();
            $image = $data_upload_files[full_path];
        } else {
            // possibly do some clean up ... then throw an error

        }

此代码应该有效。