2016-12-13 2 views
0

У меня есть вид, где пользователь может редактировать свои данные.Загрузка изображения в CodeIgniter с использованием PHP

Посмотреть

<form class="form-horizontal" method ="post" action="<?php echo site_url('studentDashboardController/saveUserDetails');?>"> 
<?php echo form_open('studentDashboardController/saveUserDetails'); ?> 
<?php echo $this->session->flashdata('msg'); ?> 
<fieldset> 

    <!-- Form Name --> 
    <legend>User Details</legend> 

    <!-- Text input--> 
    <div class="form-group"> 
     <label class="col-md-4 control-label" for="name">Full Name</label> 
     <div class="col-md-8"> 
      <input id="name" name="name" type="text" class="form-control input-md" value="<?php foreach($details as $detail){?><?php echo $detail->name?><?php }?>"> 
     </div> 
    </div> 

    <!-- Text input--> 
    <div class="form-group"> 
     <label class="col-md-4 control-label" for="dob">Date of Birth</label> 
     <div class="col-md-8"> 
      <input id="dob" name="dob" type="text" placeholder="" class="form-control input-md" value=""> 
     </div> 
    </div> 

    ... 

    <!-- File Button --> 
    <div class="form-group"> 
     <label class="col-md-4 control-label" for="userfile">Upload Profile Picture</label> 
     <div class="col-md-4"> 
      <input id="userfile" name="userfile" class="input-file" type="file"> 
     </div> 
    </div> 

    <!-- Button --> 
    <div class="form-group"> 
     <label class="col-md-4 control-label" for="submit"></label> 
     <div class="col-md-4"> 
      <button id="submit" name="submit" type="submit" class="btn btn-primary">Save Changes</button> 
     </div> 
    </div> 

Контроллер

public function saveUserDetails() 
{ 
    if (isset($this->session->userdata['logged_in'])) 
    { 
     $uid = ($this->session->userdata['logged_in']['userId']); 

     $data['notifyCount']= $this->notifications->getUnreadNotification($uid); 
     $data['title']= $this->notifications->getUnreadNotificationTitle($uid); 
     $data['notifyCount']= $this->notifications->getUnreadNotification($uid); 
     $data['users'] = $this->user->getUserNames(); 

     $config['upload_path'] = './assets/img/taro/profilePictures/'; 
     $config['allowed_types'] = 'gif|jpg|png'; 
     $config['max_size'] = '10000'; 
     $config['max_width'] = '5000'; 
     $config['max_height'] = '3000'; 
     $this->load->library('upload', $config); 

     $this->upload->do_upload(); 
     $upload_data = $this->upload->data(); 

     $msg = $this->studentprofileModel->saveUserDetails($uid,$this->input->post()); 
     $msgText = $msg['msg']; 
     $msgType = $msg['type']; 
     //Loading View 
     if($msgType == "danger") 
     { 
      $this->session->set_flashdata('msg', '<div class="alert alert-danger text-center">'.$msgText.'</div>'); 
     } 
     else 
     { 
      $this->session->set_flashdata('msg', '<div class="alert alert-success text-center">'.$msgText.'</div>'); 
     } 

     redirect(base_url('index.php/studentDashboardController/loadGeneralProfilePage')); 
    } 
    else 
    { 
     $this->load->view('login/loginView'); 
    } 
} 

Что мне нужно сделать, это первый сохранить пользовательские данные, собранные через форму с помощью вызова метода studentprofileModel's saveUserDetails. В этом методе мне нужно отправить имя загруженного изображения, чтобы сохранить путь изображения в поле изображения таблицы db. И мне нужно загрузить изображение в папку с ресурсами subdirectory taro.

Я сделал следующее, и данные из полей формы обновляются в БД. Но файл изображения не загружается.

Любые предложения в этой связи будут высоко оценены

+0

любая ошибка, которую вы получаете? проверьте выгрузку этой функции '$ this-> upload-> display_errors());' и добавьте 'enctype =" multipart/form-data "' в свой тег формы –

+1

В вашем представлении есть '

' внутри ''? – ourmandave

ответ

1

Моей первой догадки до дальнейших испытаний, можно было бы добавить атрибут enctype="multipart/form-data" к вашему <form> тегу, так как она определяет, как форма-данные должны быть закодированы при подаче это на сервер, а multipart/form-data требуется, когда в форму включены любые <input type="file">.

Вы можете почитать больше об этом here.


Update 2:

На самом деле, кажется, что вы можете иметь две формы метки открыты? один от <form> и еще один от form_open() функция CI обеспечивает? Если это так, используйте только один из них.

Если вы решили сделать в HTML:

<form class="form-horizontal" method ="post" action="<?php echo site_url('studentDashboardController/saveUserDetails');?>" enctype="multipart/form-data">

Если вы решили использовать функции CI, есть два способа: form_open и form_open_multipart (который так же, как form_open, но он автоматически добавляет многосекционный вещь)

form_open('studentDashboardController/saveUserDetails', array('enctype' => "multipart/form-data"))

или

form_open_multipart('studentDashboardController/saveUserDetails')


Update 3:

  • Убедитесь, что папка, в которой будет загружено изображение, чтобы иметь достаточно прав;

  • Пропустите абсолютный путь здесь $config['upload_path'] = './assets/img/taro/profilePictures/' вместо относительного одного

  • Кроме того, изменить $this->upload->do_upload(); к $this->upload->do_upload('userfile');

Дайте нам знать результаты :)

+0

Привет, я добавил выше код HTML. Но, я думаю, в моем контроллере что-то не так. Не возражаете проверить это? Было бы очень полезно. –

+0

Привет @NayantaraJeyaraj. Просто обновил ответ. Не могли бы вы проверить его? –

1

Вы можете добавить этот код в вашем контроллере "функция saveUserDetails()"

public function saveUserDetails() 
    { 
     if (isset($this->session->userdata['logged_in'])) 
     { 
     $uid = ($this->session->userdata['logged_in']['userId']); 
     $post_data = $this->input->post(); 
     if($_FILES['image']['name']) 
     { 
      //load upload library 
      $this->load->library('upload'); 

      // Specify configuration for File 
      $config['upload_path'] = './assets/img/taro/profilePictures/'; 
      $config['allowed_types'] = 'gif|jpg|png'; 
      $config['max_size'] = '10000'; 
      $config['max_width'] = '5000'; 
      $config['max_height'] = '3000'; 
      $this->upload->initialize($config); 

      if ($this->upload->do_upload('image')){ 
       $image_data = $this->upload->data(); 
       $post_data['image'] = $image_data['file_name']; 
      } 
      else{ 
       $error = $this->upload->display_errors(); 
     } 
     } 

     $msg = $this->studentprofileModel->saveUserDetails($uid,$post_data); 
     $msgText = $msg['msg']; 
     $msgType = $msg['type']; 
     ..... 
    } 

Не забудьте указать разрешение на изображение.

Я надеюсь, что это сработает для вас!

Смежные вопросы