MASIGNCLEAN102

Cara Import Data Excel ke Database di Codeigniter


Halo semua, pada seri Belajar Codeigniter ini kita akan belajar cara import data excel ke database di codeigniter dengan mudah. Nah, pada artikel artikel sebelumnya tentang belajar codeigniter ini, kita sudah membahas berbagai macam hal ya. Mulai dari cara Install sampai dengan teknik CRUD dengan AJAX. Untuk artikel kali ini, kita akan bermain dengan librari PHPExcel sebagai handler dari excelnya.

Import data excel ke database di codeigniter sebenarnya sangat mudah. Meskipun librari PHPExcel sudah deprecated / tidak dikembangkan lagi sejak tahun 2017. Tetapi, librari ini masih bisa kalian gunakan untuk membuat sistem import data ke database mysql , postgresql dan lain lain. Mungkin kalau web kalian meminta fitur yang lebih, PHPExcel bukanlah jawaban yang tepat bagi web kamu. Selain itu, kamu juga bisa pake librari PHPSpreadsheet yang merupakan pengembangan lanjutan dari PHPExcel. Kita bakal bahas PHPSpreadsheet nanti, kali ini kita import data excel ke database di codeigniter menggunakan librari PHPExcel terlebih dahulu.

Persiapan, Siapkan Librari PHPExcel untuk Import data Excel ke database

Untuk langkah awal, tentu saja kita perlu untuk mendownload librari PHPExcel terlebih dahulu kemudian menaruhnya di folder third party untuk diload.

Kalian bisa download melalui link berikut, https://github.com/PHPOffice/PHPExcel

Download ZIP, kemudian ekstrak dan Copy Folder Classes yang ada di dalam ke folder third_party di Codeigniter.



Setelah itu, buatlah file baru di /application/libraries beri nama Excel.php.

Kemudian isi dengan kode berikut :

<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
  require_once APPPATH."/third_party/PHPExcel.php";
  require_once APPPATH."/third_party/PHPExcel/IOFactory.php";
 
 class Excel extends PHPExcel {
       public function __construct() {
       parent::__construct();
   }
 }
Tujuan dari file Excel tersebut tentu saja untuk memuat PHPExcel yang berada di folder third party.

Kedua, Persiapkan database

Langkah kedua, kita akan menyiapkan database untuk menampilkan dan insert data.

Silahkan buat database baru dengan nama db_siswa.

Kemudian kalian bisa buat tabel dengan struktur seperti berikut : 


Atau kalian juga bisa execute SQL di bawah untuk otomatis membuat tabel dan mengisi tabel dengan beberapa data

-- phpMyAdmin SQL Dump
-- version 4.7.0
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: Jan 27, 2020 at 11:49 AM
-- Server version: 10.1.22-MariaDB
-- PHP Version: 7.1.4
 
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
 
 
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
 
--
-- Database: `db_sekolah`
--
 
-- --------------------------------------------------------
 
--
-- Table structure for table `tb_siswa`
--
 
CREATE TABLE `tb_siswa` (
  `id` int(5) NOT NULL,
  `noinduk` int(5) NOT NULL,
  `nama` varchar(50) NOT NULL,
  `hobi` varchar(30) DEFAULT NULL,
  `alamat` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
--
-- Dumping data for table `tb_siswa`
--
 
INSERT INTO `tb_siswa` (`id`, `noinduk`, `nama`, `hobi`, `alamat`) VALUES
(1, 1001, 'Wawan Abdurrahman', 'Menyanyi', 'Jalan Merdeka'),
(2, 1002, 'Maman Sulaiman', 'Renang', 'Jalan Sejahtera'),
(3, 1003, 'Saipul Anwar', 'Basket', 'Jalan Gotong Royong'),
(4, 1004, 'Dadang Suradang', 'Badminton', 'Jalan Kesempurnaan'),
(5, 1005, 'Gadis Sulistyaningtyas', 'Memasak', 'Jalan Kebajikan');
 
--
-- Indexes for dumped tables
--
 
--
-- Indexes for table `tb_siswa`
--
ALTER TABLE `tb_siswa`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `noinduk` (`noinduk`);
 
--
-- AUTO_INCREMENT for dumped tables
--
 
--
-- AUTO_INCREMENT for table `tb_siswa`
--
ALTER TABLE `tb_siswa`
  MODIFY `id` int(5) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=12;COMMIT;
 
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Ketiga, Persiapkan Controller, Model, dan View

Langkah ketiga kita akan membuat Controller dengan nama C_Index, Model dengan nama M_Index , dan View dengan nama V_Index. 


C_Index

Pertama kita akan membuat Controller terlebih dahulu, C_Index akan memiliki 2 fungsi antara lain Fungsi index dan fungsi import. Di fungsi index, kita akan meretrieve data dari database untuk ditampilkan di View,

Isi dengan kode seperti berikut :

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
 
class C_Index extends CI_Controller {
 
    function __construct(){
        parent::__construct();
        $this->load->model('M_index'); // load model m_index
        $this->load->library('Excel'); //load librari excel
 
    }
 
    public function index()
    {
        $data['data'] = $this->M_index->getData(); // ambil data dari M_Index
        $this->load->view('V_Index',$data);
    }
 
    public function importExcel(){
        $fileName = $_FILES['file']['name'];
          
        $config['upload_path'] = './assets/'; //path upload
        $config['file_name'] = $fileName;  // nama file
        $config['allowed_types'] = 'xls|xlsx|csv'; //tipe file yang diperbolehkan
        $config['max_size'] = 10000; // maksimal sizze
 
        $this->load->library('upload'); //meload librari upload
        $this->upload->initialize($config);
          
        if(! $this->upload->do_upload('file') ){
            echo $this->upload->display_errors();exit();
        }
              
        $inputFileName = './assets/'.$fileName;
 
        try {
                $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
                $objReader = PHPExcel_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++){                  //  Read a row of data into an array                 
                $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,
                                                NULL,
                                                TRUE,
                                                FALSE);   
 
                 // Sesuaikan key array dengan nama kolom di database                                                         
                 $data = array(
                    "noinduk"=> $rowData[0][0],
                    "nama"=> $rowData[0][1]
                );
 
                $insert = $this->db->insert("tb_siswa",$data);
                      
            }
            redirect('Index');
    }
}

Pada kode berikut sudah saya tambahkan keterangan – keterangan setiap kode, jadi silahkan pahami sendiri ya. Kalau bingung bisa kalian ditanyakan di kolom komentar.

M_index 

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
 
class M_index extends CI_Model {
 
    function getData(){
        return $this->db->get('tb_siswa')->result_array();
    }
}

V_Index

Untuk bagian tampilan kita akan membuat tabel untuk menampilkan data dan juga satu buah form untuk melakukan import data excel ke database.

Buka dan tambahkan kode berikut ke V_Index.

<!DOCTYPE html>
<html>
<head>
    <title>Import Excel KompiKaleng</title>
 
    <style type="text/css">
        table {
            border-collapse: collapse;
        }
        table,td,th {
            border: 1px solid black;
        }
        form {
            margin-top: 10px;   
        }
    </style>
</head>
<body>
<table>
    <thead>
        <tr>
            <th>No</th>
            <th>Nomor Induk</th>
            <th>Nama</th>
        </tr>
    </thead>
    <tbody>
        <?php $no=0; foreach ($data as $key => $value): $no++; ?>
            <tr>
                <td><?= $no; ?></td>
                <td><?= $value['noinduk'] ?></td>
                <td><?= $value['nama']; ?></td>
            </tr>
        <?php endforeach; ?>
    </tbody>
</table>
 
<form method="post" action="<?php echo base_url('C_Index/importExcel') ?>" enctype="multipart/form-data">
    <input type="file" name="file">
    <button type="submit">Submit</button>
</form>
</body>
</html>

Selesai

Projek kalian sudah selesai, saatnya lakukan trial.

Untuk tampilan kurang lebih akan terlihat seperti ini 


Excel yang akan di-import :


Hasil :
Nah, bagaimana temen – temen? apa eksperimen kali ini berhasil?

Coba eksperimen CRUD dengan Ajax tanpa reload di sini :

Panduan Lengkap Membuat CRUD dengan AJAX dan Codeigniter

Untuk keterangan setiap kode di atas, sudah saya tambahkan beberapa keterangan untuk membantu kalian memahami setiap kode yang ada.

Kalau tutorial import data excel ke database di codeigniter kali ini berhasil kalian bisa share di kolom komentar ya 🙂 dan jangan lupa untuk tinggalkan komentar jika kalian merasa artikel ini bermanfaat.

Terimakasih.


Share This :
Funtechsy