Import Data Excel dengan Codeigniter 4 menggunakan PHPSpreadsheet
Dalam aplikasi pasti ada form untuk input data, dalam form tersebut pasti data yang di input hanya satu-satu atau kita tidak bisa menginput data banyak dalam 1 inputan. Bagaimana cara agar kita dapat menginput banyak data dalam 1 kali input data langsung tersimpan dalam database ? Caranya adalah dengan membuat fitur upload data dengan menggunakan excel.
Pada artikel kali ini admin akan membahas bagaimana cara membuat import data dengan excel di Codeigniter 4 menggunakan library PHPSpreadsheet untuk membaca file excelnya. Kenapa admin kali ini menggunakan library PHPSpreadsheet tidak menggunakan library PHPExcel. Karena admin menggunakan PHP Versi 8 maka admin menggunakan library PHPSpreadsheet Perlu kita ketahui juga bahwa PHPExcel sudah tidak bisa berjalan pada PHP Versi 8.
Cara Membuat Import Data dengan Excel di Codeigniter 4
Langkah pertama yang perlu kita lakukan adalah menginstall Codeigniter 4 dalam laptop/komputer kita. Jika belum tau caranya silahkan klik Cara Install Codeigniter 4.
Langkah yang kedua silahkan anda install library PHPSpreadsheet melalui composer. Silahkan ketikan kode berikut ini pada Composer anda :
composer require phpoffice/phpspreadsheet
Jika berhasil maka akan muncul folder baru yang bernama vendor dalam folder root Codeigniter 4 anda seperti gambar dibawah ini:
Membuat Koneksi Database
database.default.hostname = localhost
database.default.database = siswa
database.default.username = root
database.default.password =
database.default.DBDriver = MySQLi
masih dalam file .env jangan lupa untuk merubah CI_ENVIRONMENT yang awalnya production menjadi development
Membuat Model
<?php namespace App\Models;
use CodeIgniter\Model;
class ModelSiswa extends Model
{
protected $table = 'siswa';
protected $primaryKey = 'NIS';
protected $allowedFields =['NamaSiswa','Alamat'];
}
Membuat Controller
Controller bisa disebut juga sebagai jembatan antara model dan view. Di sini kita akan membuat file baru dengan nama Siswa.php kemudian simpan di folder app/Controller. didalam file Siswa.php nantinya kita akan membuat dua fungsi yaitu fungsi yang pertama index yang berfungsi untuk menampilkan data dan fungsi kedua yaitu simpanExcel yang nantinya digunakan untuk menyimpan data dari excel ke dalam database. Silahkan tulis kode dibawah ini kedalam file Siswa.php
<?php namespace App\Controllers;
use App\Models\ModelSiswa;
class Siswa extends BaseController
{
public function __construct(){
$this->siswa = new ModelSiswa();
}
public function index(){
$data['Siswa'] = $this->siswa->findAll();
echo view('data_siswa',$data);
}
public function simpanExcel()
{
$file_excel = $this->request->getFile('fileexcel');
$ext = $file_excel->getClientExtension();
if($ext == 'xls') {
$render = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
} else {
$render = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
}
$spreadsheet = $render->load($file_excel);
$data = $spreadsheet->getActiveSheet()->toArray();
foreach($data as $x => $row) {
if ($x == 0) {
continue;
}
$Nis = $row[0];
$NamaSiswa = $row[1];
$Alamat = $row[2];
$db = \Config\Database::connect();
$cekNis = $db->table('siswa')->getWhere(['Nis'=>$Nis])->getResult();
if(count($cekNis) > 0) {
session()->setFlashdata('message','<b style="color:red">Data Gagal di Import NIS ada yang sama</b>');
} else {
$simpandata = [
'Nis' => $Nis, 'NamaSiswa' => $NamaSiswa, 'Alamat'=> $Alamat
];
$db->table('siswa')->insert($simpandata);
session()->setFlashdata('message','Berhasil import excel');
}
}
return redirect()->to('/siswa');
}
}
Membuat View
Silahkan buat file baru dengan nama data_siswa.php simpan dalam folder app/Views kemudian tulis kode berikut ini :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Import Excel Codeigniter</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
</head>
<body>
<div class="container mt-3">
<?php
if(session()->getFlashdata('message')){
?>
<div class="alert alert-info">
<?= session()->getFlashdata('message') ?>
</div>
<?php
}
?>
<form method="post" action="/siswa/simpanExcel" enctype="multipart/form-data">
<div class="form-group">
<label>File Excel</label>
<input type="file" name="fileexcel" class="form-control" id="file" required accept=".xls, .xlsx" /></p>
</div>
<div class="form-group">
<button class="btn btn-primary" type="submit">Upload</button>
</div>
</form>
<table class="table table-bordered">
<thead>
<tr>
<th>NIS</th>
<th>Nama Siswa</th>
<th>Alamat Siswa</th>
</tr>
</thead>
<tbody id="contactTable">
<?php
if(!empty($Siswa)){
foreach($Siswa as $dt){
?>
<tr>
<td><?= $dt['NIS'] ?></td>
<td><?= $dt['NamaSiswa'] ?></td>
<td><?= $dt['Alamat'] ?></td>
</tr>
<?php
}
}else{
?>
<tr>
<td colspan="3">Tidak ada data</td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
</body>
</html>
Pada views diatas kita sudah membuat tampilan untuk form upload excel yang diarahkan ke fungsi simpanExcel yang ada di controllers dan juga kode untuk menampilkan data dari database.
Saat membuat form upload file jangan lupa untuk mencantumkan attribut berikut enctype="multipart/form-data”.
Jalankan codeigniter 4 masuk ke direktori root Codeigniter 4 melalui terminal atau CMD ketikan php spark serve. Kemudian buka broser ketikan alamat ini : http://localhost:8080/index.php/siswa
Format excel yang diupload seperti yang ada digambar berikut ini :
Jika berhasil maka tampilannya akan seperti dibawah ini :
Sekian artikel kali ini jika ada yang belum jelas dan perlu ditanyakan silahkan kita diskusikan didalam kolom komentar dibawah ini.
Note tambahan, tutorial diatas menggunakan PHP 7.4 (saya mencoba di PHP 8 dan PHP 7.3 mengalami bberapa kali error), semoga bermanfaat
ReplyDeletesolusinya?
Deleteerror seperti apa bang ?
DeleteUntuk CodeIgniter 4.2.1
ReplyDeleteError Call to a member function getClientExtension() on null
tolong di Update
php office nya ga bisa muncul di tab phpnya
ReplyDeleteColumn 'Nis' cannot be null
ReplyDelete