Загрузка файла Codeigniter из формы без ajax / jquery / javascript - PullRequest
0 голосов
/ 02 декабря 2018

Контекст : я обновляю данные user_profile после регистрации пользователя, используя форму #updateprofileform, я могу обрабатывать все остальные поля формы, используя стандартные проверки, и вставлять / обновлять, используя user_model.проблема связана с полем resume, которое должно принимать файл в качестве типа ввода, загружать его на сервер и сохранять его путь на сервере (скажем, http://domain/uploads/$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.

Спасибо

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Решено!4 важных шага необходимы, а некоторые пропущены в большинстве вопросов и ответов во всех других сообщениях, чтобы завершить этот процесс. Я поделюсь образцом кода в github, когда я когда-нибудь получу.

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

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

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

0 голосов
/ 02 декабря 2018

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

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