Selasa, 26 Juli 2016

Import data Excel ke Mysql dengan Codeigniter



Jika kalian seorang pengembang website atau lebih kerennya sering disebut web developer mungkin akan membutuhkan suatu cara untuk mengimport data kedalam database dalam jumlah bnyak karena ini sangat penting jika project anda membangun suatu sistem untuk mengolah data,
tidak mungkin anda harus insert data satu per satu jika data tersebut ada ribuan kebayangkan bagaimana capeknya. Saat ini setiap perusahaan sudah terkomputerisasi jadi data yang tadi nya Hard copy sekarang sudah banyak diolah menjadi Soft copy dalam format Excel atau yang lainnya guna untuk mempermudah dalam mencari data sehingga tidak takut untuk hilang atau rusak. Untuk membuat Import data Excel ke database maka kita membutuhkan library yang bernama PHPExcel untuk lebih lanjut mari kita buat project nya.

Bahan yang diperlukan

1. Set Framework Codeigniter sesuai selera, buat lah suatu database dengan format tabel seperti berikut.
CREATE TABLE IF NOT EXISTS `tbimport` (
  `No` int(5) NOT NULL AUTO_INCREMENT,
  `NamaKaryawan` varchar(50) NOT NULL,
  `Alamat` varchar(150) NOT NULL,
  `Posisi` varchar(150) NOT NULL,
  `status` varchar(50) NOT NULL,
  PRIMARY KEY (`No`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
2. Extract library PHPExcel copy folder PHPExcel dan PHPExcel.php pada folder Classes simpan pada htdocs/Project/application/libraries/.

3. Buatlah satu buah file excel sebagai sample.



4. Buat lah folder dengan nama upload pada root directory untuk menyimpan file upload.

5. Sekarang tahap koding buatlah sebuah controller dengan nama import.php dengan class import
class Import extends CI_Controller {
    function __construct(){
  parent::__construct();
          $this->load->library(array('PHPExcel','PHPExcel/IOFactory'));
    }

 public function index() {
    $this->load->view('v_import');
 }

 public function upload(){
  $fileName = $this->input->post('file', TRUE);

  $config['upload_path'] = './upload/'; 
  $config['file_name'] = $fileName;
  $config['allowed_types'] = 'xls|xlsx|csv|ods|ots';
  $config['max_size'] = 10000;

  $this->load->library('upload', $config);
  $this->upload->initialize($config); 
  
  if (!$this->upload->do_upload('file')) {
   $error = array('error' => $this->upload->display_errors());
   $this->session->set_flashdata('msg','Ada kesalah dalam upload'); 
   redirect('Welcome'); 
  } else {
   $media = $this->upload->data();
   $inputFileName = 'upload/'.$media['file_name'];
   
   try {
    $inputFileType = IOFactory::identify($inputFileName);
    $objReader = IOFactory::createReader($inputFileType);
    $objPHPExcel = $objReader->load($inputFileName);
   } catch(Exception $e) {
    die('Error loading file "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
   }

   $sheet = $objPHPExcel->getSheet(0);
   $highestRow = $sheet->getHighestRow();
   $highestColumn = $sheet->getHighestColumn();

   for ($row = 2; $row <= $highestRow; $row++){  
     $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,
       NULL,
       TRUE,
       FALSE);
     $data = array(
     "No"=> $rowData[0][0],
     "NamaKaryawan"=> $rowData[0][1],
     "Alamat"=> $rowData[0][2],
     "Posisi"=> $rowData[0][3],
     "Status"=> $rowData[0][4]
    );
    $this->db->insert("tbimport",$data);
   } 
   $this->session->set_flashdata('msg','Berhasil upload ...!!'); 
   redirect('Import');
  }  
 } 
}
 

6. Buatlah file pada folder view dengan nama file v_import.php

<div style="margin-top: 20px;">
</div>
<form action="<?php echo base_url();?>import/upload/" enctype="multipart/form-data" method="post">
<input name="file" type="file" />
<input type="submit" value="Import File" />
</form>

<?php echo $this->session->flashdata('msg'); ?> 
Jika sudah jalankan localhost project pada bar http://localhost/import_ci/ maka akan muncul tampilan view untuk mengupload, pilih file excel yang berformat .xls .xlsx .csv atau .ods untuk open office.
jika berhasil maka data akan tersimpan dalam database mysql jika tidak ada atau error check kembali pengaturan codeigniter dan perhatikan script, so belajar jangan asal copas tapi pahami dan resapi.

Semoga bermanfaat.
Previous Post
Next Post

109 komentar:

  1. gan, ini pakai CI versi brapa?
    saya pakai CI 3 muncul trs notice ini :

    An Error Was Encountered
    Non-existent class: IOFactory

    saya pkai PHPExcel 1.8

    BalasHapus
    Balasan
    1. jika agan pake 1.8.0
      coba diganti
      pada script ini

      $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
      $objReader = PHPExcel_IOFactory::createReader($inputFileType);

      PHPExcel_IOFactory

      Hapus
    2. udh saya ganti gan bagian $inputFileType sma $objReader. tpi masih sama gan.

      Non-existent class: IOFactory

      agan pakai PHPExcel versi brpa?

      Hapus
    3. saya pake PHPExcel v.1.8.0 gan sama saya pake CI v.2 dan v.3 work semua.

      coba gan ikutin ana
      1. pada controller
      ganti dengan ini.
      $inputFileType = IOFactory::identify($inputFileName);
      $objReader = IOFactory::createReader($inputFileType);

      2. pada library PHPExcel/IOFactory.php pada line 45 kalo di ane. cari
      class PHPExcel_IOFactory
      ganti dengan
      class IOFactory

      3. Masih di folder dan file yang sama PHPExcel/IOFactory.php pada line 80 cari

      private function __construct() { }
      ganti dengan
      public function __construct() { }

      silahkan dicobakan kalo masih error comment lagi

      Hapus
    4. udah saya ikutin semua sarannya gan,
      ada lgi notice :
      Severity: Warning

      Message: file_get_contents(./datafile/): failed to open stream: No such file or directory

      Filename: Shared/OLERead.php

      Line Number: 85

      tapi file excel yang saya upload berhasil ke upload gan, cuma gak ke simpan datanya ke db. saya tambahin base_url(). pada path nya.

      $inputFileName = base_url().'./datafile/'.$media['file_name'];

      tapi malah ada notice baru.
      Error loading file "datafile": Could not open http://localhost/elektro/./datafile/ for reading! File does not exist.

      makasih banyak gan sebelumnya udah mau ngabantu.

      Hapus
    5. kalo di file ./datafile/ ada folder yang berhasil di upload, coba ganti

      $inputFileName = base_url().'datafile/'.$media['file_name'];

      Hapus
    6. gan, msih error yang sama. baik pakai base_url() ataupun gk.
      yg di file controller udh saya ikutin semua saran agan
      tpi msih blum bsa.
      boleh minta emailnya gan?

      Hapus
    7. gan dah fix problem nya...saya dah kirim email

      Hapus
    8. gan, error saya sama kek diatas awalnya..
      terus ngikutin cara diatas juga, habis ditambahin base_url().
      error nya cuman tinggal :
      Error loading file "soal": Could not open http://localhost/codeigniter/assets/soal for reading! File does not exist.

      harus digimanain lagi gan ?
      Boleh minta emailnya ?
      Terimakasih sebelumnya

      Hapus
    9. maaf salah email kirim ke irwan.develop@gmail.com agar saya bisa bantu menyelesaikan masalah anda

      Hapus
    10. oke sudah dikirim ulang gan

      Hapus
    11. gagal tadi rupanya gan, sudah dikirim ulang gan

      Hapus
  2. problemnya dimana tuh bang...
    ane sama kaya gitu

    BalasHapus
    Balasan
    1. coba gan pake controller upload pada script di atas yang sudah di update, masalah sebelumnya hanya tidak ada perintah eksekusi jika kondisi terpenuhi.

      Hapus
    2. masih sama bang

      Hapus
    3. pesan error nya apa gan? coba ikutin tutor dari awal

      Hapus
  3. makasih gan, di saya sudah jalan.. :D

    BalasHapus
    Balasan
    1. bang alvi, bagi filenya dong bang, saya nyobaiin belum bisa bang..
      chairil.one20@gmail.com (kirim ya bang)

      thx...

      Hapus
  4. gan saya pake konsep HMVC CI nya. versi 3 dan PHPExcelnya versi 1.8 error pada $session

    BalasHapus
    Balasan
    1. seharusnya gak ada masalah meskipun menggunakan HMVC, pesan detail error nya kayak gimana gan?

      Hapus
  5. min, minta bantuannya, saya sudah coba project.nya, lancar,
    tapi setelah saya tekan tombol import langsung masuk ke halaman "about:blank" tidak tampil apapun, dan data tidak masuk, itu kenapa ya? mohon bantuannya

    BalasHapus
    Balasan
    1. sekalian mau tanya, fungsi dari $this->session->flashdata itu pa ya?? soallnya saat d run memunculkan error, dan saat saya hapus tdk eror,., mohon penjelasannya bang admin

      Hapus
    2. 1. jika setelah tekan tombol import database masuk ke mysql namun halaman masuk ke "about:blank" berarti kemungkinan masalah ada pada `redirect('Welcome');` dimana setelah eksekusi import alamat tidak sesuai untuk didirect, anda tinggal mengganti 'welcome' sesuai controllers yang anda buat mengalihkan page anda sesuai function controllers..

      2. $this->session->flashdata pada tutor ini untuk menampilkan pesan text setelah eksekusi , namun bisa digunakan untuk yang lain. jika terjadi error coba check apakah librrary session sudah anda tampilkan `$this->load->library('session');` atau bisa anda load pada /application/config/autoload.php pada `$autoload['libraries']`

      Hapus
    3. makasih atas jawabanya,
      ini masalhnya masuk ke "about:blank" tetapi datanya tidak masuk ke database min,., kira2 apa ya?

      Hapus
    4. ada pesan error gak gan? apa hanya blank saja saat di tekan submit import? sudah coba load herlper `url` , ` form`?

      Hapus
    5. tidak ada pesan error sama sekali, hanya blank page saja,
      saya sudah ikuti sesuai tutorial,
      di autoloader sudah saya beri helper=array('url') gan, atau mungkin bisa saya kirim ke email agan?? soalnya saya butuh sekali project ini.. trimakasih sebelumnya

      Hapus
    6. kalo helper.nya saya ganti menjadi helper:array('form'), jadi error gan,
      atau saya salah peletakan file?
      saya meletakan file di codeigniter/upload/import.xlsx
      dan controller saya letakkan di codeigniter/application/controller/import.php

      Hapus
    7. kirim aja gan lewat email.. controller, model ama views, satu project nya jg gpp

      Hapus
    8. alamat emailnya yg mana gan,., saya blm tau..
      mkasih sebelumnya

      Hapus
    9. mkasih gan, Alhamdulillah berjalan lancar
      sama satu lagi gan, saya ada project mengalami problem berkaitan dengan PHPExcel, bisakan agan membantu?
      cek email ya gan, trimakasih sebelumnya

      Hapus
    10. Alhamdulilah kalo dah bisa, boleh kirim saja...

      Hapus
  6. gan kok punya ane eror "An Error Was Encountered" bisa di bantu ?

    BalasHapus
    Balasan
    1. coba check lagi gan tambahin library ama helper yang belum diload.

      Hapus
  7. Gan, Mohon petunjukknya kalau error seperti ini gimana yah solusinya. thanks

    Fatal error: Call to undefined method IOFactory::identify() in /home/kejarik0/public_html/mon_kejari/application/controllers/Excel_pidum.php on line 30
    A PHP Error was encountered

    Severity: Error

    Message: Call to undefined method IOFactory::identify()

    Filename: controllers/Excel_pidum.php

    Line Number: 30

    Backtrace:

    BalasHapus
  8. sebelumnya error seperti yg di atas gan (Non-existent class: IOFactory
    ) saya ikuti petunjuk errornya langsung berubah kayak gitu.

    BalasHapus
  9. Sekarang error nya berubah lagi jadi gini gan : Error loading file "assets": Could not open http://kejari-kendari.go.id/mon_kejari/assets/ for reading! File does not exist.

    BalasHapus
  10. Untuk masalah IOFactory coba cek pengaturan PHPExcel gan dan untuk masalah File does not exist, coba pengaturan url nya jika menggunakan linux coba ganti permissionnya

    BalasHapus
  11. Gan,
    sy menemukan error seperti agan diatas:
    Error loading file "test_import.xlsx": Could not open http://localhost/ci/uploads/test_import.xlsx for reading! File does not exist.

    File sudah berhasil terupload.
    Sy menggunakan windows dan Ci 3

    Apakah ada pengaturan yg kurang gan?

    BalasHapus
    Balasan
    1. COba di check gan difile agan simpan dihasil upload sudah ada apa belum jika belum check penyimpanan hasil upload file $config['upload_path'] = './upload/'; , jika ngikutin tutor pasti berhasil

      Hapus
  12. mas kalau request your page not found di ...import/upload/ knapa ya?

    BalasHapus
  13. Balasan
    1. Sama2 gan jangan lupa klik Iklan nya agar bisa terus berkarya..

      Hapus
  14. gan saya dapet pesan error seperti ini :

    A PHP Error was encountered

    Severity: Notice

    Message: Undefined property: Import::$db

    Filename: controllers/import.php

    Line Number: 59

    Backtrace:

    File: C:\xampp\htdocs\importexcel\application\controllers\import.php
    Line: 59
    Function: _error_handler

    File: C:\xampp\htdocs\importexcel\index.php
    Line: 315
    Function: require_once

    Apa karena saya tidak punya model?

    BalasHapus
    Balasan
    1. disitu memang tidak dibuat model gan langsung proses insert dicontrollers, coba di cek libraries database sudah dipanggil belum??

      Hapus
    2. iya gan sudah bisa terima kasih banyak min

      Hapus
  15. ada pesan error kayak gini gan

    A PHP Error was encountered

    Severity: Warning

    Message: file_get_contents(./assets/): failed to open stream: No such file or directory

    Filename: Shared/OLERead.php

    Line Number: 86

    file excelnya sudah bisa di upload tapi belom bisa masuk db. mohon bantuannya gan

    BalasHapus
  16. bang,errornya skrg bgini, file nya sih masuk ke folder,tapi pas read filenya dia error bgini,arahannya donk bang

    Error loading file "filetest.xlsx": Could not open upload/filetest.xlsx for reading! File does not exist.

    BalasHapus
    Balasan
    1. coba gan di cek lagi scriptnya sesuai tutorial, cek path lokasi file upload.

      Hapus
    2. file uploadnya uda masuk gan di path nya,tapi pas mau read filenya dia malah ga kebaca,gmn ya?

      Hapus
  17. bro irwan,kan gw coba kluarin hasil array dari
    $fileName = $this->input->post('file', TRUE);

    $config['upload_path'] = 'assets/upload_excel/';
    $config['file_name'] = $fileName;

    nah $filenamenya ini slalu null, ada pemecahan utk masalah ini?

    BalasHapus
  18. halo gan... ane ada eror kayak gini.

    Error loading file "test_web3.xlsx": Could not open http://localhost/presensi/Assets/upload/test_web3.xlsx for reading! File does not exist.

    mohon solusi...

    BalasHapus
    Balasan
    1. silahkan dicek lagi gan controllers nya, cek path nya

      Hapus
  19. gan kog punya ane keluar pesan ada kesalahan upload, yang salah apanya ?

    BalasHapus
  20. A PHP Error was encountered

    Severity: Warning

    Message: file_get_contents(./uploads/): failed to open stream: No such file or directory

    Filename: Shared/OLERead.php

    Line Number: 85

    Backtrace:

    File: D:\xampp\htdocs\maps\application\libraries\PHPExcel\Shared\OLERead.php
    Line: 85
    Function: file_get_contents

    File: D:\xampp\htdocs\maps\application\libraries\PHPExcel\Reader\Excel5.php
    Line: 451
    Function: read

    File: D:\xampp\htdocs\maps\application\libraries\PHPExcel\IOFactory.php
    Line: 280
    Function: canRead

    File: D:\xampp\htdocs\maps\application\libraries\PHPExcel\IOFactory.php
    Line: 205
    Function: createReaderForFile

    File: D:\xampp\htdocs\maps\application\controllers\Pemilih.php
    Line: 458
    Function: identify

    File: D:\xampp\htdocs\maps\index.php
    Line: 315
    Function: require_once

    gan, saya muncul error seperti itu, kenapa ya??

    BalasHapus
    Balasan
    1. cek dengan detail lagi gan scriptnya....

      Hapus
  21. Gan, kalo pas lagi upload trus ga jalan jalan itu gimana ya? Dia waiting for localhost... terus

    semua udah di setting, saya pake CI 3, database oracle. Semua sudah disesuaikan.

    BalasHapus
  22. Mas, Kalo ingin update data kan tinggal tambahin query di looping nya, tapi kalo misalnya di excel kita ada data lama (ubah) sama data baru (insert) malah error. duplicate entry pas bagian controller eksekusi query insertnya

    BalasHapus
    Balasan
    1. kalo duplicate entry berarti ada data yang sama ID nya coba cek datafield database nya, jika ingin update dengan excel berarti kita buat query dlu sesuai colom id excel sebagai parameternya.

      Hapus
  23. Min kalau di excelya terdapat tanggal
    carannya gimana?
    di database saya jadinya 0000-00-00

    BalasHapus
  24. Min jika di excelnya terdapat logo/gambar
    cara importnya gimana?
    MOHON DIBALAS

    BalasHapus
    Balasan
    1. pendapat saya itu tidak bisa dilakukan karena haya mengambil text pada kolom, namun bisa gunakan cara lain yakni, untuk upload gambar dilakukan secara terpisah masukan saja nama gambar nya pada excel, lalu bikin file upload gambar dengan nama gambar sesuai dari file excel...lalu panggil path nya.. itu solusi saya

      Hapus
  25. mas tutorialnya sudah saya ikutin dan saya sesuaikan dengan kebutuhan saya, tidak ada error tapi datanya tidak masuk ke database . mohon bantuannya mas. terimakasih

    BalasHapus
    Balasan
    1. Coba di cek file nya sudah masuk ke upload apa belum??

      Hapus
    2. filenya juga belum masuk

      Hapus
    3. coba mba di set autoload untuk helper file, form

      Hapus
    4. sudah di set sebelumnya klo helper..

      Hapus
    5. kalo file belum masuk coba pengaturan php.ini file_uploads=On, coba cek lagi nama input file, kalo dah nyerah saya bantu penyelesainya.

      Hapus
    6. file_upload di php ini juga sudah on...

      Hapus
    7. file nya sudah masuk ke folder upload, tapi ada error "Call to undefined method PHPExcel_Worksheet::rangeToArray()"
      mohon bantuannya mas

      Hapus
    8. silahkan kriim file controllres sama contoh file excel nya ke irwan.develop@gmail.com gara saya bisa cek kesalhan script nya

      Hapus
    9. sudah saya kirim mas, terimakasih

      Hapus
  26. klo datanya ga masuk kedatabase gmna ?? gaada yang error

    BalasHapus
    Balasan
    1. cek file nya sudah masuk ke folder upload blm, kalo belum tambahkan helper, kalo blm masuk database check query nya.

      Hapus
  27. boleh minta syntax contohnya ??

    BalasHapus
    Balasan
    1. silahkan pm saya irwan.develop@gmail.com

      Hapus
  28. Duh Error mas

    Severity: Warning

    Message: file_get_contents(./assets/xls/): failed to open stream: No such file or directory

    Filename: Shared/OLERead.php

    Line Number: 85

    Backtrace:

    BalasHapus
    Balasan
    1. coba cek lagi pathnya mas.
      biasanya karena file nya gak ditemukan kalau error "failed to open stream: No such file or directory".

      Hapus
  29. Setelah dimasukin ke hosting kok tidak bisa diupload ya admin tapi kalo localhost lancara jaya...mohon solusi nya

    BalasHapus
  30. keren gan maksih banyak sudah share

    BalasHapus
  31. A Database Error Occurred
    Error Number: 1062

    Duplicate entry '1' for key 'PRIMARY'

    INSERT INTO `eimport` (`idimport`, `nama`, `alamat`, `kontak`) VALUES (1, 'suku', 'etgh', 867623764)

    Filename: C:/xampp/htdocs/sipandu/application/controllers/excel.php

    Line Number: 60

    mohon dibantu mas

    BalasHapus
    Balasan
    1. itu terjadi karena idimport nya ada yang sama duplicate(primary key), coba set id import nya pake auto_incrument atau uuid biar tidak bentrok

      Hapus
  32. A Database Error Occurred
    Error Number: 1062

    Duplicate entry '1' for key 'PRIMARY'

    INSERT INTO `eimport` (`idimport`, `nama`, `alamat`, `kontak`) VALUES (1, 'suku', 'etgh', 867623764)

    Filename: C:/xampp/htdocs/sipandu/application/controllers/excel.php

    Line Number: 60

    mohon dibantu mas

    BalasHapus
  33. kalau upload excel tersebut berkali2, apakah data tersebut akan duplikat, atau malah terjadi error? misalnya excel tersebut memiliki update-an terbaru?

    BalasHapus
    Balasan
    1. jika kita ulang berkali-kali pasti duplikat karena import bedasarkan value dari excel nya kecuali ada primary key pada tabel makan import berhenti. kalo ingin membuat update data itu tergantung query nya dan yang pasti harus ada parameter ID yang harus sama saat di import.

      Hapus
    2. kalau menggunakan primary key apakah bisa mengupdate datanya? Atau malah terjadi error pd saat mengimport ya kak? Kira2 yang di ubah pada bagian syntax yang mana ya? Maaf saya masih newbie hehe

      Hapus
  34. maaf gan,
    "minta bantuannya, saya sudah coba project.nya, lancar,
    tapi setelah saya tekan tombol import langsung masuk ke halaman "about:blank" tidak tampil apapun, dan data tidak masuk, itu kenapa ya? mohon bantuannya "
    kasus saya seperti diatas, bagaimana mengatasinya ya gan?, terima kasih

    BalasHapus
    Balasan
    1. di localhost atau dihosting?

      Hapus
    2. apakah ada pesan error yang muncul? coba di cek di log error

      Hapus
  35. mohon maaf , apa ada solusinya harus bagaimana?

    BalasHapus
  36. Kalau mencegah duplikasi data saat import gimana gan?

    BalasHapus
    Balasan
    1. cara paling mudah dengan mengecek id nya dulu jika ada yang sama maka proses import akan di cancel jika tidak maka proses import di eksekusi...

      Hapus
  37. Mas bisa bantu saya mas, saya gak tahu query biar datany yang dimasukin gk duplicate, bisa bantu mas kasih tahu query sama codenya apa?

    BalasHapus
    Balasan
    1. yang tidak mau duplikate bisanya ID yang primary diubah buat Autoincrument atau dibuat random

      Hapus
  38. kok terus muncul
    An Error Was Encountered
    Unable to load the requested class: IOFactory

    mohon pencerahan suhu

    BalasHapus
    Balasan
    1. coba cek dimari untuk masalah IO Factory https://cahbagusnongkrong.blogspot.com/2016/09/mengatasi-error-non-existent-class.html

      Hapus
    2. terimakasih banyak suhu, baru mau suhu

      Hapus
  39. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  40. min, untuk file model nya gmana ?
    mohon bimbingannya

    BalasHapus
    Balasan
    1. dan sekarang errornya ini gan

      Error loading file "format.xlsx": Could not open http://localhost:8080/fuzzy/assets/upload/format.xlsx for reading! File does not exist.

      Hapus
  41. saing gan,,kalo data kita berada didalam sheet 2 bagaiman caranya gan??
    soalx saya coba dy hanya membaca sheet yang pertama aja.
    thankss

    BalasHapus
    Balasan
    1. coba ubah getSheet jika 0 = sheet 1, jika 1 berarti shet 2,

      $sheet = $objPHPExcel->getSheet(0);

      Hapus