Sebelumnya, gua udah pernah sharing artikel mengenai import data dari file excel ke database MySQL dengan Codeigniter 3. Nah, pada artikel ini, gua akan coba sharing mengenai cara import data dari file CSV ke database MySQL dengan Codeigniter 3.
CSV adalah singkatan dari Comma Separated Value. File CSV adalah sebuah file yang berisi sekumpulan baris data, yang mana setiap baris data tersebut dapat terdiri dari beberapa value yang secara umum dipisahkan dengan simbol koma (pemisah tersebut, biasa disebut dengan delimiter). Untuk simbol yang menjadi delimiter sebenarnya tidak harus koma ‘,’. Secara default, apabila kita menyimpan file CSV melalui aplikasi Excel, maka delimiter yang digunakan adalah titik koma ‘;’. Terkadang, ada juga yang menggunakan titik dua ‘:’, pipa ‘|’ atau simbol lainnya jika memungkinkan.
Proses import data ke MySQL dari file CSV ini bisa menjadi alternatif selain dari file excel XLSX. Proses import data dari file CSV ke MySQL dengan Codeigniter 3 dapat diterapkan dengan mudah tanpa menggunakan bantuan library apapun. Sehingga, kita tidak perlu repot untuk mencari, menambahkan dan mempelajari library pihak ketiga ke dalam projek kita.
Oke, langsung aja berikut kodingannya.
Untuk studi kasus atau format data, silahkan kalian sesuaikan kembali dengan studi kasus kalian ya.
Sebelum proses ngoding, kita siapkan dulu projek Codeigniter 3 dan database MySQL yang akan digunakan. Lewati langkah ini jika kalian sudah mempersiapkannya.
Silahkan kalian download dan konfigurasi dasar projek Codeigniter 3 kalian sehingga siap digunakan.
Selanjutnya adalah, silahkan buat database dan table pada MySQL. Pada artikel ini, gua mencoba buat database dengan nama “tutorial” dan table “buku”. Jalankan query MySQL dibawah ini untuk proses membuat table “buku”.
CREATE TABLE `buku` (
`id` int NOT NULL,
`judul` varchar(150) NOT NULL,
`penulis` varchar(100) NOT NULL,
`penerbit` varchar(100) NOT NULL,
`tgl_terbit` date NOT NULL,
`jml_halaman` int NOT NULL,
`isbn` varchar(75) NOT NULL,
`tgl_ditambahkan` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
Silahkan buat file model dan ketikkan atau copy kode program seperti di bawah ini. Disini gua memberikan nama file modelnya adalah Manage_spreadsheet_model.php. Penamaan file ini tidak baku ya, jadi terserah kalian mau memberikan nama file apa, dengan syarat nama class nya sama dengan nama filenya ya..
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Manage_spreadsheet_model extends CI_Model{
public function __construct() {
parent::__construct();
$this->table = 'buku';
$this->db = $this->load->database('default',TRUE);
}
public function add($data) {
$this->db->insert($this->table, $data);
return $this->db->insert_id();
}
public function get($where = 0) {
if($where)
$this->db->where($where);
$query = $this->db->get($this->table);
return $query->row();
}
public function add_batch($data) {
return $this->db->insert_batch($this->table, $data);
}
}
Silahkan buat file view dan ketikkan atau copy kode program seperti di bawah ini. File view ini berfungsi untuk menampilkan antarmuka untuk proses upload file dan tombol submit untuk proses import data.
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Import Data Buku</title>
<style type="text/css">
h1{
text-align: center;
}
</style>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
</head>
<body>
<div class="col-md-6 offset-md-3 mt-5">
<h1>Import Data Buku</h1>
<?php $alert = $this->session->flashdata('alert'); ?>
<?php if(!empty($alert)): ?>
<div class="alert alert-<?=$alert['class']?>">
<a href="#" class="close" id="btnclose-alert">×</a>
<?=$alert['message']?>
</div>
<script type="text/javascript">
$('#btnclose-alert').click(function(e){
e.preventDefault();
$(this).parent().fadeOut('slow');
});
</script>
<?php endif; ?>
<form action="/manage_spreadsheet/import_csv" method="POST" enctype="multipart/form-data">
<div class="form-group mt-3">
<label class="mr-2">Upload File CSV:</label>
<input type="file" name="file">
</div>
<hr>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</body>
</html>
Selanjutnya, silahkan buat file controller. File controller ini berfungsi untuk handle proses pembacaan data dari file CSV ke dalam bentuk data array yang siap untuk proses penyimpanan ke MySQL melalui file model. Untuk fungsi tiap baris kode program, gua coba share dalam bentuk komentar pada kodingan ya..
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
date_default_timezone_set('Asia/Jakarta');
class Manage_spreadsheet extends CI_Controller {
public function __construct() {
parent::__construct();
// Load file model yang akan digunakan
$this->load->model('manage_spreadsheet_model');
}
public function index() {
// Load view form upload
$this->load->view("manage_spreadsheet/index");
}
public function import_csv() {
// Path directory/folder untuk menyimpan file csv yang di upload
$path = './assets/temp/files/';
// Memanggil fungsi upload_config() untuk inisialisasi fungsi upload
$this->upload_config($path);
if (!$this->upload->do_upload('file')) {
//jika proses upload gagal, set flash message error lalu redirect ke halaman form
$this->session->set_flashdata('msg', $this->upload->display_errors());
redirect('/manage_spreadsheet');
} else {
//get data file yang di upload
$file_data = $this->upload->data();
//get full path hingga ke filename
$file_name = $path.$file_data['file_name'];
//proses untuk get extension file
$arr_file = explode('.', $file_name);
$extension = end($arr_file);
//cek dan validasi jika file yang di upload ber ekstensi csv
if($extension == 'csv' && filesize($file_name) > 0) {
// simbol yang menjadi pemisah antar field data
$delimiter = ';';
$i = 0;
// command untuk membuka file untuk proses read file
$handle = fopen($file_name, "r");
// proses membaca file csv per baris data dengan fungsi while
// 0 adalah batas maksimal size yang dapat di proses.
// Angka 0 artinya filesize yang dapat di proses, unlimited tetapi hati hati karena dapat membuat proses lemot
while (($row = fgetcsv($handle, 0, $delimiter))) {
$i++;
if ($i == 1) continue;
// cek supaya tidak ada duplikasi data
$result = $this->manage_spreadsheet_model->get(array("isbn" => $row[5]));
if($result == FALSE || empty($result)) {
// Data yang akan disimpan ke dalam database
$list [] = [
'judul' => $row[0],
'penulis' => $row[1],
'penerbit' => $row[2],
'tgl_terbit' => $row[3],
'jml_halaman' => $row[4],
'isbn' => $row[5],
'tgl_ditambahkan' => date("Y-m-d H:i:s")
];
}
}
fclose($handle);
} else {
// jika salah, set flash message error lalu redirect ke halaman form
$this->session->set_flashdata('alert',array(
'class' => 'warning',
'message' => 'Tipe file yang diijinkan hanya .csv'
)
);
redirect('/manage_spreadsheet');
}
if(file_exists($file_name))
//hapus kembali file, supaya tidak memenuhi server
unlink($file_name);
if(count($list) > 0) {
// proses insert batch data dari file csv ke mysql
$result = $this->manage_spreadsheet_model->add_batch($list);
if($result) {
$this->session->set_flashdata('alert',array(
'class' => 'success',
'message' => 'Sukses Import Data'
)
);
redirect('/manage_spreadsheet');
} else {
$this->session->set_flashdata('alert',array(
'class' => 'danger',
'message' => 'Maaf, Import Data Gagal'
)
);
redirect('/manage_spreadsheet');
}
} else {
$this->session->set_flashdata('alert',array(
'class' => 'warning',
'message' => 'Data Sudah Ada di Database'
)
);
redirect('/manage_spreadsheet');
}
}
redirect('/manage_spreadsheet');
}
public function upload_config($path) {
if (!is_dir($path))
mkdir($path, 0755, TRUE);
$config['upload_path'] = './'.$path;
$config['allowed_types'] = 'csv';
$config['max_filename'] = '255';
$config['encrypt_name'] = TRUE;
$config['max_size'] = 4096;
$this->load->library('upload', $config);
}
}
Untuk proses uji coba, silahkan buat file CSV dan data dummy-nya. Untuk membuat file CSV, bisa melalui excel, kemudian save as CSV. Untuk data dummy nya, gua menggunakan data buku yang gua ambil dari Toko Buku Gramedia Online.
Jika kita buka file CSV melalui notepad atau editor text lainnya, kurang lebih tampilan datanya seperti gambar di bawah ini.
![Contoh File CSV [docs/kuhomi.id].](http://manage.kuhomi.id/assets/img/gallery/1722312319818.png)
Jika file CSV dengan data dummy sudah siap, akses fungsi index controller Manage_spreadsheet.php melalui browser. Lakukan proses upload file tersebut dan import data, setelah itu cek ke databse MySQL, kalau gua disini akses database MySQL melalui phpmyadmin. Apakah data yang di import sudah masuk dan sesuai.
![Form Import File CSV [docs/kuhomi.id].](http://manage.kuhomi.id/assets/img/gallery/1722312467607.png)