Загрузка файла Codeigniter из формы без ajax / jquery / javascript

контекст : Я обновляю данные user_profile после регистрации пользователя, используя форму #updateprofileform,
Я могу обработать все остальные поля формы, используя стандартные проверки и вставить / обновить с помощью user_model.
проблема с resume поле, которое должно принять файл в качестве типа ввода и загрузить его на сервер и сохранить его путь на сервере (скажем, Http: // домен / загрузки /$ filename) к столбцу в базе данных.

ожидание Зарегистрированный пользователь, способный просматривать его данные (если он уже есть в базе данных), обновлять данные, если не заполнен профиль.

Вопрос Я нашел способы, как мы можем загрузить файл на сервер, используя CI Framework, или как мы можем загрузить файл в этом контексте, используя jquery / ajax / java-script. Но я ищу простое решение для вышеупомянутой проблемы, которая может сделать работу без зависимости от технологий.

user_profile.php (просмотр)

<table>
<form class="row" name="updateprofile" action = "<?php echo base_url()?>user/user_profile" method="POST">
<tr>
<td><label for="email">Email ID</label></td><td><input class="form-control" name="email" placeholder="Email-ID" type="text" value="<?php if (isset($email)) echo $email;?>" /> <span style="color:red"><?php  echo form_error('email'); ?></span></td>
</tr>
<tr>
<td><label for="resume">Resume</label></td>
<td>
<input name="resume" placeholder="Upload resume" type="file" value="<?php if (isset($resume)) echo $resume;?>" />
<span style="color:red"><?php  echo form_error('resume'); ?>
</span>
</td>
</tr>
<tr>
<td></td>
<td><div class="col-md-6 col-lg-3"> <button type="submit" class="btn btn--primary type--uppercase" name="updateprofile" value="updateprofile" formaction = "<?php echo base_url()?>user/user_profile">Update Profile</button> </div></td>
</tr>
</form>
</table>

user_controller

class User extends CI_Controller {

public function __construct()
{
parent::__construct();
$config = array(
'upload_path' => "./uploads/",
'allowed_types' => "doc|docx|pdf",
'overwrite' => TRUE,
'max_size' => "2048000", // Can be set to particular file size , here it is 2 MB(2048 Kb)
//'max_height' => "768",
//'max_width' => "1024");
$this->load->library('upload', $config);
}
public function user_profile()
{
$resume = $this->input->post('resume');
if ($this->user_model->set_user_profile($id,FALSE) )
{ if($this->do_upload($resume)){
$this->session->set_flashdata('msg_success','Updation Successful!');
echo validation_errors();}
}
else
{
$this->session->set_flashdata('msg_error','Error! Please try again later.');
redirect('user/user_profile');
}
public function do_upload($resume){

if($this->upload->do_upload($resume))
{
$data = array('upload_data' => $this->upload->data($resume));

$this->load->view('user_profile',$data);
}
else
{
$error = array('error' => $this->upload->display_errors($resume));
$this->load->view('user_profile', $error);
}
}

на данный момент всегда ошибка …. ошибка! Пожалуйста, попробуйте позже . так что оцените некоторые указатели здесь, чтобы выгрузить как данные файла, так и данные формы вместе и сохранить расположение файла в базе данных без ajax / jquery.

Спасибо

0

Решение

Измените определение формы на следующее:

<form class="row" action = "<?php echo base_url('user/user_profile'); ?>" method="post" enctype="multipart/form-data" name="updateprofile" >
1

Другие решения

Решено!
Нужно 4 важных шага, а некоторые пропущены в большинстве Q&А во всех других постах, чтобы сделать это complete.will поделится примером кода в github, когда я получу когда-нибудь.

  1. тип шифрования формы должен быть enctype = «multipart / form-data» (спасибо
    @Javier Larroulet и @dexter)
  2. Метод do_upload по умолчанию ищет поле файла с именем = userfile
    (Спасибо @Alex! За ссылку на это), так что если у вас есть
    имя поля файла формы отличается от UserFile, только тогда
    в противном случае необходимо указать как do_upload (‘filefieldname’)
    необязательный
  3. загрузка конфигурации загрузки библиотеки является сложной задачей .. если ты
    автоматически загрузить библиотеку, затем загрузить-> библиотека загрузить конфигурацию не удастся!
    , вы
    просто =>инициализировать это $ this-> upload-> Initialize ($ конфигурации). если ты
    не используете автозагрузку для загрузки библиотеки, тогда да, вы можете загрузить ее
    от контроллера $ this-> load-> library (‘upload’, $ config);
  4. когда-либо, когда вы используете загрузку, вы должны ловить ошибки проверки формы
    и ошибки данных отдельно (еще раз спасибо @Alex за указание на это)

по этой ссылке дана хорошая документация от codeigniter (https://www.codeigniter.com/userguide3/libraries/file_uploading.html#the-controller ) но не выделяет рутинных ошибок.

надеюсь, что этот пост поможет кому-то не тратить еще 24 часа на отладку.

0

По вопросам рекламы [email protected]