#php #codeigniter #file-upload #codeigniter-3
#php #codeigniter #загрузка файла #codeigniter-3
Вопрос:
У меня возникают проблемы с использованием file_upload в codeigntier.
Я не получаю никаких данных в свою папку uploads в корне моей папки CI.
Я новичок в этом и только что следовал инструкциям.
Ниже приведен код для моего представления и контроллера
Просмотреть create_ticket.php
<h2>Create Ticket</h2>
<?php $attributes = array('id'=>'create_form', 'class'=> 'form_horizontal'); ?>
<?php echo validation_errors("<p class='bg-danger'>"); ?>
<!-- //controller -->
<?php echo form_open('tickets/create', $attributes);?>
<div class="form-group">
<?php
echo form_label('Title: ');
$data = array(
'class' => 'form-control',
'name' => 'ticket_title',
'placeholder' => 'e.g Microsoft Outlook Running Slow',
'value' => set_value('ticket_title')
);
echo form_input($data);
?>
</div>
<!-- //break -->
<div class="form-group">
<?php
echo form_label('Description of Fault: ');
$data = array(
'class' => 'form-control',
'name' => 'ticket_description',
'placeholder' => 'Desribe the Fault',
'value' => set_value('ticket_description')
);
echo form_textarea($data);
?>
</div>
<div class="form-group">
<?php echo form_label('Upload:'); ?>
<?php
$data = array(
'class' => 'input-file',
'name' => 'file_upload',
'accept' => 'pdf,jpg,png',
'type' => 'file' ); ?>
<?php echo form_input($data); ?>
</div>
<div class="form-group">
<?php
$data = array(
'class' => 'btn btn-primary',
'name' => 'submit',
'value' => 'Report Ticket'
);
?>
<?php echo form_submit($data); ?>
</div>
<?php
?>
<?php echo form_close(); ?>
Контроллер tickets.php
public function create(){
//validation
$this->form_validation->set_rules('ticket_title', 'ticket title', 'trim|required|min_length[1]');
$this->form_validation->set_rules('ticket_description', 'ticket description', 'trim|required|min_length[3]');
if($this->form_validation->run() == FALSE){
$data['main_view'] = 'tickets/create_ticket';
$this->load->view('layouts/main', $data);
}else{
$data = array(
'ticket_creator_user_id' =>$this->session->userdata('user_id'),
'ticket_creator' =>$this->session->userdata('username'),
'ticket_title' =>$this->input->post('ticket_title'),
'ticket_description' =>$this->input->post('ticket_description')
);
if($this->ticket_model->create_ticket($data)){
//email user to say ticket has been created
$user = $this->session->userdata('username');
$email = $this->session->userdata('email');
$ticket_title = $this->input->post('ticket_title');
$ticket_id = $this->input->post('ticket_id');
// $email = $this->user_model->fetch_email();
$this->load->library('email');
$this->email->set_newline("rn");
$this->email->from('xxxxx@xxxxx.com', 'xxxxxx xxxxxx');
$this->email->to($email);
$this->email->subject('Helpdesk Account');
$this->email->message('Hey ');
$path = $this->config->item('server_root');
$file = $path . '/helpdesk/attachments/yourInfo.txt';
$this->email->attach($file);
if($this->email->send())
{
echo 'Your Email was sent';
}else
{
show_error($this->email->print_debuger());
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 100;
$config['max_width'] = 1024;
$config['max_height'] = 768;
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload('file_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);
}
}
redirect("tickets/index");
}
}
}
Я поместил функцию загрузки файла в и из инструкции it esle, и по-прежнему ничего не загружается в мою папку uploads.
Я в меру своих возможностей следовал документации CodeIgniter для file_upload и многочисленным онлайн-руководствам.
Однако по-прежнему никакой радости.
Любая помощь приветствуется.
Большое спасибо, Марк
Ответ №1:
Кажется, что вы используете обычную форму form_open
. Но для загрузки файла вам нужно использовать многостраничную форму open.
Заменить <?php echo form_open('tickets/create', $attributes);?>
с <?php echo form_open_multipart('tickets/create', $attributes);?>
Прочитайте form_open_multipart
Комментарии:
1. Спасибо, Саджи, это исправлено. Ценю помощь!